morz3d
Hola, estoy tratando de crear una medida de cálculo de% interanual que se controlará desde el filtro. Entonces, si selecciono marzo de 2019, quiero tener 13 meses a partir de ese mes hacia atrás (marzo de 2018 hasta marzo de 2019)
El cálculo de los datos reales fue fácil:
Sales Rolling 13 ACT = CALCULATE([Sales ACT],DATESINPERIOD('Calendar'[Date], MAX('Calendar'[Date]), -13, MONTH))
Pero cuando pruebo el mismo principio para el año pasado, cambio todo el cálculo al año anterior, por lo que si no es posible calcular la variación interanual. Como puede ver en la imagen, los valores de PY se muestran desde 201610 hasta 201710 en lugar de 201710 a 201810
¿Hay alguna manera de hacer que esto funcione, para que pueda tener ACT y PY rodando uno al lado del otro? A partir de ahí, calcular la relación YoY sería fácil (ACT-PY)/PY
PBIX se puede descargar aquí
mfelix
En respuesta a morz3d
Hola @morz3d,
He mirado tu modelo y haciendo algunas pruebas pude llegar a esta forma de trabajar:
- Desconecte la tabla del calendario rodante
- Use el calendario rodante como su dropdown
- Crea/Cambia tus medidas a las siguientes:
Sales Rolling 13 ACT = VAR Maximum_Date = MAX ( 'Rolling Calendar'[Date] ) VAR Minimum_Date = DATE ( YEAR ( Maximum_Date ) - 1; MONTH ( Maximum_Date ); 1 ) VAR Selected_Date = MAX ( 'Calendar'[Date] ) RETURN IF ( Selected_Date <= Maximum_Date && Selected_Date >= Minimum_Date; [Sales ACT]; BLANK () )
Sales Rolling 13 PY = VAR Maximum_Date = MAX ( 'Rolling Calendar'[Date] ) VAR Minimum_Date = DATE ( YEAR ( Maximum_Date ) - 1; MONTH ( Maximum_Date ); 1 ) VAR Selected_Date = MAX ( 'Calendar'[Date] ) RETURN IF ( Selected_Date <= Maximum_Date && Selected_Date >= Minimum_Date; [Sales PY]; BLANK () )
Nuevas medidas:
Sales Rolling 13 Month ACT (Totals) = IF ( HASONEFILTER ( 'Calendar'[Date] ); [Sales Rolling 13 ACT]; SUMX ( 'Calendar'; [Sales Rolling 13 ACT] ) )
Sales Rolling 13 Month PY (Totals) = IF ( HASONEFILTER ( 'Calendar'[Date] ); [Sales Rolling 13 PY]; SUMX ( 'Calendar'; [Sales Rolling 13 PY] ) )
Luego simplemente cree su base porcentual en el total móvil de ventas:
Sales YoY % Rolling = IF ( [Sales Rolling 13 Month ACT (Totals)] = BLANK (); BLANK (); DIVIDE ( [Sales Rolling 13 Month ACT (Totals)] - [Sales Rolling 13 Month PY (Totals)]; [Sales Rolling 13 Month PY (Totals)] ) )
Las medidas totales se crean para hacer los cálculos para las últimas columnas totales de la tabla visual o una tarjeta, como puede ver en la imagen a continuación y en el archivo PBIX, el total se calcula mal o se deja en blanco cuando se usan solo las ventas de 13 meses consecutivos, si Si desea colocarlo en un gráfico de barras o similar, puede utilizar las medidas de ventas continuas.
Esto le dará el resultado a continuación que puede usar en sus informes.
Espero que esto resuelva su problema, cualquier pregunta por favor dígame.
Saludos.
mfelix
mfelix
Hola @morz3d,
Su problema está relacionado con la forma en que construye sus medidas y su visual, ya que está usando la tabla de calendario para hacer sus medidas de 13 meses móviles, necesita usar la columna YearMonthInt de la tabla de calendario y no de la tabla de calendario móvil.
Por lo que puedo ver en su modelo, es probable que esté tratando de lograr el balanceo durante los últimos 13 meses en función de la selección de la fecha, consulte esta publicación de blog que puede ayudarlo a lograrlo.
Adjunte sus archivos PBIX con su tabla y junto a ella la tabla con la fecha del calendario.
Saludos,
mfelix
morz3d
En respuesta a mfelix
Hola @MFelix Gracias por tu respuesta.
El blog que mencionaste fue una de mis inspiraciones para hacer esto, y todo funciona perfectamente si lo aplico a los datos de ACT.
Pero si trato de aplicar el mismo principio a la medida PY (la medida PY usa la función SAMEPERIODLASTYEAR) me encuentro con el problema.
En el lado izquierdo, puede ver que las medidas ACT y PY funcionan como se espera cuando no tengo el filtro Rolling aplicado a través de las medidas DAX. Última columna YoY% i lo que trato de lograr, y es fácil para fórmulas básicas. Dado que los valores ACT y PY están en la misma fila.
El problema es cuando trato de crear un 13 % interanual ya que los datos PY y ACT no están en la misma fila. No estoy buscando promedio o suma, sino solo valores mensuales filtrados por cortadora. Entonces, si selecciono diciembre de 2018 en la segmentación, obtengo los valores de diciembre de 2017 a diciembre de 2018 para ACT y PY, y eventualmente el% interanual.
El resultado final debe ser un gráfico de líneas con la medida del % interanual y no más de 13 valores en el eje x, las tablas que está viendo ahora son solo para facilitar la resolución de un problema.
mfelix
En respuesta a morz3d
Hola @morz3d,
He mirado tu modelo y haciendo algunas pruebas pude llegar a esta forma de trabajar:
- Desconecte la tabla del calendario rodante
- Use el calendario rodante como su dropdown
- Crea/Cambia tus medidas a las siguientes:
Sales Rolling 13 ACT = VAR Maximum_Date = MAX ( 'Rolling Calendar'[Date] ) VAR Minimum_Date = DATE ( YEAR ( Maximum_Date ) - 1; MONTH ( Maximum_Date ); 1 ) VAR Selected_Date = MAX ( 'Calendar'[Date] ) RETURN IF ( Selected_Date <= Maximum_Date && Selected_Date >= Minimum_Date; [Sales ACT]; BLANK () )
Sales Rolling 13 PY = VAR Maximum_Date = MAX ( 'Rolling Calendar'[Date] ) VAR Minimum_Date = DATE ( YEAR ( Maximum_Date ) - 1; MONTH ( Maximum_Date ); 1 ) VAR Selected_Date = MAX ( 'Calendar'[Date] ) RETURN IF ( Selected_Date <= Maximum_Date && Selected_Date >= Minimum_Date; [Sales PY]; BLANK () )
Nuevas medidas:
Sales Rolling 13 Month ACT (Totals) = IF ( HASONEFILTER ( 'Calendar'[Date] ); [Sales Rolling 13 ACT]; SUMX ( 'Calendar'; [Sales Rolling 13 ACT] ) )
Sales Rolling 13 Month PY (Totals) = IF ( HASONEFILTER ( 'Calendar'[Date] ); [Sales Rolling 13 PY]; SUMX ( 'Calendar'; [Sales Rolling 13 PY] ) )
Luego simplemente cree su base porcentual en el total móvil de ventas:
Sales YoY % Rolling = IF ( [Sales Rolling 13 Month ACT (Totals)] = BLANK (); BLANK (); DIVIDE ( [Sales Rolling 13 Month ACT (Totals)] - [Sales Rolling 13 Month PY (Totals)]; [Sales Rolling 13 Month PY (Totals)] ) )
Las medidas totales se crean para hacer los cálculos para las últimas columnas totales de la tabla visual o una tarjeta, como puede ver en la imagen a continuación y en el archivo PBIX, el total se calcula mal o se deja en blanco cuando se usan solo las ventas de 13 meses consecutivos, si Si desea colocarlo en un gráfico de barras o similar, puede utilizar las medidas de ventas continuas.
Esto le dará el resultado a continuación que puede usar en sus informes.
Espero que esto resuelva su problema, cualquier pregunta por favor dígame.
Saludos.
mfelix
mfelix
En respuesta a mfelix
Hola @morz3d,
Solo una pequeña información si quieres puedes hacer una sola medida para CY/PY con las siguientes medidas:
Sales Rolling 13 ACT = VAR Maximum_Date = MAX ( 'Rolling Calendar'[Date] ) VAR Minimum_Date = DATE ( YEAR ( Maximum_Date ) - 1; MONTH ( Maximum_Date ); 1 ) VAR Selected_Date = MAX ( 'Calendar'[Date] ) RETURN IF ( HASONEFILTER ( 'Calendar'[Date] ); VAR ROLLING_SALES = IF ( Selected_Date <= Maximum_Date && Selected_Date >= Minimum_Date; [Sales ACT]; BLANK () ) RETURN ROLLING_SALES; SUMX ( 'Calendar'; VAR ROLLING_SALE = IF ( Selected_Date <= Maximum_Date && Selected_Date >= Minimum_Date; [Sales ACT]; BLANK () ) RETURN ROLLING_SALE ) )
Sales Rolling 13 PY = VAR Maximum_Date = MAX ( 'Rolling Calendar'[Date] ) VAR Minimum_Date = DATE ( YEAR ( Maximum_Date ) - 1; MONTH ( Maximum_Date ); 1 ) VAR Selected_Date = MAX ( 'Calendar'[Date] ) RETURN IF ( HASONEFILTER ( 'Calendar'[Date] ); VAR ROLLING_SALES = IF ( Selected_Date <= Maximum_Date && Selected_Date >= Minimum_Date; [Sales PY]; BLANK () ) RETURN ROLLING_SALES; SUMX ( 'Calendar'; VAR ROLLING_SALE = IF ( Selected_Date <= Maximum_Date && Selected_Date >= Minimum_Date; [Sales PY]; BLANK () ) RETURN ROLLING_SALE ) )
Si quieres te puedo reenviar el archivo PBIX con estas medidas.
Saludos,
mfelix
morz3d
En respuesta a mfelix
Hola @mfelix
Gracias de nuevo por tu ayuda.
Revisé su solución, es limpia y simple como puede ser