Calcular QTD fiscal anterior

Un usuario Pregunto ✅

Anónimo

Hola,

Tengo un cálculo de QTD anterior para capturar el verdadero QTD del trimestre anterior. El trimestre fiscal no es estándar, por lo que tengo que crear este cálculo en lugar de usar las funciones predeterminadas de DAX Time. Los trimestres fiscales son febrero-abril, mayo-julio, agosto-octubre, noviembre-enero. Entonces, por ejemplo, si el QTD actual es 2/1 – 3/24. Mi QTD anterior devolverá la suma de las ventas del 11/1 al 12/23 del trimestre anterior (básicamente, solo tome los primeros N días del trimestre anterior dependiendo de la fecha del trimestre actual)

Aquí está mi fórmula. La tabla de fechas es una tabla de fechas fiscales personalizada.

PreviousQTD = 
VAR Previous_Quarter = DATEADD(Dates[Start of Q],-1,QUARTER)
VAR Previous_Quarter_end = 
DATEADD(Dates[End of LQ],0,QUARTER)
VAR Current_Quarter_Start = DATEADD(Dates[Start of Q],0,QUARTER)
VAR Max_Date = MAX (Sales[Date])
RETURN
CALCULATE (
[Billings $],
FILTER(ALL(Dates),
Dates[Date] >= Previous_Quarter
&& Dates[Date]
<= IF (
Previous_Quarter_end
<= Previous_Quarter + DATEDIFF ( Current_Quarter_Start, Max_Date, DAY ),
Previous_Quarter_end,
Previous_Quarter + DATEDIFF ( Current_Quarter_Start, Max_Date, DAY )
)
)
)

La salida esperada debería verse así:

Fecha anterior QTD Facturación $

2/25 $ 290 000

3/6 $ 220 000

3/9 $ 66 000

Total $ 286,000 $ 290,000

Sin embargo, obtuve el resultado como el siguiente:

Fecha anterior Facturación del QTD $

2/25 $ 290 000

3/6

3/9

Total $ 290.000

Por alguna razón, el cálculo de QTD anterior volverá en blanco si no se muestran facturas en ese día específico. También intenté usar el cálculo de DAX para las facturas del último trimestre:

Last Quarter Billings $ = CALCULATE([Billings $],DATEADD(Dates[Date],-1,QUARTER))

Esto funciona, pero como mencioné anteriormente, devolverá un trimestre anterior completo cuando haga la comparación trimestral. Lo que realmente quiero hacer es comparar el primer día N del trimestre anterior. Esta fórmula funcionará como se muestra a continuación:

Fecha Último trimestre Facturación Facturación $

2/25 $ 290 000

3/6 $ 220 000

3/9 $ 66 000

4/3 $ 180 000

5/5 $ 100,000

Total $ 466,000 $ 290,000

Sin embargo, no quiero la facturación completa del trimestre anterior, lo que significa excluir el 4/3/2020 y el 5/5/2020, ya que todavía no estamos allí. ¿Puede ayudarme alguien, por favor? ¡Gracias por adelantado!

– Dennis

MFelix

En respuesta a Anónimo

Hola @Anónimo,

dado que tiene las columnas de inicio de trimestre y final de trimestre junto con la fecha MAX, solo necesita calcular la diferencia del día y tomar la siguiente medida:

PreviousQTD = 
VAR NUMBER_OF_DAYS =


 IF(SELECTEDVALUE(Dates[FY&Q]) = LOOKUPVALUE(Dates[FY&Q];Dates[Date];SELECTEDVALUE(Dates[Max Date]));LOOKUPVALUE(Dates[Days in the Quarter];Dates[Date];SELECTEDVALUE(Dates[Max Date]))
;LOOKUPVALUE(Dates[Days in the Quarter];Dates[Date];SELECTEDVALUE(Dates[Date])))
RETURN
    CALCULATE (
        SUM ( 'sample data'[Billings] );
        FILTER (
            ALL ( Dates );
            Dates[Date] >= SELECTEDVALUE ( Dates[Start of LQ] )
                && Dates[Date]
                    <= SELECTEDVALUE ( Dates[Start of LQ] ) + NUMBER_OF_DAYS
        )
    )

Devuelve el resultado que necesita.

Tenga en cuenta que, dado que no tiene ningún dato del próximo mes, no estoy seguro de si esto se está calculando de manera completamente correcta, especialmente cuando tiene otras selecciones. Pero el proceso difícil es encontrar la cantidad de días en el trimestre y sumar esos días a los días LQ. También puede hacerlo en base a la fecha seleccionada para calcular el número de días, por lo que si selecciona el 23 de marzo devolverá 51 pero el 25 de febrero devolverá 25 días. Fácil de ajustar a esta última opción.

Verifique el archivo PBIX adjunto.

Amitchandak

Si su trimestre es de enero a marzo, de abril a junio, etc. No importa cuál sea el primero. el puede usar lo siguiente con la dimensión de fecha

QTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESQTD(('Date'[Date])))

Last QTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESQTD(dateadd('Date'[Date],-1,QUARTER)))
Last to last QTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESQTD(dateadd('Date'[Date],-2,QUARTER)))
Next QTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESQTD(dateadd('Date'[Date],1,QUARTER)))

Last year same QTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESQTD(dateadd('Date'[Date],-1,Year)))

trailing QTR = CALCULATE(SUM(Sales[Sales Amount]),dateadd('Date'[Date],-1,QUARTER))
trailing  4 QTR = CALCULATE(SUM(Sales[Sales Amount]),dateadd('Date'[Date],-4,QUARTER))

Pero si no tienen un estándar, cree un rango en el qtr usando YYYYQ, aquí Q es personalizado según su mes. Y crea un rango

rango = Rango (Todos (Fecha),[YYYYQ],, asc, denso)

Ahora usa este rango para calcular el qtr anterior

Ventas QTD = CALCULAR (SUMA (Ventas[Sales Amount]), filtro (todo (Fecha), Fecha[Qtr Rank]= Max (Fecha[Qtr Rank])))
Ventas del último trimestre = CALCULAR (SUMA (Ventas[Sales Amount]), filtro (todo (Fecha), Fecha[Qtr Rank]= Max (Fecha[Qtr Rank]) -1))

Consulte este archivo de la semana para su referencia

https://www.dropbox.com/s/d9898a48e76wmvl/sales_analytics_weekWise.pbix?dl=0

Tienes lo mismo para QTR

Anónimo

En respuesta a Amitchandak

@amitchandak gracias por la rápida respuesta.

Ventas del último trimestre = CALCULAR (SUMA (Ventas[Sales Amount]), filtro (todo (Fecha), Fecha[Qtr Rank]= Max (Fecha[Qtr Rank]) -1))

Esta solución parece capturar el trimestre anterior completo, en lugar de solo capturar los primeros N días del trimestre anterior como mencioné en el hilo. Como tengo una tabla de fechas de calendario fiscal personalizada, esta función hará exactamente lo mismo:

Facturación del último trimestre $ = CALCULAR ([Billings $], DATEADD (Fechas[Date], -1, TRIMESTRE))
Gracias,
Dennis

Amitchandak

En respuesta a Anónimo

Cree un Qtr Day restando startdateofQtr y date.

Medida =

Var _max = (Allselected (Date), Date[Qtr Day])

Regreso

Facturación del último trimestre $ = CALCULAR ([Billings $], DATEADD (Fechas[Date], -1, TRIMESTRE), Fecha[Qtr Day]<_max)

Anónimo

En respuesta a Amitchandak

Gracias @amitchandak. Creo que casi estamos allí, sin embargo, si estoy tratando de devolver la fecha máxima seleccionada, ¿cómo debo modificar la pieza var actual en su solución?

Intenté lo siguiente pero no parece funcionar:

var _max = MAX(ALLSELECTED(Dates[Days in the Quarter]))

Gracias,
Dennis

Amitchandak

En respuesta a Anónimo

Tratar

var _max = MAXX(ALLSELECTED(Dates),Dates[Days in the Quarter])

¿Cuál es el error que obtienes? O simplemente compruebe lo que da esto. ¿Da los Qtr Days correctos?

También vote por: https: //ideas.powerbi.com/forums/265200-power-bi-ideas/suggestions/39772834-custom-period

Anónimo

En respuesta a Amitchandak

@amitchandak Ahora obtengo el día correcto en devoluciones trimestrales. ¡Una última pregunta y creo que podemos cerrar esta pregunta!

Digamos que la última vez que actualicé los datos fue el 20/3/2020 y eso fue 50 días después del trimestre fiscal actual (febrero-abril). ¿Sería posible obtener los primeros 50 días del trimestre anterior sin usar la cortadora (creo que la solución anterior se basa en la cortadora seleccionada)? Básicamente, ¿crear otra var basada en la última fecha de actualización de datos?

¡De nuevo agradezco su ayuda!

Gracias,
Dennis

Amitchandak

En respuesta a Anónimo

@Anónimo

Algo como esto

meaure =
var _max = maxx(Table,Table[Date])
var _maxday= maxx(filter(Date, date[Date]=_max),Date[Date of Qtr])
var _LastQtrRank= maxx(filter(Date, date[Date]=_max),Date[Qtr Rank]) -2

Puedes usar estas var en calc

Anónimo

En respuesta a Amitchandak

@amitchandak the var funciona en el cálculo, pero tengo el mismo problema que describí en mi pregunta original. Creo que esencialmente su solución devolverá el mismo resultado que la mía: el cálculo anterior de QTD devuelve nulo si no se observa facturación en esos días.

La salida esperada debería verse así:

Fecha anterior Facturación del QTD $

2/25 $ 290 000

3/6 $ 220 000

3/9 $ 66 000

Total $ 286,000 $ 290,000

Sin embargo, obtuve el resultado como el siguiente:

Fecha anterior Facturación del QTD $

2/25 $ 290 000

3/6

3/9

Total $ 290.000

Me refiero a este enlace del trimestre anterior a la fecha para la solución, pero no parece funcionar perfectamente. @MFelix, por favor avíseme si también puede ayudar / comentar.

Gracias,
Dennis

Amitchandak

En respuesta a Anónimo

@Anónimo

¿Puedes compartir una muestra mejor con Date en formato mm / dd / AAAA? Intentaré construir un pbix y compartirlo.

Copie y pegue los datos de una tabla.

MFelix

En respuesta a Amitchandak

Hola @Anónimo,

La solución se refiere a un calendario simple que recoge el cuarto en función de las fechas normales, cree que sus problemas pueden referirse a la forma en que está calculando fechas no estándar, y probablemente la fecha de inicio y finalización del trimestre no está obteniendo la correcta valor desde las ventas[Date] La columna está conectada a la fecha normal.

Como @amitchandak, si puede compartir un archivo de muestra, sería más fácil darle una respuesta.

Anónimo

En respuesta a MFelix

@amitchandak @MFelix ¡Gracias a ambos por tomarse el tiempo y buscar una solución!

He adjuntado un archivo .pbix de muestra aquí: qtd sample.pbix

Según la última fecha de datos de ventas (22/3/2020), el cálculo QTD anterior debería tomar los primeros 51 días del trimestre anterior y debería devolver $ 286,000 como resultado (ventas del 6/12/2019 y del 9/12 / 2019).

his_sales.png

Sin embargo, ambas medidas calculadas volvieron en blanco. PreviousQTD es la solución original y PreviousQTD_test es la solución de @amitchandak. Captura de pantalla rápida a continuación:

Previous_QTD.png

Hágame saber si puedo proporcionar algo más para resolver este problema.

¡Gracias!

Dennis

MFelix

En respuesta a Anónimo

Hola @Anónimo,

dado que tiene las columnas de inicio de trimestre y final de trimestre junto con la fecha MAX, solo necesita calcular la diferencia del día y tomar la siguiente medida:

PreviousQTD = 
VAR NUMBER_OF_DAYS =


 IF(SELECTEDVALUE(Dates[FY&Q]) = LOOKUPVALUE(Dates[FY&Q];Dates[Date];SELECTEDVALUE(Dates[Max Date]));LOOKUPVALUE(Dates[Days in the Quarter];Dates[Date];SELECTEDVALUE(Dates[Max Date]))
;LOOKUPVALUE(Dates[Days in the Quarter];Dates[Date];SELECTEDVALUE(Dates[Date])))
RETURN
    CALCULATE (
        SUM ( 'sample data'[Billings] );
        FILTER (
            ALL ( Dates );
            Dates[Date] >= SELECTEDVALUE ( Dates[Start of LQ] )
                && Dates[Date]
                    <= SELECTEDVALUE ( Dates[Start of LQ] ) + NUMBER_OF_DAYS
        )
    )

Devuelve el resultado que necesita.

Tenga en cuenta que, dado que no tiene ningún dato del próximo mes, no estoy seguro de si esto se está calculando de manera completamente correcta, especialmente cuando tiene otras selecciones. Pero el proceso difícil es encontrar la cantidad de días en el trimestre y sumar esos días a los días LQ. También puede hacerlo en base a la fecha seleccionada para calcular el número de días, por lo que si selecciona el 23 de marzo devolverá 51 pero el 25 de febrero devolverá 25 días. Fácil de ajustar a esta última opción.

Verifique el archivo PBIX adjunto.

Anónimo

En respuesta a MFelix

Hola @MFelix,

Gracias por esta solución alternativa. Lo intenté, pero parece que solo funciona para el trimestre actual. Para el trimestre anterior, la var NUMBER_OF_DAYS volverá en blanco si selecciono un rango de fechas. Vea la captura de pantalla rápida a continuación: Number_of_Days.png

¿Cómo devolvería el número de días entre el máximo de las fechas seleccionadas (de un rango) y la fecha de inicio del trimestre?

Ejemplo de archivo .pbix adjunto aquí: qtd sample_1.pbix

¡Gracias de nuevo por tu ayuda!

Mejor,

Dennis

Anónimo

En respuesta a Anónimo

Hola @MFelix,

En realidad, me di cuenta de esto, lo único que tengo que hacer es cambiar la función lookupvalue a:

FECHAS ENTRE (Fechas[Date], MAX (fechas[Date]), MAX (fechas[Date])
Entonces esto devolverá la fecha máxima de mi cortador de fecha.
Nuevamente agradezco tanto su ayuda @MFelix @amitchandak
Salud,
Dennis

MFelix

En respuesta a Anónimo

Hola @Anónimo,

Como mencioné, la medida podría necesitar algunos pequeños cambios, me alegro de que haya sido capaz de resolverla.

Deja un comentario

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