Reply
Syndicate_Admin
Administrator
Administrator
Syndicated - Inbound

DATEDIFF por grupo

Source Community: Power BI | Source Author Name: MichaelBalla

Tengo un conjunto de datos como se muestra a continuación que me gustaría calcular la duración promedio de cada tipo en función de la diferencia entre las horas de inicio y finalización de cada grupo.

Datos de ejemplo

grupotipoHora de inicioHora final
10001A2/11/21 8:12:032/11/21 8:12:23
10001A2/11/21 8:12:452/11/21 8:14:59
10002B2/11/21 9:15:052/11/21 9:16:20
10002B2/11/21 9:16:252/11/21 9:16:50
10002B2/11/21 9:16:552/11/21 9:17:10
10002B2/11/21 9:17:172/11/21 9:17:46
10003C2/11/21 9:18:032/11/21 9:18:30
10003C2/11/21 9:18:342/11/21 9:18:58
10003C2/11/21 9:19:022/11/21 9:19:58
10003C2/11/21 9:20:062/11/21 9:20:47
10004A2/11/21 9:21:062/11/21 9:21:48
10004A2/11/21 9:21:562/11/21 9:22:10
10004A2/11/21 9:22:132/11/21 9:22:37


La matriz de salida deseada tendría un aspecto similar al siguiente:

tipoDuración media (segundos)
A133.5
B161
C164


He podido hacer una medida DAX que calcula la diferencia entre la primera ocurrencia de A y la última ocurrencia de A, etc., pero no he podido agrupar la medida. La medida:

PartFabTime = CALCULATE ( DATEDIFF ( MIN (  Log[StartTime] ), MAX ( Log[EndTime]) , HOUR ) )


¿Alguien tiene alguna idea?

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Source Community: Power BI | Source Author Name: v-xulin-mstf
Syndicated - Inbound

No @MichaelBalla

Crear columna como:

Duration = 
CALCULATE(DATEDIFF(MAX('Log'[StartTime]),MAX('Log'[EndTime]),SECOND))

Cree una medida como:

PartFabTime = 
AVERAGEX(
    FILTER(
        ALL('Log'),
        'Log'[Type]=MAX('Log'[Type])
    ),
    'Log'[Duration]
)

Aquí está la salida:

vxulinmstf_0-1625124938042.png

Si todavía tienes alguna pregunta, por favor no dudes en hacérmelo saber.

Saludos

enlace

¿Es esa la respuesta que estás buscando? Si este post ayuda, entonces por favor considere Aceptarlo como la solución. Realmente apreciar!

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Source Community: Power BI | Source Author Name: v-xulin-mstf
Syndicated - Inbound

No @MichaelBalla

Crear columna como:

Duration = 
CALCULATE(DATEDIFF(MAX('Log'[StartTime]),MAX('Log'[EndTime]),SECOND))

Cree una medida como:

PartFabTime = 
AVERAGEX(
    FILTER(
        ALL('Log'),
        'Log'[Type]=MAX('Log'[Type])
    ),
    'Log'[Duration]
)

Aquí está la salida:

vxulinmstf_0-1625124938042.png

Si todavía tienes alguna pregunta, por favor no dudes en hacérmelo saber.

Saludos

enlace

¿Es esa la respuesta que estás buscando? Si este post ayuda, entonces por favor considere Aceptarlo como la solución. Realmente apreciar!

Syndicate_Admin
Administrator
Administrator

Source Community: Power BI | Source Author Name: AlexisOlson
Syndicated - Inbound

Esto es más fácil si agrega una columna calculada en la tabla Log

Seconds = DATEDIFF (  Log[StartTime], Log[EndTime] , SECOND )

A continuación, puede escribir una medida que haga referencia a esa columna:

CALCULATE ( AVERAGE ( Log[Seconds] ), ALLEXCEPT ( Log, Log[Type] ) )

De lo contrario, debe realizar ese cálculo dentro de un iterador, que no es particularmente eficaz desde el cálculo.

Source Community: Power BI | Source Author Name: MichaelBalla
Syndicated - Inbound

@AlexisOlson He intentado algo similar, sin embargo, la columna calculada solo calculará el promedio de cada fila y no tendrá en cuenta el espacio de tiempo entre las filas.

Source Community: Power BI | Source Author Name: AlexisOlson
Syndicated - Inbound

Ah ok. Eso cambia el requisito ya que ya no es realmente un "promedio".

¿Qué tal esto?

SecondsPerType =
VAR CurrType = VALUES ( Log[Type] )
VAR StartTime = CALCULATE ( MAX ( Log[StartTime] ), Log[Type] IN CurrType )
VAR EndTime = CALCULATE ( MAX ( Log[EndTime] ), Log[Type] IN CurrType )
RETURN
    DATEDIFF ( StartTime, EndTime, SECOND )

Source Community: Power BI | Source Author Name: MichaelBalla
Syndicated - Inbound

Así que tomé su ejemplo, que no funcionó inmediatamente, e intenté modificarlo un poco para ver si podía hacerlo funcionar, pero sigo obteniendo esta salida:

entrada:

The function expects a table expression for argument '', but a string or numeric expression was used.

Salida:

Multiple arguements aren't allowed in the ALLSELECTED function when the first argument is a table reference.

¿Alguna idea? Por alguna razón creo que está esperando que el CurrType sea una tabla?

Source Community: Power BI | Source Author Name: AlexisOlson
Syndicated - Inbound

Sí, lo escribí para que CurrType pudiera ser varios valores (para que los totales tuvieran más probabilidades de funcionar como se esperaba). Si no le importan los totales y usa SELECTEDVALUE, que proporciona un solo valor en lugar de una lista de valores, entonces tendría algo como esto:

SecondsPerType =
VAR CurrType = SELECTEDVALUE ( Log[Type] )
VAR StartTime = CALCULATE ( MAX ( Log[StartTime] ), ALLSELECTED ( Log ), Log[Type] = CurrType )
VAR EndTime = CALCULATE ( MAX ( Log[EndTime] ), ALLSELECTED ( Log ), Log[Type] = CurrType )
RETURN
    DATEDIFF ( StartTime, EndTime, SECOND )

Source Community: Power BI | Source Author Name: MichaelBalla
Syndicated - Inbound

Ah, solo estaba probando diferentes funciones para ver si podía hacerlo funcionar. Una lista de valores es lo que esperaría como resultado, así que la cambié de nuevo a VALUES. Ahora devuelve un valor de 0 para cada fila y no hay ningún error. ¿Alguna idea?

editar:

Después de experimentar un poco, está calculando la diferencia entre la hora de inicio más reciente y la hora de finalización más reciente, en lugar de hacerlo por grupo.

Archivo PBIX:

https://skyviewglass-my.sharepoint.com/:u:/p/michael/EShyNzYS1qVPhYhotAhceBYBtAR5_9sX6tzx1NkgDzbvPQ?...

avatar user

Helpful resources

Announcements
March PBI video - carousel

Power BI Monthly Update - March 2025

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

March2025 Carousel

Fabric Community Update - March 2025

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

Top Solution Authors (Last Month)
Top Kudoed Authors (Last Month)