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
Anonymous
Not applicable

Dificultades de medida

Hola Equipo,

Tengo una tabla simple con 3 columnas.

Me han encargado crear una medida. El cliente desea ver el Promedio de ventas por cliente donde SalesDate se encuentra entre el período entre el inicio del mes actual y los 12 meses anteriores.

Este es mi intento:

Ventas de 12 meses ?

VAR __startcurrentmonth á Fecha(Año(Hoy()), Mes(Hoy()),1)

VAR __previous12 - EDATE(__startcurrentmonth,-12)

if(and(SalesDate<-VAR __startcurrentmonth, SalesDate>-VAR __previous12), average(Sales ($)), "")

Cust NameVentas ($)SalesDate
West Ham325,03101/02/2020
West Ham170,35301/01/2019
West Ham844,28001/01/2019
West Ham298,36101/03/2020
West Ham371,47401/01/2020
West Ham599,90301/02/2019
West Ham364,40201/12/2019
West Ham574,70501/11/2019
West Ham796,91101/10/2019

Estoy corriendo en terrible problemas, aunque. ¿Alguien puede ayudarme?

Gracias

1 ACCEPTED SOLUTION

Hola @water_hydration ,

Esto está relacionado con el contexto de filtro debe ser después de la AVERAGEX y no dentro de AVERAGEX:

12 Month Sales =
VAR __startcurrentmonth =
    DATE ( YEAR ( TODAY () ), MONTH ( TODAY () ), 1 )
VAR __previous12 =
    EDATE ( __startcurrentmonth, -12 )
RETURN
    CALCULATE (
        AVERAGEX ( SalesTable, AVERAGE ( SalesTable[Sales ($)] ) ),
        FILTER (
            ALL ( SalesTable ),
            SalesTable[SalesDate] <= __startcurrentmonth
                && SalesTable[SalesDate] >= __previous12
        )
    )


Regards

Miguel Félix


Did I answer your question? Mark my post as a solution!

Proud to be a Super User!

Check out my blog: Power BI em Português



View solution in original post

8 REPLIES 8
amitchandak
Super User
Super User

Puedes intentar como

Rolling 12 - CALCULATE(Average(Sales[Sales[Sales Amount]),DATESINPERIOD('Date'[Date],startofmonth(Sales[Sales Date]),-12,MONTH))

Full Power BI Video 20 Hours YouTube
Microsoft Fabric Series 60+ Videos YouTube
Microsoft Fabric Hindi End to End YouTube
Anonymous
Not applicable

Hola @amitchandak

Muchas gracias por su respuesta.

No tengo una mesa de "Fecha".

FECHASINPERIOD('Fecha'[Fecha]

Así que lo cambié a DATESINPERIOD('Sales'[Fecha]

Sin embargo, la fórmula general solo devuelve el valor de la primera fecha.

MFelix
Super User
Super User

Hola @water_hydration ,

Las medidas se basan en el contexto, por lo que no puede utilizar las columnas como parte del cálculo que necesita para usar la agregación.

En su caso, cree que necesita tener el AVERAGEX que realiza un cálculo de una tabla fila por fila en función de los valores individuales. Prueba algo similar a esto:

12 Month Sales =
VAR __startcurrentmonth =
    DATE ( YEAR ( TODAY () ), MONTH ( TODAY () ), 1 )
VAR __previous12 =
    EDATE ( __startcurrentmonth, -12 )
RETURN
    AVERAGEX (
        FILTER (
            ALL ( SalesTable ),
            SalesTable[SalesDate] <= __startcurrentmonth
                && SalesTable[SalesDate] >= __previous12
        ),
        SUM ( SalesTable[Sales ($)] )
    )

Regards

Miguel Félix


Did I answer your question? Mark my post as a solution!

Proud to be a Super User!

Check out my blog: Power BI em Português



Hola @water_hydration ,

Esto está relacionado con el contexto de filtro debe ser después de la AVERAGEX y no dentro de AVERAGEX:

12 Month Sales =
VAR __startcurrentmonth =
    DATE ( YEAR ( TODAY () ), MONTH ( TODAY () ), 1 )
VAR __previous12 =
    EDATE ( __startcurrentmonth, -12 )
RETURN
    CALCULATE (
        AVERAGEX ( SalesTable, AVERAGE ( SalesTable[Sales ($)] ) ),
        FILTER (
            ALL ( SalesTable ),
            SalesTable[SalesDate] <= __startcurrentmonth
                && SalesTable[SalesDate] >= __previous12
        )
    )


Regards

Miguel Félix


Did I answer your question? Mark my post as a solution!

Proud to be a Super User!

Check out my blog: Power BI em Português



Anonymous
Not applicable

Muchas @MFelix !

¿Puede explicar el último bit de la devolución?

Estoy un poco confundido en cuanto a cómo funciona. El único bit que tuve que eliminar fue el 'All' de la función, ya que seguía devolviendo el mismo número por cliente.

    RETURN CALCULATE (
        AVERAGEX ( SalesTable, AVERAGE ( SalesTable[Sales ($)] ) ),
        FILTER ( ALL (
            SalesTable ),
            SalesTable[SalesDate] <- __startcurrentmonth
                && SalesTable[SalesDate] > __previous12
        )
    )

Hola @water_hydration ,

Cuando se utiliza la variable es necesario iniciar el cálculo con una devolución, básicamente lo que esta medida está calculando es el valor PROMEDIO para cada fila de datos dentro de la tabla de ventas, pero al cálculo (CALCULATE) se aplica un filtro que es la segunda parte del CALCULATE por lo que sólo ejecuta el AVERAGEX para todos los valores contenidos dentro de las fechas consideradas en las fechas que defina en las variables.

La parte ALL de la solución fue un error de mi parte ya que he sacado el filtro al calcular si coloca el TODO quitará todo el contexto de filtro y devolverá el mismo valor para todas las líneas en su cliente de caso. El ALL se utiliza cuando se desea hacer porcentaje sobre total, por ejemplo.


Regards

Miguel Félix


Did I answer your question? Mark my post as a solution!

Proud to be a Super User!

Check out my blog: Power BI em Português



Anonymous
Not applicable

Muchas gracias @MFelix

Anonymous
Not applicable

Hola @MFelix

¡Wow! Esa fue una respuesta súper rápida - gracias.

Desafortunadamente la fórmula no funciona. Está cerca. He cambiado la suma a la media al final que ayudó, pero el problema principal es que es ignorar los filtros de fecha. Devuelve el promedio del conjunto de datos completo en lugar de solo los meses que queremos incluir.

Cualquier experiencia o ayuda que pueda ofrecer sería muy apreciada.

Gracias

W

12 Month Sales =
VAR __startcurrentmonth =
    DATE ( YEAR ( TODAY () ), MONTH ( TODAY () ), 1 )
VAR __previous12 =
    EDATE ( __startcurrentmonth, -12 )
RETURN
    AVERAGEX (
        FILTER (
            ALL ( SalesTable ),
            SalesTable[SalesDate] <= __startcurrentmonth
                && SalesTable[SalesDate] >= __previous12
        ),
        Average ( SalesTable[Sales ($)] )
    )

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.

May 2025 Monthly Update

Fabric Community Update - May 2025

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

Top Solution Authors