Calcule YTD usando el nombre corto del mes

Un usuario Pregunto ✅

Yoshimitsu411

Hola

Necesito calcular el valor YTD excluyendo el mes actual. Tengo la siguiente información en una tabla de datos con una columna de mes. Agregué la columna Month_Number usando Switch. Ahora necesito dividir la suma de la columna EAC por la suma de la columna de ingresos EAC para el último mes dado que estamos en febrero. Si estuviéramos en junio, la suma sería todos los últimos meses excepto junio. ¿Cómo hago esto?

Capture.PNG

Gracias por cualquier sugerencia.

Yoshi

Ashish_Mathur

En respuesta a Yoshimitsu411

Hola,

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Untitled.png

Yoshimitsu411

En respuesta a Ashish_Mathur

gracias @Ashish_Mathur @danextian @amitchandak @stretcharm por toda su ayuda.

Pude resolver esto usando la solución @Ashish_Mathur.

También encontré una solución similar aquí que también funcionó: https://community.powerbi.com/t5/Desktop/TotalYTD-to-Last-Month/mp/692437

Correct Formula = 
VAR pre =
    CALCULATE (
        MAX ( 'CalendarAuto'[Date] ),
        FILTER ( 'CalendarAuto', DATEDIFF ( 'CalendarAuto'[Date], TODAY (), MONTH ) = 1 )
    )
    RETURN
        CALCULATE(
            SUM(Sheet1[EAC]),
            FILTER(
                Sheet1,
                YEAR(Sheet1[Custom Date]) = YEAR(pre)
                && Sheet1[Custom Date] <= pre
            )
        )

La idea de usar una tabla de Calendario separada es buena y estoy seguro de que usaré en el futuro. Gracias @danextian por el dato.

Gracias de nuevo.

Yoshi

Amitchandak

En caso de que tenga la fecha, puede usar la inteligencia de tiempo usando la tabla de fechas

Si tienes un mes, lo conviertes en la fecha.

fecha = fecha (tabla[year],fecha[month], 1)

Entonces prueba como

YTD Sales month back = CALCULATE([Sum Sales],DATESYTD(ENDOFMONTH(DATEADD('Date'[Date Filer],-1,MONTH))))

Para aprovechar al máximo la función de inteligencia del tiempo. Asegúrese de tener un calendario de fechas y que se haya marcado como la fecha en la vista de modelo. Además, únala con la columna de fecha de sus hechos.

Referir
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/

Aprecie sus felicitaciones. En caso de que esta sea la solución que está buscando, márquela como la Solución.
En caso de que no sirva de ayuda, proporcione información adicional y márqueme con @

Gracias. Mis blogs recientes –Decodificación de consultas directas: inteligencia de tiempo, colores del ganador en MAP, análisis de recursos humanos, Power BI, trabajo con tiempo no estándar y comparación de datos en rangos de fechas
Conectarse en Linkedin

Amitchandak

En respuesta a Amitchandak

Puede obtener el número del mes, pero eso requerirá que se usen todos. Así que mueva mes y año a otra tabla y únase a esto.

Hasta el mes pasado =

var _max = maxx (mes, mes[Month No]) -1

Var _maxYear = maxx (Mes, Mes[year])

Ventas YTD = CALCULAR (SUMA (Ventas[Sales Amount]), fiter (todo (mes), mes[Month]= _max && mes[Year]= _maxYear))

Yoshimitsu411

En respuesta a Amitchandak

Hola a todos

Gracias por las sugerencias.

He agregado dos columnas a mi tabla de datos según las sugerencias anteriores.

Custom Month Number = SWITCH('Zinfra ADPR Forecast'[Month], "JAN", 1, "FEB", 2, "MAR", 3, "APR", 4, "MAY", 5, "JUN", 6, "JUL", 7, "AUG", 8, "SEP", 9, "OCT", 10, "NOV", 11, "DEC", 12)

Custom Date Created to Calculate YTD = DATE(2020, 'Table'[Custom Month Number], 1)

Luego obtengo esto en mi tabla de datos.

Capture.PNG

Ahora puedo calcular el TotalYTD usando la fórmula siguiente, pero no me da el resultado correcto.

YTD = TOTALYTD(SUM('Table'[EAC]), 'Table'[Custom Date Created to Calculate YTD].[Date])

Quiero el valor de todos los meses anteriores excluyendo el mes actual.

Gracias de nuevo.

danextian

En respuesta a Yoshimitsu411

Hola @ Yoshimitsu411,

Prueba esto:

YTD Last Month =
CALCULATE (
    [Measure],
    //YTD before the earliest date in the currently selected month
    FILTER (
        DATESYTD ( Table[Date] ),
        Table[Date] < MIN ( Table[Date] )
    )
)

Yoshimitsu411

En respuesta a danextian

Gracias.

Probé tu fórmula y me sale (en blanco)

