Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Promedio del total acumulado en cada intervalo trimestral

Necesito el total acumulado para cada intervalo de cuarto Fórmula DAX

Resultado mostrado en la tabla "Total acumulado promedio"

El trimestre del segundo trimestre de 2025 aún se ejecuta, muestra el valor como cero una vez que se completa este trimestre y luego cambia automáticamente al total acumulado habitual, sugiere

CuartoVentasTotal acumulado
1T 20233030
2023-T22025
3º trimestre 20231020
4º trimestre 20233022.5
2024-T13423.5
2024-T24529.75
3º trimestre 20243435.75
4º trimestre 20243236.25
2025-T14539
2025-T250

15 REPLIES 15
Syndicate_Admin
Administrator
Administrator

Hola @RajK2,
Quería comprobar si ha tenido la oportunidad de revisar la información proporcionada por @danextian @andrewsommer @burakkaragoz . No dude en ponerse en contacto con nosotros si tiene más preguntas. Si la respuesta ha abordado su consulta, acéptela como una solución para que otros miembros puedan encontrarla fácilmente.
Gracias.

Syndicate_Admin
Administrator
Administrator

@RajK2

Use una tabla de fechas dedicada con una clave de cuarto que se pueda ordenar cronológicamente y pruebe esto:

Qtr Avg Running Total = 
// Get the latest date that has data, considering slicers (ALLSELECTED)
VAR LatestDateWithData =
    CALCULATE (
        LASTNONBLANK ( Dates[Date], [Total Revenue] ),
        ALLSELECTED ( Dates )
    )
// Get the month number of the latest date with data
VAR LatestMonthNumber =
    MONTH ( LatestDateWithData )
// Get the YearQuarter key (formatted as "YYYYQQ") for the latest date with data
VAR LatestYearQuarter =
    FORMAT ( LatestDateWithData, "YYYYQQ" )
// Get the YearQuarter key for the current row
VAR RowQuarter =
    MAX ( Dates[YearQuarter] )
// Define the end months of each quarter
VAR QuarterEnds = { 3, 6, 9, 12 }
RETURN
    IF (
        // Check if the current row is the latest (still running) quarter
        LatestYearQuarter = RowQuarter
            && NOT LatestMonthNumber
                IN QuarterEnds && ISFILTERED ( Dates[YearQuarter] ),
        0, // Show 0 for the latest incomplete quarter
        CALCULATE (
            // Calculate the running average up to the current quarter
            AVERAGEX ( VALUES ( Dates[YearQuarter] ), [Total Revenue] ),
            FILTER ( ALL ( Dates[YearQuarter] ), Dates[YearQuarter] <= RowQuarter )
        )
    )

danextian_0-1749619868735.png

Consulte el pbix adjunto para obtener más detalles.

@danextian - Gracias por su respuesta.

Básicamente, necesitamos comparar el precio promedio del trimestre actual Vs los 4 trimestres anteriores

Ejemplo: Precio del trimestre actual 40 y promedio de los últimos 4 trimestres = 60, es decir, 240/4 (60,30,70,80)

Reducción de ingresos = 20, por lo tanto, resalte como color rojo usando formato condicional.

Pasé por el archivo pbix y mis salidas de vista: resaltadas y deberían ser números.

Por favor, sugiera

rolling total.png

Puede cambiar la instrucción RETURN de la siguiente manera:

RETURN
    IF (
        // Check if the current row is the latest (still running) quarter
        LatestYearQuarter = RowQuarter
            && NOT LatestMonthNumber
                IN QuarterEnds && ISFILTERED ( Dates[YearQuarter] ),
        0, // Show 0 for the latest incomplete quarter
        CALCULATE (
            // Calculate the running average up to the current quarter
            AVERAGEX ( VALUES ( Dates[YearQuarter] ), [Total Revenue] ),
            DATESINPERIOD ( Dates[Date], MAX ( Dates[Date] ), -4, QUARTER ),
            REMOVEFILTERS ( Dates )
        )
    )

REMOVEFILTERS ( Fechas ) no es necesario si ha configurado su tabla de Fechas/Calendario como tal.

Establecer y usar tablas de fechas en Power BI Desktop

@danextian - Funciona como una cosa, no funciona para ejecutar el trimestre actual, esto hará que sea cero si el trimestre actual es 2025-Q2, aún nos quedan 18 días.

otra ayuda para que estemos dando un promedio por encima de 4 trimestres en el trimestre actual, en caso de que no tenga 4 trimestres, entonces el valor debe ser 0 (ejemplo de la siguiente manera)

DATESINPERIOD ( 'Calendario'[Fecha], MÁXIMO ( 'Calendario'[Fecha] ), -4, CUARTO ))
Ejemplo: debe ser el valor (total promedio)
2023-01 -- 0 (cero)
2023-02 ---0 (por encima de 1 trimestre, por lo que no hay promedio, por lo que 4 trimestres son cero)
2023-03 --- 0 (por encima de 2 trimestres, por lo que no hay promedio, hacen 4 trimestres, por lo que cero)
2023-04 --- 0 (por encima de 3 trimestres, por lo que no hay promedio, hacen 4 trimestres, por lo que cero)
2024-01 - según la fórmula (por encima de 4 trimestres) - condición cumplida y resultado DAX
2024-02 - según la fórmula (por encima de 4 trimestres) - condición cumplida y resultado del DAX
2024-03 - según la fórmula (por encima de 4 trimestres) - condición cumplida y resultado del DAX
2024-04 - según la fórmula (por encima de 4 trimestres) - condición cumplida y resultado del DAX
2025-01 - según la fórmula (por encima de 4 trimestres) - condición cumplida y resultado DAX
2025-02 -- 0 - Trimestre aún por completar
Gracias

Esto es confuso. Quería obtener el promedio de hasta los últimos 4 trimestres antes de la corriente en su respuesta anterior, pero ahora desea que devuelvan cero. Esto también es diferente de su ejemplo inicial que tomó el promedio de los últimos 4 trimestres, incluido el actual.

danextian_0-1749729793167.png

danextian_1-1749729886786.png

@danextian disculpas por la confusión, trátelo como si este fuera el requisito final, ya que algunas necesidades internas cambian, por lo tanto, mi necesidad de cambiar ligeramente la fórmula DAX, sugiero sobre esto.

rolling total2.png

@RajK2,

Espero que hayas tenido la oportunidad de revisar la solución compartida por @danextian . Si abordó su problema, considere aceptarlo como la solución: ayuda a otros a encontrar respuestas más rápidamente.
Si sigues teniendo el problema, no dudes en responder y estaremos encantados de ayudarte.

Gracias.

Pruebe esto:

Qtr Avg Running Total 3 = 
// Get latest visible date with data
VAR LatestDateWithData =
    CALCULATE (
        LASTNONBLANK ( Dates[Date], [Total Revenue] ),
        ALLSELECTED ( Dates )
    ) // Get earliest YearQuarter
VAR EarliestQtr =
    CALCULATE ( MIN ( Dates[YearQuarter] ), ALL ( Dates ) )
VAR LatestMonthNumber =
    MONTH ( LatestDateWithData ) // Get month number of latest date
VAR QuarterNumber4Start =
    EDATE (
        CALCULATE ( MINX ( STARTOFQUARTER ( Dates[Date] ), [Date] ), ALL ( Dates ) ),
        3 * 3
    )
VAR LatestYearQuarter =
    FORMAT ( LatestDateWithData, "YYYY0Q" ) // Get YearQuarter key of latest date
VAR RowQuarter =
    MAX ( Dates[YearQuarter] ) // Get YearQuarter key for current row
VAR QuarterEnds = { 3, 6, 9, 12 } // Quarter end months
VAR StartOfQtr =
    MINX ( STARTOFQUARTER ( Dates[Date] ), [Date] )
VAR StartOfPrevQtr = StartOfQtr - 1 // Day before start of current quarter
VAR _Result =
    IF (
        HASONEVALUE ( Dates[YearQuarter] ),
        SWITCH (
            TRUE (),
            StartOfQtr <= QuarterNumber4Start, 0, // Show 0 if earliest quarter
            LatestYearQuarter = RowQuarter
                && NOT LatestMonthNumber
                    IN QuarterEnds && ISFILTERED ( Dates[YearQuarter] ), 0, // Show 0 if latest incomplete quarter
            CALCULATE (
                AVERAGEX (
                    VALUES ( Dates[YearQuarter] ),
                    [Total Revenue]
                ),
                DATESINPERIOD ( Dates[Date], StartOfPrevQtr, -4, QUARTER ),
                REMOVEFILTERS ( Dates )
            )
        )
    )
RETURN
    _Result

danextian_0-1749802529140.png

@danextian

Gracias por la respuesta.

Está funcionando para el promedio total móvil 3, ya que no funciona para mí para el trimestre actual porque debería ser un valor cero como el mío, dando los valores y la fórmula aplicada como esta según lo sugerido por usted.

si no funciona, ¿podría sugerir otra medida? Si el trimestre del año es igual al trimestre actual, entonces cero, de lo contrario, aplique el total acumulado qtr 3

Qtr total acumulado 3 =

VAR LatestDateWithData =
CALCULAR (
LASTNONBLANK ( 'Calendario'[Fecha], [valor] ),
TODOS SELECCIONADOS ( 'Calendario' )
) Obtener el primer YearQuarter
VAR FirstiestQtr =
CALCULAR ( MIN ( 'Calendario'[AAAA-QQ] ), TODO ( 'Calendario' ) )
VAR LatestMonthNumber =
MES ( LatestDateWithData ) Obtener el número de mes de la última fecha
VAR QuarterNumber4Start =
FECHA (
CALCULAR ( BRIBONA ( INICIO DEL TRIMESTRE ( 'Calendario'[Fecha] ), [Fecha] ), TODO ( 'Calendario' ) ),
3 * 3
)
VAR LatestYearQuarter =
FORMATO ( LatestDateWithData, "YYYY-QQ" ) Obtener la clave YearQuarter de la última fecha
VAR Cuarto de fila =
MÁXIMO ( 'Calendario'[AAAA-QQ] ) Obtener la clave YearQuarter para la fila actual
VAR Trimestres = { 3, 6, 9, 12 } Meses de fin de trimestre
VAR StartOfQtr =
BRIBONA ( INICIO DEL TRIMESTRE ( 'Calendario'[Fecha] ), [Fecha] )
VAR StartOfPrevQtr = StartOfQtr - 1 Día antes del inicio del trimestre en curso
VAR _Resultado =
SI (
HASONEVALUE ( 'Calendario'[AAAA-QQ] ),
INTERRUPTOR (
VERDADERO (),
StartOfQtr <= QuarterNumber4Start, 0, Mostrar 0 si es el primer trimestre
LatestYearQuarter = Cuarto de fila
&& NO LatestMonthNumber
EN Trimestres && FILTRADO ( 'Calendario'[AAAA-QQ] ), 0, Mostrar 0 si el último trimestre incompleto
CALCULAR (
PROMEDIOX (
VALORES ( 'Calendario'[AAAA-QQ] ),
[valor]
),
DATESINPERIOD ( 'Calendario'[Fecha], StartOfPrevQtr, -4, CUARTO ),
ELIMINAR FILTROS ( 'Calendario' )
)
)
)
DEVOLUCIÓN
_Resultado

Syndicate_Admin
Administrator
Administrator

Hola

¿Sus datos reales tienen una columna de fecha adecuada? En caso afirmativo, comparta esos datos en un formato que se pueda pegar en un archivo de MS Excel. Además, ¿el primer trimestre sería de abril-junio o de enero a marzo?

