Retraso promedio en DAX desde SQL Server

Un usuario Pregunto ✅

stevengaris

Estoy tratando de calcular el retraso promedio para cada ubicación usando DAX.

Mi tabla tiene 3 columnas: AddressId, DeliveredDateCT y Deliveries.

La columna Entregas es el número total de entregas recibidas ese día con días que no tienen entregas siendo 0 no NULL.

Utilizo este código para encontrar el retraso promedio en SQL Server:

seleccione AddressId,
avg (dateiff (día, PriorDate, DeliveredDateCT)) AverageLag
desde (
seleccione AddressId,
DeliveredDateCT,
PriorDate = LAG (DeliveredDateCT, 1)
over (partición por AddressId orden por DeliveredDateCT)
de #DeliveryReport
donde entregas> 0
) retraso
agrupar por AddressId

¿Es esto algo que se puede traducir de SQL a DAX?

JarroVGIT

En respuesta a stevengaris

Muy bien, gracias, veo a lo que quieres llegar. Creé un tabla calculada con el siguiente DAX (su tabla se denomina Entregas, los nombres de sus columnas son los mismos:

LagTable = 
VAR tmpTable = FILTER(Deliveries, Deliveries[Deliveries] > 0)
VAR tablePrevDate = ADDCOLUMNS(tmpTable, "PrevDate", MAXX(FILTER(tmpTable, [AddressId] = EARLIER([AddressId]) && [DeliveredDateCT] < EARLIER([DeliveredDateCT])), [DeliveredDateCT]))
VAR tableLags = ADDCOLUMNS(FILTER(tablePrevDate, NOT(ISBLANK([PrevDate]))), "Lag", DATEDIFF([PrevDate], [DeliveredDateCT],DAY))
RETURN 
SUMMARIZE(tableLags, [AddressId], "AvgLag", AVERAGEX(FILTER(tableLags, [AddressId] = EARLIER([AddressId])), [Lag]))

Esto puede ser mucho más simple, pero quería mostrar claramente la lógica.
VAR tmpTable: Primero filtramos su tabla para filtrar las 0 entregas (son ruido).

VAR tablePrevDate: Agregamos una columna a tmpTable, tomando la fecha máxima en una tmpTable filtrada (filtrada en AddressID actual y Date

VAR TableLags: agrega una columna a una tabla filtradaPrevDate (que se filtra para eliminar todo sin un valor de prevDate) y agrega un cálculo de retraso
RETURN: una tabla de resumen por AddressID, con una columna AvgLag.

¡Hazme saber si esto funciona para ti! 🙂

Atentamente

Djerro123

——————————-

Si esto respondió a su pregunta, por favor marcarlo como la solución. Esto también ayuda a otros a encontrar lo que buscan.

Mantener esos Pulgares hacia arriba ¡viniendo! 🙂

JarroVGIT

¿Puede proporcionar algunos datos de muestra y el resultado esperado? Para ser honesto, no sigo completamente su consulta SQL.

Atentamente

Djerro123

——————————-

Si esto respondió a su pregunta, por favor marcarlo como la solución. Esto también ayuda a otros a encontrar lo que buscan.

Mantener esos Pulgares hacia arriba ¡viniendo! 🙂

stevengaris

En respuesta a JarroVGIT

La consulta interna extrae todas las fechas de entrega y encuentra su fecha de entrega anterior, luego la consulta externa promedia todas las diferencias de fecha para cada ubicación para averiguar en promedio con qué frecuencia reciben entregas.

El resultado esperado sería el promedio de cada ubicación.

JarroVGIT

En respuesta a stevengaris

Muy bien, gracias, veo a lo que quieres llegar. Creé un tabla calculada con el siguiente DAX (su tabla se denomina Entregas, los nombres de sus columnas son los mismos:

LagTable = 
VAR tmpTable = FILTER(Deliveries, Deliveries[Deliveries] > 0)
VAR tablePrevDate = ADDCOLUMNS(tmpTable, "PrevDate", MAXX(FILTER(tmpTable, [AddressId] = EARLIER([AddressId]) && [DeliveredDateCT] < EARLIER([DeliveredDateCT])), [DeliveredDateCT]))
VAR tableLags = ADDCOLUMNS(FILTER(tablePrevDate, NOT(ISBLANK([PrevDate]))), "Lag", DATEDIFF([PrevDate], [DeliveredDateCT],DAY))
RETURN 
SUMMARIZE(tableLags, [AddressId], "AvgLag", AVERAGEX(FILTER(tableLags, [AddressId] = EARLIER([AddressId])), [Lag]))

Esto puede ser mucho más simple, pero quería mostrar claramente la lógica.
VAR tmpTable: Primero filtramos su tabla para filtrar las 0 entregas (son ruido).

VAR tablePrevDate: Agregamos una columna a tmpTable, tomando la fecha máxima en una tmpTable filtrada (filtrada en AddressID actual y Date

VAR TableLags: agrega una columna a una tabla filtradaPrevDate (que se filtra para eliminar todo sin un valor de prevDate) y agrega un cálculo de retraso
RETURN: una tabla de resumen por AddressID, con una columna AvgLag.

¡Hazme saber si esto funciona para ti! 🙂

Atentamente

Djerro123

——————————-

Si esto respondió a su pregunta, por favor marcarlo como la solución. Esto también ayuda a otros a encontrar lo que buscan.

Mantener esos Pulgares hacia arriba ¡viniendo! 🙂

stevengaris

En respuesta a JarroVGIT

¡Vaya, eres un genio! Nunca antes había usado una tabla calculada, ¡pero eso hace exactamente lo que necesito que haga! ¡¡Un millón de gracias!!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *