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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
RolandoVG
Regular Visitor

Promedio móvil (3 meses)

Hola, estoy luchando con esto, estoy practicando Power BI, tengo dos tablas, Calendario y Ventas, Tabla Calendario extiende fechas hasta diciembre de 2011, mientras que las fechas de las tablas de ventas sólo van a diciembre de 2009.

Cuando intento construir un promedio móvil de 3 meses, los resultados se extienden a febrero/2010, lo que es incorrecto.

Lo sé, podría resolverse simplemente filtrando o eliminando fechas inexistentes de la tabla Calendar, pero es un desafío sobre cómo controlar esta situación, tal vez no es pruebable en la vida real, pero me gustaría saber si es posible solucionar esto sin eliminar o filtrar nada.

Esto es lo que hice para la media rodante

Movil3MesesListo ?
CALCULATE(
SUM(FactSales[Cantidad Total]),
DATESINPERIOD(DimCalendar[DateKey],LASTDATE(DimCalendar[DateKey]),-3,MONTH)
)/ CALCULATE(
DISTINCTCOUNT (DimCalendar[Mi]),
DATESINPERIOD(DimCalendar[DateKey],LASTDATE(DimCalendar[DateKey]),-3,MONTH)
)
Muchas gracias de antemano

DudaRollingAverage.jpgDudaRollingAverage2.jpg

2 REPLIES 2
TomMartens
Super User
Super User

Hey @RolandoVG ,

CALCULATE(...) debe utilizarse siempre que se tenga que modificar un contexto de filtro existente. Como usted va a calcular el promedio móvil de los últimos tres meses, usted tiene que utilizar CALCULATE.

El 1er parámetro es la parte fácil, es la expresión numérica, aquí SUM(...), el 2o a enésimo parámetro son el modificador de filtro. Aquí está utilizando DATESINPERIOD(...).

Lo que pasa en enero es esto. DATESINPERIOD devuelve una tabla que contiene las fechas del 1 de noviembre de 2009 al 31, de enero de 2010. Esto significa que se crea la SUMA agregando (1253... + 1301... + null) / 3.

Lo mismo sucede en febrero de 2010
Esto significa que se crea la SUMA agregando (1301... + null + null) / 3.

Digo que esto es correcto, así es como funciona DAX, pero tal vez esto no es lo que esperas 😉

Si desea evitar el cálculo si SUM('...'[Cantidad Total]) es null, entonces debe ajustar el cálculo completo en una instrucción if como tal:

measure = 
IF(NOT(ISBLANK(SUM('...'[Cantidat Total]))
, CALCULATE(...)
, BLANK()
)

Con suerte, esto es lo que estás buscando.

saludos

Tom



Did I answer your question? Mark my post as a solution, this will help others!

Proud to be a Super User!
I accept Kudos 😉
Hamburg, Germany

Muchas gracias @TomMartens, que funcionó muy bien.

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors