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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
lloverson
Regular Visitor

Obtener registros consecutivos en Power BI

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

lloverson_0-1615940009470.png

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.

lloverson_1-1615940061341.png

 

Esto se podría realizar en Power BI ?, con DAX ?, o de que forma ?.
Muchas gracias de antemano!

1 ACCEPTED SOLUTION
Icey
Community Support
Community Support

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" )

SI - C.JPG

 

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"
    )

SI - M.JPG

 

 

Best Regards,

Icey

 

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

View solution in original post

2 REPLIES 2
lloverson
Regular Visitor

Perfect, thank you very much!

Icey
Community Support
Community Support

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" )

SI - C.JPG

 

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"
    )

SI - M.JPG

 

 

Best Regards,

Icey

 

If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

Top Solution Authors
Top Kudoed Authors