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

Enhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.

Reply
Syndicate_Admin
Administrator
Administrator

Cálculo del tiempo -tiempo entre varios eventos con el tiempo en una columna

Hola a todos

Probé la fórmula de esta solución https://community.powerbi.com/t5/Desktop/Calculated-Column-time-between-events-in-different-rows/m-p... sobre mi situación porque parece la misma intención, pero al adaptar la fórmula sólo funcionó en parte. Lo raro es que de vez en cuando calcula el tiempo entre los acontecimientos, pero la mayoría de las veces no lo hace. (en la tabla que se muestra a continuación sólo calculó el último evento).

Mi situación se muestra a continuación. Quiero calcular el tiempo entre, cuando se produce un evento ''Gekomen'' y cuando los eventos desaparecen ''Gegaan''', que se muestra en la fila Estado. Los eventos tienen un ID que está conectado por un tipo de evento (Estado), por lo que puede ocurrir varias veces, quiero saber el tiempo entre el estado (''gegaan'' y ''gekomen''). (la parte difícil es que todos los valores de evento aparecen entre sí y los eventos pueden aparecer y desaparecer en la misma fecha y hora, también los eventos pueden ocurrir varias veces en poco tiempo. ¡Espero que puedas ayudarme!

Duración del índice de fecha y hora del ID de estado

Pasado 1-2-2021 09:34 10 7

Pasado 1-2-2021 09:34 637 7

Pasado 1-2-2021 09:34 641 3

Pasado 1-2-2021 09:34 641 3

Pasado 1-2-2021 09:35 637 9

Pasado 1-2-2021 09:35 10 9

Pasado 1-2-2021 09:37 635 1

Pasado 1-2-2021 09:37 626 3

Vino 1-2-2021 09:37 635 1

Vino 1-2-2021 09:37 635 1

Pasado 1-2-2021 09:37 635 1

Pasado 1-2-2021 09:37 626 3

Vino 1-2-2021 09:37 655 1

Pasado 1-2-2021 09:37 655 1

Vino 1-2-2021 09:38 656 1

Pasado 1-2-2021 09:39 656 2 1

(Los datos mostrados son igual de refference para los datos reales)

Utilicé la fórmula del post en el enlace.

¡Gracias por ayudarme!

1 ACCEPTED SOLUTION

No @WmUit,

De hecho, lo que creé antes es una medida no una columna calculada... He creado un archivo pbix de ejemplo (ver archivo adjunto) para usted, por favor compruebe si eso es lo que desea.

1. Cree una columna calculada para obtener el rango por ID

Index = 
RANKX (
    FILTER (
        ALL ( 'Data' ),
        'Data'[Status]
            IN { "Gegaan", "Gekomen" }
                && 'Data'[ID] = EARLIER ( 'Data'[ID] )
    ),
    'Data'[Date and Time],
    ,
    ASC,
    DENSE
)

2. Cree una medida o columna calculada para obtener la duración

Medida:

Measure Duration = 
VAR _gektime =
    CALCULATE (
        MAX ( 'Data'[Date and Time] ),
        FILTER (
            ALLSELECTED ( 'Data' ),
            'Data'[ID] = SELECTEDVALUE ( 'Data'[ID] )
                && 'Data'[Status] = "Gekomen"
                && 'Data'[Index] <= SELECTEDVALUE ( 'Data'[Index] )
        )
    )
VAR _duration =
    DATEDIFF (
        IF ( SELECTEDVALUE ( 'Data'[Status] ) = "Gegaan", _gektime, BLANK () ),
        SELECTEDVALUE ( 'Data'[Date and Time] ),
        SECOND
    )
VAR _hours =
    INT ( _duration / 3600 )
VAR _minutes =
    INT ( MOD ( _duration - ( _hours * 3600 ), 3600 ) / 60 )
VAR _seconds =
    ROUNDUP ( MOD ( MOD ( _duration - ( _hours * 3600 ), 3600 ), 60 ), 0 )
VAR _hh =
    IF (
        LEN ( _hours ) = 1,
        CONCATENATE ( "0", _hours ),
        CONCATENATE ( "", _hours )
    )
VAR _mm =
    IF (
        LEN ( _minutes ) = 1,
        CONCATENATE ( "0", _minutes ),
        CONCATENATE ( "", _minutes )
    )
VAR _ss =
    IF (
        LEN ( _seconds ) = 1,
        CONCATENATE ( "0", _seconds ),
        CONCATENATE ( "", _seconds )
    )
RETURN
    IF (
        ISBLANK ( _duration ),
        BLANK (),
        CONCATENATE (
            _hh,
            CONCATENATE ( ":", CONCATENATE ( _mm, CONCATENATE ( ":", _ss ) ) )
        )
    )

O columna calculada:

Calculated Column Duration = 
VAR _gektime =
    CALCULATE (
        MAX ( 'Data'[Date and Time] ),
        FILTER (
            ALLSELECTED ( 'Data' ),
            'Data'[ID] = EARLIER ( 'Data'[ID] )
                && 'Data'[Status] = "Gekomen"
                && 'Data'[Index] <= EARLIER ( 'Data'[Index] )
        )
    )
VAR _duration =
    DATEDIFF (
        IF ( 'Data'[Status] = "Gegaan", _gektime, BLANK () ),
        'Data'[Date and Time],
        SECOND
    )
VAR _hours =
    INT ( _duration / 3600 )
VAR _minutes =
    INT ( MOD ( _duration - ( _hours * 3600 ), 3600 ) / 60 )
VAR _seconds =
    ROUNDUP ( MOD ( MOD ( _duration - ( _hours * 3600 ), 3600 ), 60 ), 0 )
VAR _hh =
    IF (
        LEN ( _hours ) = 1,
        CONCATENATE ( "0", _hours ),
        CONCATENATE ( "", _hours )
    )
VAR _mm =
    IF (
        LEN ( _minutes ) = 1,
        CONCATENATE ( "0", _minutes ),
        CONCATENATE ( "", _minutes )
    )
VAR _ss =
    IF (
        LEN ( _seconds ) = 1,
        CONCATENATE ( "0", _seconds ),
        CONCATENATE ( "", _seconds )
    )
RETURN
    IF (
        ISBLANK ( _duration ),
        BLANK (),
        CONCATENATE (
            _hh,
            CONCATENATE ( ":", CONCATENATE ( _mm, CONCATENATE ( ":", _ss ) ) )
        )
    )

yingyinr_0-1616048942083.png

Saludos

View solution in original post

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

No @WmUit,

Puede crear una medida como se muestra a continuación:

Duration =
VAR _Gekomen =
    CALCULATE (
        MAX ( 'Data'[Date and Time] ),
        FILTER (
            ALLSELECTED ( 'Data' ),
            'Data'[ID] = SELECTEDVALUE ( 'Data'[ID] )
                && 'Data'[Status] = "Gekomen"
        )
    )
VAR _Gegaan =
    CALCULATE (
        MIN ( 'Data'[Date and Time] ),
        FILTER (
            ALLSELECTED ( 'Data' ),
            'Data'[ID] = SELECTEDVALUE ( 'Data'[ID] )
                && 'Data'[Status] = "Gegaan"
                && 'Data'[Date and Time] > _Gekomen
        )
    )
RETURN
    DATEDIFF ( _Gekomen, _Gegaan, MINUTE )

yingyinr_1-1615804941800.png

Si el anterior no funciona, proporcione su resultado esperado con más detalles. Gracias.

Saludos

Hola @yingyinr , Gracias por responder, Lo anterior no está funcionando. Para explicar mi resultado esperado hice una explicación de Excel. El estado es un evento que muestra cuándo y evento se está produciendo cuando se ha ido, por lo que en esta situación 'gegaan' indica cuando el evento se está disipando en ''gekomen'' es cuando comienza un evento. El ID es un tipo de evento. Quiero saber cuánto tiempo está ocurriendo un evento. La nota al revés es que cada evento se puede ocurrir varias veces y los eventos se están produciendo a través de una y otra. Necesito una Fórmula que calcule el tiempo (gegaan-gekomen) por evento. Así que puedo ver por ID cuánto tiempo ocurrió.

WmUit_0-1615888314415.png

Cuando mi resultado esperado aún no esté claro, no dudes en preguntar a 🙂

Saludos

Wesley

No @WmUit,

Actualicé la fórmula de duración de la medida como se indica a continuación, pero obtendrá un resultado incorrecto cuando haya varios status (por ejemplo: id 210).... ¿Podría proporcionar la lógica de cálculo sobre este escenario?

Duration = 
var _selid=SELECTEDVALUE('Data'[ID])
VAR _gekindex =
    CALCULATE (
        MIN( 'Data'[Index] ),
        FILTER (
            ALLSELECTED( 'Data' ),
            'Data'[ID] = _selid
                && 'Data'[Status] = "Gegaan"
        )
    )
VAR _gegaindex =
    CALCULATE (
        MAX( 'Data'[Index] ),
        FILTER (
            ALLSELECTED ( 'Data' ),
            'Data'[ID] = _selid
                && 'Data'[Status] = "Gekomen"
                && SELECTEDVALUE('Data'[Index]) >=_gekindex
        )
    )
var _gegatime=CALCULATE(max('Data'[Date and Time]),FILTER(ALLSELECTED( 'Data' ),'Data'[ID]=_selid&&'Data'[Index]=_gegaindex))
RETURN
 DATEDIFF (  if(SELECTEDVALUE('Data'[Status] )= "Gegaan",_gegatime,BLANK()),SELECTEDVALUE('Data'[Date and Time]),  MINUTE )

yingyinr_0-1615975692038.png

Saludos

Hola @yingyinr muchas gracias por su reacción,

Probé tu fórmula pero no obtequé ningún resultado, Picture está abajo. Para el número de índice utilicé una fórmula que se publicó en otra discusión. El Estado puede ocurrir varias veces en un corto período, es una indicación de un evento a iniciar, por lo que ''Gekomen'' significa un evento iniciado y ''Gegaan'' significa que el evento ha terminado, por lo que el cálculo lógico es El final (gegaan) menos el comienzo del evento (gekomen). Así que ''gegaan' y ''Gekomen'' son los mismos que Start and End, como en la imagen dada que envías con DNI; 210, el primer evento ocurrió de 11:58-12:01 y el segundo evento (mismo ID) ocurrió de 12:04-12:05.

Come=Evento de inicio

Gone=Fin del evento

Probé tu fórmula pero no obtení ningún cálculo, hice algo malo, que se muestra en la imagen.

WmUit_0-1615985521235.png

No @WmUit,

De hecho, lo que creé antes es una medida no una columna calculada... He creado un archivo pbix de ejemplo (ver archivo adjunto) para usted, por favor compruebe si eso es lo que desea.

1. Cree una columna calculada para obtener el rango por ID

Index = 
RANKX (
    FILTER (
        ALL ( 'Data' ),
        'Data'[Status]
            IN { "Gegaan", "Gekomen" }
                && 'Data'[ID] = EARLIER ( 'Data'[ID] )
    ),
    'Data'[Date and Time],
    ,
    ASC,
    DENSE
)

2. Cree una medida o columna calculada para obtener la duración

Medida:

Measure Duration = 
VAR _gektime =
    CALCULATE (
        MAX ( 'Data'[Date and Time] ),
        FILTER (
            ALLSELECTED ( 'Data' ),
            'Data'[ID] = SELECTEDVALUE ( 'Data'[ID] )
                && 'Data'[Status] = "Gekomen"
                && 'Data'[Index] <= SELECTEDVALUE ( 'Data'[Index] )
        )
    )
VAR _duration =
    DATEDIFF (
        IF ( SELECTEDVALUE ( 'Data'[Status] ) = "Gegaan", _gektime, BLANK () ),
        SELECTEDVALUE ( 'Data'[Date and Time] ),
        SECOND
    )
VAR _hours =
    INT ( _duration / 3600 )
VAR _minutes =
    INT ( MOD ( _duration - ( _hours * 3600 ), 3600 ) / 60 )
VAR _seconds =
    ROUNDUP ( MOD ( MOD ( _duration - ( _hours * 3600 ), 3600 ), 60 ), 0 )
VAR _hh =
    IF (
        LEN ( _hours ) = 1,
        CONCATENATE ( "0", _hours ),
        CONCATENATE ( "", _hours )
    )
VAR _mm =
    IF (
        LEN ( _minutes ) = 1,
        CONCATENATE ( "0", _minutes ),
        CONCATENATE ( "", _minutes )
    )
VAR _ss =
    IF (
        LEN ( _seconds ) = 1,
        CONCATENATE ( "0", _seconds ),
        CONCATENATE ( "", _seconds )
    )
RETURN
    IF (
        ISBLANK ( _duration ),
        BLANK (),
        CONCATENATE (
            _hh,
            CONCATENATE ( ":", CONCATENATE ( _mm, CONCATENATE ( ":", _ss ) ) )
        )
    )

O columna calculada:

Calculated Column Duration = 
VAR _gektime =
    CALCULATE (
        MAX ( 'Data'[Date and Time] ),
        FILTER (
            ALLSELECTED ( 'Data' ),
            'Data'[ID] = EARLIER ( 'Data'[ID] )
                && 'Data'[Status] = "Gekomen"
                && 'Data'[Index] <= EARLIER ( 'Data'[Index] )
        )
    )
VAR _duration =
    DATEDIFF (
        IF ( 'Data'[Status] = "Gegaan", _gektime, BLANK () ),
        'Data'[Date and Time],
        SECOND
    )
VAR _hours =
    INT ( _duration / 3600 )
VAR _minutes =
    INT ( MOD ( _duration - ( _hours * 3600 ), 3600 ) / 60 )
VAR _seconds =
    ROUNDUP ( MOD ( MOD ( _duration - ( _hours * 3600 ), 3600 ), 60 ), 0 )
VAR _hh =
    IF (
        LEN ( _hours ) = 1,
        CONCATENATE ( "0", _hours ),
        CONCATENATE ( "", _hours )
    )
VAR _mm =
    IF (
        LEN ( _minutes ) = 1,
        CONCATENATE ( "0", _minutes ),
        CONCATENATE ( "", _minutes )
    )
VAR _ss =
    IF (
        LEN ( _seconds ) = 1,
        CONCATENATE ( "0", _seconds ),
        CONCATENATE ( "", _seconds )
    )
RETURN
    IF (
        ISBLANK ( _duration ),
        BLANK (),
        CONCATENATE (
            _hh,
            CONCATENATE ( ":", CONCATENATE ( _mm, CONCATENATE ( ":", _ss ) ) )
        )
    )

yingyinr_0-1616048942083.png

Saludos

Hola @yingyinr,Muchas gracias por su tiempo y solución, está funcionando perfectamente. Elegí la columna calculada para facilitar la visión general y los tiempos de comprobación. Gracias de nuevo por el tiempo y el esfuerzo.

Saludos

Wesley

Helpful resources

Announcements
July 2025 community update carousel

Fabric Community Update - July 2025

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

July PBI25 Carousel

Power BI Monthly Update - July 2025

Check out the July 2025 Power BI update to learn about new features.

Top Solution Authors
Top Kudoed Authors