Measure = CALCULATE(SUM(Sheet1[EAC]), FILTER(DATESYTD(Sheet1[Custom Date]), Sheet1[Custom Date] < MIN(Sheet1[Custom Date])))

danextian

En respuesta a Yoshimitsu411

Hola @ Yoshimitsu411,

Modifique su fórmula a esto:

Measure =
CALCULATE (
    SUM ( Sheet1[EAC] ),
    FILTER (
        DATESYTD ( Sheet1[Custom Date] ),
        Sheet1[Custom Date] < MIN ( Sheet1[Custom Date] ),
		ALL(Sheet1[Custom Date], Sheet1[Filter Column2], Sheet1[Filter Column3])
    )
)

Reemplace las columnas de filtro con las columnas de fecha / mes que va a usar en la segmentación.
Nota: Es recomendable utilizar una tabla de fechas externa. Simplificará su fórmula.

Yoshimitsu411

En respuesta a danextian

Gracias @danextian

Probé tu fórmula y obtuve el error: Se pasaron demasiados argumentos a la función FILTRO. El recuento máximo de argumentos para la función es 2.

FilterError.PNG

Amitchandak

En respuesta a Yoshimitsu411

Use la dimensión de fecha, como sugerí en mi última publicación y mueva el mes hacia atrás

YTD = TOTALYTD(SUM('Table'[EAC]), dateadd(Date[Date],-1,Month))

Yoshimitsu411

En respuesta a Amitchandak

Gracias por su respuesta.

La fórmula tiene sentido, lamentablemente, me está dando un valor incorrecto.

Aquí hay algunos datos de muestra.

Activo ID de proyecto de socio Nombre del proyecto ENE EAC FEB EAC MAR EAC APR EAC MAYO EAC JUN EAC JUL EAC AGOSTO EAC SEP EAC OCT EAC NOV EAC DEC EAC
Contoso CON-TOSO-001 Lorem ipsum dolor sit amet 1 2 3
Contoso CON-TOSO-002 consectetur adipiscing elit. Donec rhoncus 2 3 4
Contoso CON-TOSO-003 arius diam consequat a. Mecenas eget 3 4 5
Contoso CON-TOSO-004 attis ex vestibulum in. Nulla ipsum velit 4 5 6
Contoso CON-TOSO-005 t tellus eget facilisis. Fusce posuere maximus leo 5 6 7
Contoso CON-TOSO-006 sapien sodales purus, en ornare odio 6 7 8
Contoso CON-TOSO-007 soy laoreet pellentesque condimentum. Cras ac pellentesque odio 7 8 9
Contoso CON-TOSO-008 auris sapien sodales purus, en ornare 8 9 10
Contoso CON-TOSO-009 olutpat ac dignissim eget, dictum vitae magna. Duis et metus 9 10 11
Contoso CON-TOSO-010 placerat tellus eget facilisis 10 11 12

Cuando utilizo su fórmula a continuación, obtengo 120, que es la suma de JAN EAC y FEB EAC. Lo que quiero es 55, que es la suma de solo ENE EAC porque estamos en el mes de febrero. Si estuviéramos en marzo, querría ver 120 y así sucesivamente.

Measure Past Months YTD = TOTALYTD(SUM(Sheet1[EAC]),DATEADD(Sheet1[Custom Date], -1, MONTH))

Aquí está mi tabla de datos.

Capture1.PNG

Gracias.

Ashish_Mathur

En respuesta a Yoshimitsu411

Hola,

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.

Untitled.png

Yoshimitsu411

En respuesta a Ashish_Mathur

gracias @Ashish_Mathur @danextian @amitchandak @stretcharm por toda su ayuda.

Pude resolver esto usando la solución @Ashish_Mathur.

También encontré una solución similar aquí que también funcionó: https://community.powerbi.com/t5/Desktop/TotalYTD-to-Last-Month/mp/692437

Correct Formula = 
VAR pre =
    CALCULATE (
        MAX ( 'CalendarAuto'[Date] ),
        FILTER ( 'CalendarAuto', DATEDIFF ( 'CalendarAuto'[Date], TODAY (), MONTH ) = 1 )
    )
    RETURN
        CALCULATE(
            SUM(Sheet1[EAC]),
            FILTER(
                Sheet1,
                YEAR(Sheet1[Custom Date]) = YEAR(pre)
                && Sheet1[Custom Date] <= pre
            )
        )

La idea de usar una tabla de Calendario separada es buena y estoy seguro de que usaré en el futuro. Gracias @danextian por el dato.

Gracias de nuevo.

Yoshi

Ashish_Mathur

En respuesta a Yoshimitsu411

De nada.

estirar

Usaría PowerQuery / M para crear un campo de fecha a partir del mes.

Lo hago usando la columna Agregar del ejemplo en este video

Una vez que tenga una fecha, puede hacer cálculos YTD fácilmente.

Curbal tiene un video que explica YTD aquí.

Deja un comentario

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