Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
Buenas noches con todos, tengo un caso en Power BI y se los comparto en caso pueden brindar su apoyo.
Tengo una tabla con los siguientes campos:
Columna ID, que es el índice
Columna Hora Actual
Columna Hora anterior, la cual la obtengo del registro anterior de la columna Hora Actual
Columna Diferencia Minutos, la cual es la resta de las Horas (Columna Hora Actual - Columna Hora anterior)
Columna <30 ', la cual es una condición, en donde si la columna Diferencia Minutos es menor a 30, entonces toma el valor SI, de lo contrario toma el valor NO
Para el ejemplo que se muestra, al totalizar los registros que cumplan con la condición de la columna <30 'se obtiene solo 1 registro, lo cual sería correcto.
Si embargo lo que se requiere obtener es el par de registros que hacen que esa condición de <30 'se cumpla, es decir para el ejemplo mostrado se debería obtener los registros cuyo ID es 2 y 3.
Para lo cual tengo pensado realizar lo siguiente:
Crear una tabla adicional con los mismos registros pero ordenados en forma descendente (de mayor Hora Actual a menor Hora Actual).
Luego aplicar los mismos que a la tabla original y así obtener el ID faltante, que para este caso es el ID 2 y con ello debería el par de registros requeridos.
Esto se podría realizar en Power BI ?, con DAX ?, o de que forma ?.
Muchas gracias de antemano!
Solved! Go to Solution.
Hi @lloverson ,
Please try to create columns or measure like below.
Columns:
Difference Minutes - Column =
VAR Time_Before =
CALCULATE (
MAX ( 'Table'[Time Actual] ),
FILTER (
'Table',
'Table'[Group] = EARLIER ( 'Table'[Group] ) --------------if you don't need to group, this can be deleted.
&& 'Table'[ID] < EARLIER ( 'Table'[ID] )
)
)
VAR Difference_Minutes =
DATEDIFF ( Time_Before, [Time Actual], MINUTE )
RETURN
Difference_Minutes
< 30' - Column =
VAR ID_lessthan30 =
CALCULATE (
MIN ( 'Table'[ID] ),
FILTER (
'Table',
'Table'[Group] = EARLIER ( 'Table'[Group] ) --------------if you don't need to group, this can be deleted.
&& 'Table'[ID] >= EARLIER ( 'Table'[ID] )
&& [Difference Minutes - Column] <> BLANK ()
&& [Difference Minutes - Column] < 30
)
)
RETURN
IF ( [ID] = ID_lessthan30 || [ID] = ID_lessthan30 - 1, "SI", "NO" )
Measures:
Difference Minutes - Measure =
VAR Time_Before =
CALCULATE (
MAX ( 'Table'[Time Actual] ),
FILTER (
ALLSELECTED ( 'Table' ),
'Table'[Group] = MAX ( 'Table'[Group] ) --------------if you don't need to group, this can be deleted.
&& 'Table'[ID] < MAX ( 'Table'[ID] )
)
)
VAR Difference_Minutes =
DATEDIFF ( Time_Before, MAX ( [Time Actual] ), MINUTE )
RETURN
Difference_Minutes
< 30' - Measure =
VAR ID_lessthan30 =
CALCULATE (
MIN ( 'Table'[ID] ),
FILTER (
ALLSELECTED ( 'Table' ),
'Table'[Group] = MAX ( 'Table'[Group] ) --------------if you don't need to group, this can be deleted.
&& 'Table'[ID] >= MAX ( 'Table'[ID] )
&& [Difference Minutes - Measure] <> BLANK ()
&& [Difference Minutes - Measure] < 30
)
)
RETURN
IF (
MAX ( 'Table'[ID] ) = ID_lessthan30
|| MAX ( 'Table'[ID] ) = ID_lessthan30 - 1,
"SI",
"NO"
)
Best Regards,
Icey
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
Perfect, thank you very much!
Hi @lloverson ,
Please try to create columns or measure like below.
Columns:
Difference Minutes - Column =
VAR Time_Before =
CALCULATE (
MAX ( 'Table'[Time Actual] ),
FILTER (
'Table',
'Table'[Group] = EARLIER ( 'Table'[Group] ) --------------if you don't need to group, this can be deleted.
&& 'Table'[ID] < EARLIER ( 'Table'[ID] )
)
)
VAR Difference_Minutes =
DATEDIFF ( Time_Before, [Time Actual], MINUTE )
RETURN
Difference_Minutes
< 30' - Column =
VAR ID_lessthan30 =
CALCULATE (
MIN ( 'Table'[ID] ),
FILTER (
'Table',
'Table'[Group] = EARLIER ( 'Table'[Group] ) --------------if you don't need to group, this can be deleted.
&& 'Table'[ID] >= EARLIER ( 'Table'[ID] )
&& [Difference Minutes - Column] <> BLANK ()
&& [Difference Minutes - Column] < 30
)
)
RETURN
IF ( [ID] = ID_lessthan30 || [ID] = ID_lessthan30 - 1, "SI", "NO" )
Measures:
Difference Minutes - Measure =
VAR Time_Before =
CALCULATE (
MAX ( 'Table'[Time Actual] ),
FILTER (
ALLSELECTED ( 'Table' ),
'Table'[Group] = MAX ( 'Table'[Group] ) --------------if you don't need to group, this can be deleted.
&& 'Table'[ID] < MAX ( 'Table'[ID] )
)
)
VAR Difference_Minutes =
DATEDIFF ( Time_Before, MAX ( [Time Actual] ), MINUTE )
RETURN
Difference_Minutes
< 30' - Measure =
VAR ID_lessthan30 =
CALCULATE (
MIN ( 'Table'[ID] ),
FILTER (
ALLSELECTED ( 'Table' ),
'Table'[Group] = MAX ( 'Table'[Group] ) --------------if you don't need to group, this can be deleted.
&& 'Table'[ID] >= MAX ( 'Table'[ID] )
&& [Difference Minutes - Measure] <> BLANK ()
&& [Difference Minutes - Measure] < 30
)
)
RETURN
IF (
MAX ( 'Table'[ID] ) = ID_lessthan30
|| MAX ( 'Table'[ID] ) = ID_lessthan30 - 1,
"SI",
"NO"
)
Best Regards,
Icey
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.