DAX: calcula la suma de DateDiffs entre la última fecha de la segmentación y las fechas en la columna de fecha

Un usuario Pregunto ✅

MartijnBosma

Ojalá alguien pueda ayudarme con el siguiente problema:

Necesito calcular la suma de las diferencias de fecha entre las fechas en una columna de tabla y la última fecha en mi dropdown.

Digamos que cortaré todos los días en enero de 2017, luego:

sliceLastDate = 31-01-2017

Mi tabla podría contener, por ejemplo, las siguientes fechas en su columna de fecha:

Fecha
05-12-2016
07-01-2017
15-01-2017
03-02-2017

Tenga en cuenta que la primera y la última fila están fuera de mi período cortado:
No son en enero de 2017

No se debe utilizar una fila posterior a mi sliceLastDate:
Entonces, la última fila con 03-02-2017 debe ignorarse

Sin embargo, se debe usar una fila anterior a la fecha de inicio de mis porciones (como la fila 05-12-2016).

Por lo tanto, en este caso, DAX debería hacer lo siguiente:

DateDiff (05-12-2016, 31-01-2017, día)
+
DateDiff (07-01-2017, 31-01-2017, día)
+
DateDiff (15-01-2017, 31-01-2017, día)

que debería ser:
= 57 + 24 + 16 = 97

Me resulta difícil averiguar cómo hacer esto en DAX.
¿Debería usar algo como esto ?:

SUMX
(
Mi tabla;
DateDiff
(
Mi tabla[Date];
MAX (fecha[Date])
)
)

«MyTable» se une a una tabla de dimensiones de fecha llamada «Fecha» que contiene una fila para cada día

Atentamente,
Martijn

Hola Marijn,

Su código se ve bien, lo único que debe verificar es que tenga en cuenta las fechas que son anteriores a la última fecha, lo que puede lograr con un simple CALCULAR y un FILTRO en TODAS las fechas. Algo como esto debería funcionar:

VAR
    SlicerDate = MAX ( Date[Date] )
RETURN
CACLULATE (
    SUMX (
         MyTable,
         DATEDIFF ( MyTable[Date], SlicerDate )
    ),
    FILTER ( ALL ( Date ), Date[Date] <= SlicerDate )
)

Puede encontrar muchos más ejemplos sobre la inteligencia del tiempo en la sección «patrones de tiempo» de nuestro sitio web de patrones de dax. En un conjunto de datos pequeño, este código funciona bien, en uno muy grande es posible que tenga algún problema de rendimiento, pero estamos hablando de cientos de millones de filas antes de que surja algún problema, con suerte no es su caso.

Alberto Ferrari
http://www.sqlbi.com

Jaygill

Hola, todos,

Soy bastante nuevo en esta comunidad y en DAX. y me he encontrado con un problema en el trabajo. Se agradecería mucho una ayuda.

Estoy tratando de calcular la cantidad de días para un año en particular en función de la tabla de calendario que he creado.

Por ejemplo: tengo 3 columnas.

Evento, número de días y fecha en que comenzó este evento

Lesión 30 25/21/2016

Días en 2016 – 6

Días en 2017-24

Ahora, para el caso anterior, solo hay que contar 6 días en 2016 y el resto de los días deben contarse automáticamente en 2017. Pero no puedo entender cómo hacerlo.

Gracias de antemano.

Hola Marijn,

Su código se ve bien, lo único que debe verificar es que tenga en cuenta las fechas que son anteriores a la última fecha, lo que puede lograr con un simple CALCULAR y un FILTRO en TODAS las fechas. Algo como esto debería funcionar:

VAR
    SlicerDate = MAX ( Date[Date] )
RETURN
CACLULATE (
    SUMX (
         MyTable,
         DATEDIFF ( MyTable[Date], SlicerDate )
    ),
    FILTER ( ALL ( Date ), Date[Date] <= SlicerDate )
)

Puede encontrar muchos más ejemplos sobre la inteligencia del tiempo en la sección «patrones de tiempo» de nuestro sitio web de patrones de dax. En un conjunto de datos pequeño, este código funciona bien, en uno muy grande es posible que tenga algún problema de rendimiento, pero estamos hablando de cientos de millones de filas antes de que surja algún problema, con suerte no es su caso.

Alberto Ferrari
http://www.sqlbi.com

lavpinto

En respuesta a AlbertoFerrari

Esta solución es genial.

¿Hay alguna manera de que pueda?calcular la suma de los trabajos entre la última fecha de la cortadora y las fechas en la columna de la fecha

Deja un comentario

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