Syndicate_Admin
Administrator
Administrator

@RajK2 ,

Puede cumplir este requisito en DAX con una medida que compruebe si el trimestre actual está incompleto (es decir, si el último trimestre aún está en ejecución) y devuelva cero para él; De lo contrario, calculará el total acumulado promedio como de costumbre.

Medida DAX sugerida:

Dax
Average Running Total =
VAR MaxQuarter = MAX('Table'[Quarter])
VAR CurrentQuarter = SELECTEDVALUE('Table'[Quarter])
VAR IsCurrent = CurrentQuarter = MaxQuarter
RETURN
    IF(
        IsCurrent,
        0,  // Show 0 for the latest (still running) quarter
        CALCULATE(
            AVERAGEX(
                FILTER(
                    ALL('Table'),
                    'Table'[Quarter] <= CurrentQuarter
                ),
                'Table'[Sales]
            )
        )
    )
  • Reemplace 'Tabla' y [Ventas] con los nombres reales de las tablas y columnas si son diferentes.
  • Esta medida muestra 0 para el trimestre más reciente y, una vez que se agregan los datos del siguiente trimestre, el anterior pasará a formar parte del total acumulado según lo esperado.

Si desea que la lógica se base en un campo de fecha en lugar de en una columna de un cuarto, o si necesita que la medida se actualice dinámicamente cuando haya nuevos datos disponibles, ¡hágamelo saber!

¡Espero que esto ayude!

El resultado se muestra como cero:
Total acumulado trimestral =
VAR MaxQuarter = MÁXIMO('Calendario'[AAAA-QQ])
VAR CurrentQuarter (Trimestre actual) = SELECTEDVALUE('Calendario'[AAAA-QQ])
VAR IsCurrent = CurrentQuarter (Trimestre actual) = MaxQuarter
DEVOLUCIÓN
SI(
IsCurrent,
0, Mostrar 0 para el último trimestre (aún en ejecución)
CALCULAR(
PROMEDIOX(
FILTRO(
TODO('Calendario'),
'Calendario'[AAAA-QQ] <= CurrentQuarter (Trimestre actual)
),
[valor]
)
)
)

@burakkaragoz otro copiar y pegar de IA?

@RajK2 Esto se debe a que MaxQuarter y CurrentQuarter devuelven el mismo valor en la fila actual, IsCurrent es TRUE y, por lo tanto, la condición devuelve cero.


Syndicate_Admin
Administrator
Administrator

Suponiendo que tiene una tabla de fechas y si no hay una columna de un cuarto en ella, debe agregar una

QuarterID = 
"Q" & FORMAT(QUARTER('Date'[Date]), "0") & "-" & FORMAT('Date'[Date], "YYYY")

Utilice una medida o variable para detectar dinámicamente el trimestre actual:

CurrentQuarter =
VAR TodayDate = TODAY()
RETURN
    FORMAT(TodayDate, "YYYY") & "-Q" & FORMAT(TodayDate, "Q")

Promedio móvil excluyendo el trimestre actual

Average Running Total =
VAR CurrentQ = FORMAT(TODAY(), "YYYY") & "-Q" & FORMAT(TODAY(), "Q")
VAR SelectedQ = SELECTEDVALUE('Date'[QuarterLabel])
VAR IsPast = SelectedQ < CurrentQ

RETURN
IF (
    IsPast,
    CALCULATE (
        AVERAGEX (
            DATESQTD('Date'[Date]),
            CALCULATE(SUM('SalesTable'[Sales]))
        ),
        FILTER (
            ALLSELECTED('Date'),
            'Date'[QuarterLabel] <= SelectedQ &&
            'Date'[QuarterLabel] < CurrentQ
        )
    ),
    0
)


Por favor, marque esta publicación como una solución si le ayuda. Agradezco felicitaciones.

Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors