Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
Hola
Estoy tratando de averiguar cómo calcular esto a partir de mis datos y luchando con esto. Necesito el promedio de 3 años de la suma de unidades, teniendo en cuenta que para el primer año comienzan los datos (2010) el promedio debe ser de 1 año promedio, y para los dos primeros años (2010, 2011) será un promedio de 2 años y luego se moverá a los promedios requeridos de 3 años a partir de entonces.
Estoy conectando mis datos a una tabla de fechas realizada mediante la función CALENDAR.
A continuación se muestran algunos datos de ejemplo, que incluyen los resultados esperados posteriores a eso. ¡Cualquier ayuda apreciada!
Datos:
Id | Fecha | Unidad |
1 | 02/03/2010 | 1 |
2 | 05/05/2010 | 2 |
3 | 09/06/2010 | 1 |
4 | 01/06/2011 | 3 |
5 | 02/10/2011 | 1 |
6 | 15/12/2011 | 4 |
7 | 14/10/2011 | 1 |
8 | 30/04/2011 | 2 |
9 | 01/01/2012 | 1 |
10 | 06/07/2012 | 3 |
11 | 03/09/2012 | 2 |
12 | 24/12/2012 | 8 |
13 | 18/05/2012 | 2 |
14 | 19/05/2012 | 1 |
15 | 01/03/2013 | 1 |
16 | 02/03/2013 | 3 |
17 | 08/10/2013 | 6 |
18 | 21/08/2013 | 2 |
19 | 02/02/2014 | 3 |
20 | 14/02/2014 | 1 |
21 | 13/05/2014 | 1 |
22 | 16/09/2015 | 2 |
23 | 17/05/2015 | 2 |
24 | 31/07/2015 | 1 |
25 | 01/09/2016 | 4 |
26 | 03/05/2016 | 1 |
27 | 01/02/2016 | 2 |
28 | 30/10/2016 | 2 |
29 | 24/11/2016 | 3 |
30 | 05/04/2017 | 6 |
31 | 06/05/2017 | 5 |
32 | 01/09/2017 | 2 |
33 | 24/12/2017 | 10 |
34 | 31/12/2017 | 5 |
35 | 06/06/2018 | 2 |
36 | 07/08/2018 | 4 |
37 | 09/09/2018 | 1 |
38 | 01/02/2018 | 6 |
39 | 04/10/2019 | 15 |
40 | 20/01/2019 | 10 |
41 | 14/03/2019 | 8 |
Resultados esperados
año | Suma de la unidad | 3 años promedio |
2010 | 4 | 4 |
2011 | 11 | 7.5 |
2012 | 17 | 10.6 |
2013 | 12 | 13.3 |
2014 | 5 | 11.3 |
2015 | 5 | 7.3 |
2016 | 12 | 7.3 |
2017 | 28 | 15 |
2018 | 13 | 17.6 |
2019 | 33 | 24.6 |
Hola @rogerdea ,
Por favor, intente así:
Date =
VAR _calendar =
CALENDAR ( MIN ( 'Table'[Date] ), MAX ( 'Table'[Date] ) )
RETURN
ADDCOLUMNS ( _calendar, "Year", YEAR ( [Date] ) )
Measure =
DIVIDE (
CALCULATE (
SUM ( 'Table'[Unit] ),
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -3, YEAR )
),
CALCULATE (
DISTINCTCOUNT ( 'Date'[Year] ),
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -3, YEAR )
)
)
Para obtener más información, consulte el archivo adjunto.
Saludos
Xue Ding
Si este post Ayuda, entonces por favor considereAcéptelo como la soluciónpara ayudar a los otros miembros a encontrarlo más rápidamente.
Gracias @v-xuding-msft
Estoy recibiendo un error a mitad de la segunda parte que publicó: (desenfumó mis nombres de tabla para la privacidad)
¿He hecho algo malo?
Hola @rogerdea ,
Hay un paréntesis extra en su fórmula. Lo señalo con bolígrafo rojo. Por favor, quítelo para intentarlo.
Puede descargar el archivo pbix de mi respuesta anterior. Puede ayudarte un poco.
increíble esto funciona en mi archivo pbx principal ahora. Sin embargo, una cosa que no se ve bien en su pbx adjunta es el promedio 2019 es incorrecto. Todos los demás tienen razón. Sin embargo, el uso del mismo DAX funciona en mi archivo.
Hola @rogerdea ,
Me alegra que funcione bien en tu muestra. 😊
Para obtener un resultado incorrecto, puede deberse a la fecha. El formato de fecha es mm/dd/aaaa en lugar de dd/mm/aaaa en mi muestra. No lo cambio para que coincida con tu fecha de muestra por completo. Simplemente lo importo y el escritorio lo cambio de su formato a mm / dd / aaaa automáticamente.
Saludos
Xue Ding
Si este post Ayuda, entonces por favor considereAcéptelo como la soluciónpara ayudar a los otros miembros a encontrarlo más rápidamente.
Normalmente, esta forma en que lo hacemos rodando con un calendario de fechas. Ejemplo
Rolling 3 = CALCULATE(sum(Sales[Sales Amount]),DATESINPERIOD('Date'[Date],ENDOFMONTH(Sales[Sales Date]),-3,Year))
Or
Rolling 3 = CALCULATE(sum(Sales[Sales Amount]),DATESINPERIOD('Date'[Date Filer],MAX(Sales[Sales Date]),-3,Year))
Rolling 3 = CALCULATE(Average(Sales[Sales Amount]),DATESINPERIOD('Date'[Date],ENDOFMONTH(Sales[Sales Date]),-3,Year))
Or
Rolling 3 = CALCULATE(Average(Sales[Sales Amount]),DATESINPERIOD('Date'[Date Filer],MAX(Sales[Sales Date]),-3,Year))
Para obtener lo mejor de la función de inteligencia de tiempo. Asegúrese de que tiene un calendario de fechas y se ha marcado como la fecha en la vista de modelo. Además, únase a él con la columna de fecha de su hecho/s. Consulte:
https://radacad.com/creating-calendar-table-in-power-bi-using-dax-functions
https://www.archerpoint.com/blog/Posts/creating-date-table-power-bi
https://www.sqlbi.com/articles/creating-a-simple-date-table-in-dax/
Rolling 3 = CALCULATE(Average(Sales[Sales Amount]),DATESINPERIOD('Date'[Date],ENDOFMONTH(Sales[Sales Date]),-3,Year))
@amitchandak He intentado el método anterior y no tengo errores, pero mi salida es:
Cada fila tiene una columna con el amoun de unidades (que son todas 1). ¿Necesita haber una SUMA en algún lugar del DAX para obtener la suma anual?
Trate como
rolling 3 = CALCULATE(Average(Sales[Sales Amount]),DATESINPERIOD('Date'[Date],ENDOFMONTH(Sales[Sales Date]),-3,Year))
Avg rolling = Averagex(summarize(table,Date[year],"_1",[rolling 3 ]),[_1])
No he sido capaz de conseguir que funciona, la primera parte sólo devuelve un "1" para cada año. Pero cambié eso a lo siguiente que funciona excepto durante los dos primeros años, donde no hay suficientes datos de años para dividir por 3:
Se ha cambiado el promedio a una suma y, a continuación, se divide por 3.
Rolling 3 = CALCULATE(SUM('FACT DATA'[data_table]),DATESINPERIOD('Date Table'[Date],ENDOFMONTH('FACT DATA'[Date]),-3,YEAR)) /3
El problema es que los dos primeros años no son el promedio correcto porque no hay tres años de datos.
@rogerdea , Encuentre la solución adjunta después de la firma
Compruebe si hay unidad avg
Gracias @amitchandak
Eso casi funciona, pero no del todo. El campo de la unidad media para los años 2010, 2011 y 2012 es correcto, pero 2013 en adelante no lo son. Para 2013 esperaría que el resultado de la "unidad media" fuera 13,3 (y no 10,00). Este debe ser el promedio de los valores 11, 17 y 12.
Para tener claro que es el año calendario promedio que necesito, por ejemplo 1 de enero a 31 dic cada año, sumado y luego estos promediados.