cancel
Showing results for 
Search instead for 
Did you mean: 

Fabric is Generally Available. Browse Fabric Presentations. Work towards your Fabric certification with the Cloud Skills Challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Ayuda a contabilizar el tiempo con superposiciones y brechas

Hola a todos,

Todavía soy bastante nuevo y tengo un desafío que no he podido superar. Mi tabla de 'inscripciones' se ve así:

JCTX_2_0-1695839998581.png

Estoy buscando una medida (o cualquier otra opción) que calcule el número total de meses que cada student_id único se consideró "activo".

Para student_id 101, debería ser 1 ya que solo estaban activos en enero de 2000.

Para student_id 202, debería ser 4 ya que estuvieron activos en enero y febrero de 2000, más enero y febrero de 2001. No puedo usar las funciones MIN y MAX porque eso contaría todos los meses entre enero de 2000 y febrero de 2001, lo que sería incorrecto. El estudiante no estuvo activo entre marzo de 2000 y diciembre de 2000.

Para student_id 303, debería ser 15. El estudiante estuvo activo consecutivamente desde enero de 2000 hasta enero de 2001, más abril y mayo de 2001. Una vez más, no puedo usar las funciones MIN y MAX aquí debido a la brecha entre las inscripciones, y tampoco quiero "contar dos veces" de marzo de 2000 a enero de 2000, que se contabilizan tanto en 4 como en 5 de enrollment_id.

Cualquier ayuda sería muy apreciada.

2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

Gracias @OwenAuger. ¡Esto funcionó exactamente como se esperaba!

Syndicate_Admin
Administrator
Administrator

@JCTX_2

Esto es lo que recomendaría (PBIX adjunto):

  1. Debe tener una tabla de fechas que incluya al menos una columna de fecha y una columna de mes/año como "Inicio de mes". La tabla Fecha debe incluir un rango de fechas que abarque todos los valores de start_month y drop_month .
  2. No es necesario que esta tabla de fechas esté relacionada con la tabla de inscripción .
  3. En la tabla de inscripción, start_month y drop_month deben almacenarse como fechas que siguen alguna convención, como las fechas de inicio de mes.
  4. Luego cree una medida como esta:
Active Student-Months = 
SUMX (
    VALUES ( enrollment[student_id] ),
    VAR EnrollmentDates =
        CALCULATETABLE (
            GENERATE (
                enrollment,
                DATESBETWEEN ( 'Date'[Date], enrollment[start_month], enrollment[drop_month] )
            )
        )
    RETURN
        CALCULATE (
            DISTINCTCOUNT ( 'Date'[Start of Month] ),
            EnrollmentDates
        )
)
  1. Esta medida itera sobre los valores de student_id.
  2. Para cada student_id
    1. Itera sobre cada fila de inscripción (mediante GENERATE) y agrega un intervalo de fechas de start_month a drop_month.
    2. Usando estos rangos de fechas para un student_id en particular, los une y cuenta distintos valores de Inicio de Mes dentro de cualquiera de los rangos.
  3. SUMX finalmente suma el número de meses para cada student_id, de modo que efectivamente terminamos con el total de meses-estudiante activos.

OwenAuger_0-1695851049131.png

Este artículo puede ser de interés sobre un tema relacionado:

https://www.daxpatterns.com/events-in-progress/

Saludos

Helpful resources

Announcements
PBI November 2023 Update Carousel

Power BI Monthly Update - November 2023

Check out the November 2023 Power BI update to learn about new features.

Community News

Fabric Community News unified experience

Read the latest Fabric Community announcements, including updates on Power BI, Synapse, Data Factory and Data Activator.

Power BI Fabric Summit Carousel

The largest Power BI and Fabric virtual conference

130+ sessions, 130+ speakers, Product managers, MVPs, and experts. All about Power BI and Fabric. Attend online or watch the recordings.

Top Solution Authors