smp0150
Necesito ayuda para calcular la media móvil, incluidos los 6 meses anteriores y los 6 meses posteriores. Supongo que para encontrar el promedio móvil basado en los últimos 6 meses, el cálculo es algo similar a:
Media móvil = CALCULAR (
PROMEDIO (
Órdenes, Órdenes[Sales]),
DATESINPERIOD (Pedidos[Ship Date],
LASTDATE (Pedidos[Ship Date]),
-6,
MES)
)
¿Cómo actualizo la fórmula para hacer el promedio móvil en los últimos 6 meses y los próximos 6 meses? (En Tableau se considera un cálculo móvil, MicroStrategy es una función OLAP Avg). ¡Gracias!
Datos:
Año | Mes | Ventas |
2012 | enero | 125421,9 |
2012 | febrero | 97483.81 |
2012 | marcha | 103970.4 |
2012 | abril | 116290.7 |
2012 | Mayo | 162398.2 |
2012 | junio | 142223.1 |
2012 | mes de julio | 162353,6 |
2012 | agosto | 142585,7 |
2012 | septiembre | 202582.3 |
2012 | octubre | 181586,7 |
2012 | noviembre | 532586.6 |
2012 | diciembre | 284846 |
2011 | enero | 126987,9 |
2011 | febrero | 87950.17 |
2011 | marcha | 65068.93 |
2011 | abril | 75960.54 |
2011 | Mayo | 144368,8 |
2011 | junio | 120091.5 |
2011 | mes de julio | 121481 |
2011 | agosto | 117987,7 |
2011 | septiembre | 285433.4 |
2011 | octubre | 260563.5 |
2011 | noviembre | 326864 |
2011 | diciembre | 195801.1 |
Reid_Havens
En respuesta a smp0150
El gráfico me ayudó mucho a saber qué necesitabas. De acuerdo, lo que realmente querrá son tres medidas: una SUMA de 12 meses, un recuento de 12 meses para dividir y la medida de división. La razón por la que tenemos un recuento de 12 meses es que no siempre dividiremos entre 12, a veces dividiremos por menos cuando nos acerquemos al comienzo o al final del rango de fechas. También me di cuenta de que hacer una ventana de -6 Y +6 meses en realidad causa una ventana de 13 meses, ya que AMBOS incluyen el mes actual, por lo que depende de usted decidir si + o – debe ser 5 en lugar de 6, que devolverá una ventana móvil máxima de 12 meses.
Suma de 12 meses:
12M Sum = CALCULATE ( SUM( FactOrderProduct[Net Profit]), DATESBETWEEN ( 'Date Table'[Date], DATEADD ( LASTDATE ( 'Date Table'[Date] ), -5, MONTH ), DATEADD ( LASTDATE ( 'Date Table'[Date] ), 6, MONTH ) ) )
Conteo de 12 meses
12M Count = CALCULATE ( CALCULATE ( COUNTROWS ( VALUES ( 'Date Table'[Month Year] ) ), FactOrderProduct ), DATESBETWEEN ( 'Date Table'[Date], DATEADD ( LASTDATE ( 'Date Table'[Date] ), -5, MONTH ), DATEADD ( LASTDATE ( 'Date Table'[Date] ), 6, MONTH ) ) )
Promedio de 12 meses:
12M Average = DIVIDE([12M Sum], [12M Count], 0)
Se puede encontrar más información aquí, modifiqué la consulta que muestran los chicos de SQLBI en esta publicación. Puede probarlo sin DateTable, no estoy 100% seguro de que funcione sin él. Pero siempre es una buena práctica tener uno, ya que muchas funciones en DAX requieren fechas contiguas para funcionar correctamente.
Saludos,
Reid
Reid_Havens
Hola,
Feliz de ayudar. Entonces, si entiendo esto correctamente, está buscando una «ventana» de promedio móvil de 12 meses basada en el ÚLTIMO DÍA (Pedidos[Ship Date]) ¿correcto? Una ventana que es de seis meses en el pasado a partir de esta fecha Y seis meses en el futuro. Si ese es el caso, la forumula se vería como algo a continuación. Avísame si te funciona.
Moving Average = CALCULATE ( AVERAGE ( Order[Sales] ), DATESBETWEEN ( 'Date Table'[Date], DATEADD ( LASTDATE ( Order[ShipDate] ), -6, MONTH ), DATEADD ( LASTDATE ( Order[ShipDate] ), 6, MONTH ) ) )
smp0150
En respuesta a Reid_Havens
Hola @Reid_Havens
Gracias por tu ayuda. Para su información, tuve un error tipográfico y necesito aprovechar la Fecha de pedido, no la Fecha de envío. Además, no tengo una tabla de fechas, ¿necesito una? Cuando hago el cálculo, esta es mi fórmula para la nueva medida:
Moving Average = CALCULATE ( AVERAGE ( Orders[Sales]), DATESBETWEEN ( Orders[Order Date], DATEADD ( LASTDATE ( Orders[Order Date] ), -6, MONTH ), DATEADD ( LASTDATE ( Orders[Order Date] ), 6, MONTH ) ) )
Sin embargo, el valor parece muy bajo para la media móvil:
Pruebas en Tableau y MicroStrategy Visual Insight / Desktop a continuación, donde los cálculos de tablas rápidas o las métricas derivadas tienen cuadros de fórmula para los cálculos.
Aquí está el conjunto de datos completo:
Año | Mes | Ventas |
2010 | enero | 139730.5 |
2010 | febrero | 130534.1 |
2010 | marcha | 145615.7 |
2010 | abril | 130543 |
2010 | Mayo | 93938.81 |
2010 | junio | 128304.3 |
2010 | mes de julio | 135036.5 |
2010 | agosto | 195567.4 |
2010 | septiembre | 126080,9 |
2010 | octubre | 259289 |
2010 | noviembre | 212633.3 |
2010 | diciembre | 227059.5 |
2011 | enero | 115144,9 |
2011 | febrero | 97745.88 |
2011 | marcha | 59156,74 |
2011 | abril | 74669.67 |
2011 | Mayo | 146157 |
2011 | junio | 116518.6 |
2011 | mes de julio | 116243.5 |
2011 | agosto | 118415,9 |
2011 | septiembre | 311721.7 |
2011 | octubre | 245237.7 |
2011 | noviembre | 323051.3 |
2011 | diciembre | 220444.6 |
2012 | enero | 96276.63 |
2012 | febrero | 95216.72 |
2012 | marcha | 102573.8 |
2012 | abril | 129869.1 |
2012 | Mayo | 152760.3 |
2012 | junio | 145649,7 |
2012 | mes de julio | 158229 |
2012 | agosto | 150146.1 |
2012 | septiembre | 199804.2 |
2012 | octubre | 199429.5 |
2012 | noviembre | 520100.4 |
2012 | diciembre | 280675,8 |
2013 | enero | 215229.2 |
2013 | febrero | 149129 |
2013 | marcha | 171791 |
2013 | abril | 143738,8 |
2013 | Mayo | 218862.2 |
2013 | junio | 155990,5 |
2013 | mes de julio | 166914.9 |
2013 | agosto | 288185.1 |
2013 | septiembre | 267567.2 |
2013 | octubre | 378212 |
2013 | noviembre | 375129.2 |
2013 | diciembre | 321610.8 |
Reid_Havens
En respuesta a smp0150
El gráfico me ayudó mucho a saber qué necesitabas. De acuerdo, lo que realmente querrá son tres medidas: una SUMA de 12 meses, un recuento de 12 meses para dividir y la medida de división. La razón por la que tenemos un recuento de 12 meses es que no siempre dividiremos entre 12, a veces dividiremos por menos cuando nos acerquemos al comienzo o al final del rango de fechas. También me di cuenta de que hacer una ventana de -6 Y +6 meses en realidad causa una ventana de 13 meses, ya que AMBOS incluyen el mes actual, por lo que depende de usted decidir si + o – debe ser 5 en lugar de 6, que devolverá una ventana móvil máxima de 12 meses.
Suma de 12 meses:
12M Sum = CALCULATE ( SUM( FactOrderProduct[Net Profit]), DATESBETWEEN ( 'Date Table'[Date], DATEADD ( LASTDATE ( 'Date Table'[Date] ), -5, MONTH ), DATEADD ( LASTDATE ( 'Date Table'[Date] ), 6, MONTH ) ) )
Conteo de 12 meses
12M Count = CALCULATE ( CALCULATE ( COUNTROWS ( VALUES ( 'Date Table'[Month Year] ) ), FactOrderProduct ), DATESBETWEEN ( 'Date Table'[Date], DATEADD ( LASTDATE ( 'Date Table'[Date] ), -5, MONTH ), DATEADD ( LASTDATE ( 'Date Table'[Date] ), 6, MONTH ) ) )
Promedio de 12 meses:
12M Average = DIVIDE([12M Sum], [12M Count], 0)
Se puede encontrar más información aquí, modifiqué la consulta que muestran los chicos de SQLBI en esta publicación. Puede probarlo sin DateTable, no estoy 100% seguro de que funcione sin él. Pero siempre es una buena práctica tener uno, ya que muchas funciones en DAX requieren fechas contiguas para funcionar correctamente.
Saludos,
Reid
smp0150
En respuesta a Reid_Havens
Hola @Reid_Havens,
Hice algunos deberes y para las funciones de inteligencia de tiempo, las tablas de atenuación de fechas son obligatorias. Así que creé una dimensión de fecha simple creando una nueva tabla -> Fecha = CALENDARIO (FECHA (2010,1,1), FECHA (2013,12,31)). También creó una columna para Mes -> Mon-Year = FORMAT (‘Fecha'[Date], «MMMM YYYY «)
En cuanto a la fórmula en sí para el promedio móvil, tuve problemas con DATEADD para la fecha de finalización futura. Solo calcularía para 30 días, por lo que eliminaría los valores de los meses que tenían 31 días, etc. Por lo tanto, solo usé DATEADD para la fecha de inicio y EODMONTH para la fecha de finalización. Aquí están las fórmulas finales:
Para el denominador de la media móvil:
Recuento de meses = CALCULATE (CALCULATE (COUNTROWS (VALUES (‘Fecha'[Mon-Year])), Pedidos), DATESBETWEEN (‘Fecha'[Date], Dateadd (FIRSTDATE (Pedidos[Order Date]), -6, MES), EOMONTH (FIRSTDATE (Pedidos[Order Date]), 6)))
Para la media móvil en sí:
Media móvil = DIVIDE (CALCULATE (SUM (Orders[Sales]), DATESBETWEEN (‘Fecha'[Date], Dateadd (FIRSTDATE (Pedidos[Order Date]), -6, MES), EOMONTH (FIRSTDATE (Pedidos[Order Date]), 6))), [Month Count])
Salida final a continuación. ¡¡Muchas gracias por tu ayuda!! Me metiste exactamente en el lugar correcto. ¡¡Gracias de nuevo!!
PD: espero que en el futuro Power BI haga que estas funciones sean tan intuitivas como MSTR y Tableau, en lugar de tener que construir tantos componentes para un cálculo. 🙂
GilbertQ
En respuesta a smp0150
Hola @ smp0150
En la última versión de Power BI Desktop (mayo de 2017), en realidad han creado una medida rápida para el promedio móvil que es exactamente lo que estaba tratando de lograr.
https://powerbi.microsoft.com/en-us/blog/power-bi-desktop-may-feature-summary/#quickMeasures