nt7331
Hola,
Tengo algunos problemas para descubrir cómo crear una vista personalizada de mis datos que resuma los datos de series temporales en un formato de tabla. Intenté hacer algunas columnas personalizadas y tablas calculadas, pero no encontré la manera de hacer lo que estoy tratando de hacer. En SQL, podría resolverse con bastante facilidad usando subconsultas para valores de columna, pero no estoy seguro de cómo hacerlo en DAX.
Los datos que tengo son series de tiempo con valores que se ven así:
IDENTIFICACIÓN | Fecha | Valor |
97799 | 28/03/2017 | 5 |
97799 | 23/03/2017 | 10 |
97799 | 28/02/2017 | 7 |
97799 | 28/03/2016 | 8 |
97795 | 28/03/2017 | 2 |
97795 | 23/03/2017 | 4 |
97795 | 28/02/2017 | 1 |
97795 | 28/03/2016 |
2 |
Y la tabla de resumen que estoy tratando de crear se vería así:
IDENTIFICACIÓN | último valor | Valor 5D Antes | Valor 1 mes antes | Valor 1 año antes |
97799 | 5 | 10 | 7 | 8 |
97795 | 2 | 4 | 1 | 2 |
¿Alguien puede señalarme en la dirección correcta?
v-yulgu-msft
Hola @nt7331,
Consulte la siguiente fórmula DAX para crear una tabla calculada:
result TB = SUMMARIZE ( TB2, TB2[ID], "Last value", CALCULATE ( FIRSTNONBLANK ( TB2[Value], 1 ), FILTER ( TB2, TB2[Date] = MAX ( TB2[Date] ) ) ), "Value 5D Before", CALCULATE ( SUM ( TB2[Value] ), FILTER ( TB2, TB2[Date] = MAX ( TB2[Date] ) - 5 ) ), "Value 1 month before", CALCULATE ( SUM ( TB2[Value] ), FILTER ( TB2, TB2[Date] = MAXX ( TB2, DATEADD ( TB2[Date], -1, MONTH ) ) ) ), "Value 1 year before", CALCULATE ( SUM ( TB2[Value] ), FILTER ( TB2, TB2[Date] = MAXX ( TB2, DATEADD ( TB2[Date], -1, YEAR ) ) ) ) )
Atentamente,
Yuliana Gu
v-yulgu-msft
Hola @nt7331,
Consulte la siguiente fórmula DAX para crear una tabla calculada:
result TB = SUMMARIZE ( TB2, TB2[ID], "Last value", CALCULATE ( FIRSTNONBLANK ( TB2[Value], 1 ), FILTER ( TB2, TB2[Date] = MAX ( TB2[Date] ) ) ), "Value 5D Before", CALCULATE ( SUM ( TB2[Value] ), FILTER ( TB2, TB2[Date] = MAX ( TB2[Date] ) - 5 ) ), "Value 1 month before", CALCULATE ( SUM ( TB2[Value] ), FILTER ( TB2, TB2[Date] = MAXX ( TB2, DATEADD ( TB2[Date], -1, MONTH ) ) ) ), "Value 1 year before", CALCULATE ( SUM ( TB2[Value] ), FILTER ( TB2, TB2[Date] = MAXX ( TB2, DATEADD ( TB2[Date], -1, YEAR ) ) ) ) )
Atentamente,
Yuliana Gu
Stachu
prueba estas medidas:
Value year before = VAR TempDate = LASTDATE(DATEADD('Table'[Date],-1,YEAR)) RETURN CALCULATE(SUM('Table'[Value]),'Table'[Date]=TempDate) Value Month before = VAR TempDate = LASTDATE(DATEADD('Table'[Date],-1,MONTH)) RETURN CALCULATE(SUM('Table'[Value]),'Table'[Date]=TempDate) Value 5D = VAR TempDate = MAX('Table'[Date])-5 RETURN CALCULATE(SUM('Table'[Value]),'Table'[Date]=TempDate) Last value = VAR TempDate = MAX('Table'[Date]) RETURN CALCULATE(SUM('Table'[Value]),'Table'[Date]=TempDate)
nt7331
En respuesta a Stachu
¡Gracias por la respuesta! Ya llegué tan lejos, pero esas medidas solo obtendrían los valores de la identificación con la fecha más reciente, ¿verdad? Necesito calcular esos valores para cada ID único en la tabla, que es donde tengo problemas para descubrir cómo lograrlo. El equivalente de SQL a lo que me gustaría hacer sería algo como:
select ID, "Last Value" = (Select Top(1) [Value] FROM Table1 WHERE ID = MII.ID and ReferenceDate = LastMIIDate.LastReferenceDate), "5D Value" = (Select Top(1) [Value] FROM Table1 WHERE ID = MII.ID and ReferenceDate <= DATEADD(day, -5, LastReferenceDate) ORDER BY ReferenceDate DESC) FROM Table1 MII LEFT OUTER JOIN (Select ID, max(RefDate) as LastReferenceDate from Table1 group by ID) as LastMIIDate on LastMIIDate.ID = MII.ID GROUP BY MII.ID, LastReferenceDate