DAX Cuenta Meses en Trimestre para Promedio

Un usuario Pregunto ✅

don_escritor

Hola a todos,

Me estoy perdiendo algo fundamental aquí.
Tengo una tabla llamada srcActive con 100 filas. Las columnas son srcActive[data_as_of], srcActivo[EmployeeID], srcActivo[headcount].

Tengo una tabla de dimensión de fecha llamada refDate. Digamos que esas columnas son refDate[Date], fecharef[MonthInQtr]

Estas tablas tienen una relación entre srcActive[data_as_of] y fecha de referencia[Date]. Slicer todo funciona maravillosamente.

HeadcountQtr = 
DIVIDE(
    CALCULATE(
        SUM(srcActive[headcount]),
        DATESQTD(srcActive[data_as_of]))
            ,
        3        
        )

Funciona a las mil maravillas excepto por una cosa. Si el trimestre actual no está completo, el /3 se vuelve inexacto. Entonces, si es enero, me gustaría que se dividiera por 1, etc. Creé una columna en la pestaña Dimensión de fecha MonthInQuarter. Pero no he podido imponerlo ni ningún otro medio para que la medida se divida por este número dinámico.

¿Pensamientos?

don_escritor

Muchas gracias por tu aporte. De hecho, usé una combinación de estas ideas para llegar a mi solución.

@Ashish_Mathur, su solución fue elegante pero el número de empleados siempre es 1, así que lo que hizo fue tomar todos los números de 1 y dividirlos por las fechas de ese trimestre. Entonces, tres fechas básicas, digamos 31/1, 28/2 y 31/3. Eso es 3/3 y, por lo tanto, la respuesta para todo fue 1. Necesitábamos no solo promediar sino suma primero en ese trimestre luego divida para el promedio.

Pero me llevó en la dirección correcta.

@CheenuSing, de manera similar usé una variable como sugeriste. Tengo una tabla de dimensión de fecha (tabla de calendario, inteligencia de tiempo, etc.). Y MonthsInQtr es una de las columnas. Simplemente no podía pensar en cómo coleccionarlo. Combinando su idea de la función MAX y la función DATESQTD como filtro, vaya a mi respuesta.

HeadcountQtr = 
VAR varDivisor = 
        CALCULATE(
            MAX(refDate[MonthInQtr]),
            DATESQTD(srcActive[data_as_of]))  
RETURN

    DIVIDE(
        CALCULATE(
            SUM(srcActive[headcount]),
            DATESQTD(srcActive[data_as_of])
),
    varDivisor
    )

¡Muchas gracias!

Atentamente,

~ Don

don_escritor

Muchas gracias por tu aporte. De hecho, usé una combinación de estas ideas para llegar a mi solución.

@Ashish_Mathur, su solución fue elegante pero el número de empleados siempre es 1, así que lo que hizo fue tomar todos los números de 1 y dividirlos por las fechas de ese trimestre. Entonces, tres fechas básicas, digamos 31/1, 28/2 y 31/3. Eso es 3/3 y, por lo tanto, la respuesta para todo fue 1. Necesitábamos no solo promediar sino suma primero en ese trimestre luego divida para el promedio.

Pero me llevó en la dirección correcta.

@CheenuSing, de manera similar usé una variable como sugeriste. Tengo una tabla de dimensión de fecha (tabla de calendario, inteligencia de tiempo, etc.). Y MonthsInQtr es una de las columnas. Simplemente no podía pensar en cómo coleccionarlo. Combinando su idea de la función MAX y la función DATESQTD como filtro, vaya a mi respuesta.

HeadcountQtr = 
VAR varDivisor = 
        CALCULATE(
            MAX(refDate[MonthInQtr]),
            DATESQTD(srcActive[data_as_of]))  
RETURN

    DIVIDE(
        CALCULATE(
            SUM(srcActive[headcount]),
            DATESQTD(srcActive[data_as_of])
),
    varDivisor
    )

¡Muchas gracias!

Atentamente,

~ Don

Ashish_Mathur

Hola,

¿Esto funciona?

=CALCULAR(PROMEDIO(origen activo[headcount]),DATESQTD(srcActive[data_as_of]))

CheenuSing

Hola @don_writer,

Espero que tenga una tabla de calendario (tabla de fechas) y que esté conectada a sus datos de hechos en el campo de fecha en cualquiera de las tablas.

1. Espero que tenga campos Year, QuarterinYear (1,2,3,4) para cada (ene-Mar/Abr-Jun/Jul-Sep/Oct-Dic).

2. Crea una columna calculada

MonthsinQuarter =
CALCULATE (
    COUNTROWS ( VALUES ( CalendarTable[MonthOfYear] ) ),
    FILTER (
        ALL ( CalendarTable ),
        CalendarTable[Year] = EARLIER ( CalendarTable[Year] )
            && CalendarTable[QuarterOfYear] =
                                      EARLIER ( CalendarTable[QuarterOfYear] )
                 )
)

Lo que esto hace es encontrar el número de meses en un trimestre determinado. Si en un año, digamos que el último trimestre (septiembre-diciembre) tiene solo el mes de septiembre, entonces será 1. Cuando se agregue noviembre, será 2 y cuando se agregue diciembre, será 3.

La misma lógica se aplicará para otros trimestres del año.

3.

QuarterlySalesAvg =
VAR _curQtr =
    SELECTEDVALUE ( CalendarTable[QuarterOfYear] )
VAR _CurYr =
    SELECTEDVALUE ( CalendarTable[Year] )
VAR _Divisor =
    CALCULATE (
        MAX ( CalendarTable[MonthsinQuarter] ),
        FILTER (
            ALL ( CalendarTable ),
            CalendarTable[Year] = _CurYr
                && CalendarTable[QuarterOfYear] = _curQtr
        )
    )
RETURN
    DIVIDE (
        CALCULATE (
            SUM ( FactInternetSales[SalesAmount] ),
            DATESQTD ( FactInternetSales[ShipDate] )
        ),
        _Divisor
    )

He usado datos de muestra llamados FactInternetSales (reemplace esto con el nombre de su tabla)

Reemplace Importe de ventas, Fecha de envío con los nombres de sus campos.

Cuando crea una matriz visual, con el número de año y trimestre como filas y SalesAmount y QuarterlySalesAverage como valores, obtendrá los resultados deseados.

Según el año y el número de trimestre, la fórmula anterior encuentra el mes en el trimestre y lo usa como divisor.

Mis datos de muestra tienen solo 2 meses en 2008, Quartner Number 3.

La salida de muestra

Capturar.JPG

Salud

CheenuSing

Deja un comentario

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