Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

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
Europe Fabric Conference

Europe’s largest Microsoft Fabric Community Conference

Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.

AugPowerBI_Carousel

Power BI Monthly Update - August 2024

Check out the August 2024 Power BI update to learn about new features.

August Carousel

Fabric Community Update - August 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors
Top Kudoed Authors