Promedio de los últimos 30, 90 días a diario

Un usuario Pregunto ✅

Anónimo

Hola hermosa comunidad,

He sido un usuario de PowerBI durante años, pero durante las últimas semanas he estado tratando de construir cosas por mí mismo; debo decir que DAX no es lo que más me gusta hasta ahora (probablemente relacionado con los dolores de aprendizaje de tener que cambiar desde SQL).

Esta podría ser una pregunta realmente trivial, pero estoy luchando con la lógica PROMEDIO en DAX:

  • Objetivo: agregar una medida que calcule el promedio de los últimos 30 días todos los días;
  • He probado muchas de sus sugerencias aquí (incluso probé la Medida rápida – «promedio móvil»), pero no parece que pueda obtener los mismos resultados que si simplemente lo estuviera haciendo en Excel: cuando aplico alguna lógica promedio (de los últimos 30 días), tengo resultados del día 1, cuando solo espero valores del día 31.
  • Si hago una suma simple de los últimos 30 días, empiezo a obtener valores a partir del día 31, por lo que no creo que esto sea un problema de calendario.

La tabla con la que estoy trabajando es bastante simple: referencia del cliente; dinero en efectivo; fecha (también creé una tabla de calendario, que está vinculada a esta tabla, que estoy usando para cualquier lógica de fechas que necesite).

La tabla original tiene 3 columnas y quiero ver «promedio de 30 días» como una nueva columna (medida). Como resultado final, esto es lo que espero:

Fecha AcuerdoRef Saldo en efectivo Promedio de 30 días
01/01/2019 A B C 33115
01/02/2019 A B C 37517
01/03/2019 A B C -5429
01/04/2019 A B C -1309
01/05/2019 A B C -6189
01/06/2019 A B C 78021
01/07/2019 A B C 71572
01/08/2019 A B C 20278
01/09/2019 A B C 66166
01/10/2019 A B C 51486
01/11/2019 A B C -4501
01/12/2019 A B C 34579
13/01/2019 A B C 34201
14/01/2019 A B C 63244
15/01/2019 A B C -11193
16/01/2019 A B C -4699
17/01/2019 A B C 48626
18/01/2019 A B C 35979
19/01/2019 A B C 40465
20/01/2019 A B C 24711
21/01/2019 A B C -10764
22/01/2019 A B C 51573
23/01/2019 A B C 98659
24/01/2019 A B C 21137
25/01/2019 A B C 69028
26/01/2019 A B C 65687
27/01/2019 A B C 67765
28/01/2019 A B C 27576
29/01/2019 A B C 84303 37296.69
30/01/2019 A B C 56685 37942,97
31/01/2019 A B C 48015 38439.63
01/02/2019 A B C 57797 39115.63
02/02/2019 A B C 23292 40073
02/03/2019 A B C 99018 43417.23
02/04/2019 A B C 53172 45395,93
02/05/2019 A B C 54902 44625.3
02/06/2019 A B C 9451 42554.6
02/07/2019 A B C 20863 42574.1
02/08/2019 A B C 85353 43213.67

Para el diseño de la tabla de calendario utilicé la siguiente expresión:

Dates 5 =
  GENERATE (
    CALENDAR( DATE( YEAR( TODAY() ) - 2, MONTH( TODAY() ), DAY( TODAY()) ), TODAY()),
    VAR startOfWeek = 1 // Where 1 is Sunday and 7 is Saturday, thus a 3 would be Tuesday    
    VAR currentDay = [Date]
    VAR days = DAY( currentDay )
    VAR months = MONTH ( currentDay )
    VAR years = YEAR ( currentDay )
    VAR nowYear = YEAR( TODAY() )
    VAR nowMonth = MONTH( TODAY() )
    VAR dayIndex = DATEDIFF( currentDay, TODAY(), DAY) * -1
    VAR todayNum = WEEKDAY( TODAY() )
    VAR weekIndex = INT( ROUNDDOWN( ( dayIndex + -1 * IF( todayNum + startOfWeek <= 6, todayNum + startOfWeek, todayNum + startOfWeek - 7 )) / 7, 0 ) )
  RETURN ROW (
    "day", days,
    "month", months,
    "year", years,
    "day index", dayIndex,
    "week index", weekIndex,
    "month index", INT( (years - nowYear ) * 12 + months - nowMonth ),
    "year index", INT( years - nowYear )
  )
)

Gracias por todo el excelente contenido que tienes aquí, por cierto, es un gran lugar para aprender. 🙂

Hola,

Pruebe esta medida:

Measure = 
CALCULATE (
    SUM ( 'Table'[Cash] ),
    FILTER (
        ALLSELECTED ( 'Table' ),
        'Table'[Date] < MAX ( 'Calendar'[Date] )
            && 'Table'[Date]
                >= MAX ( 'Calendar'[Date] ) - 31
    )
)

Vea mi archivo pbix adjunto.

Atentamente,

Giotto

Hola,

Pruebe esta medida:

Measure = 
CALCULATE (
    SUM ( 'Table'[Cash] ),
    FILTER (
        ALLSELECTED ( 'Table' ),
        'Table'[Date] < MAX ( 'Calendar'[Date] )
            && 'Table'[Date]
                >= MAX ( 'Calendar'[Date] ) - 31
    )
)

Vea mi archivo pbix adjunto.

Atentamente,

Giotto

percheros

En respuesta a v-gizhi-msft

Los héroes no siempre usan capas

editar. a menos que lo hagas, lo cual está bien sin juicio

Amitchandak

@Anónimo, prueba con dimensión de fecha

30 días consecutivos = CALCULAR (suma (Ventas[Sales Amount]), DATESINPERIOD (Tabla[Date Filer], MAX (Ventas[Sales Date]),-30 días))

90 días consecutivos = CALCULAR (suma (Ventas[Sales Amount]), DATESINPERIOD (Tabla[Date Filer], MAX (Ventas[Sales Date]), – 90, Día))

Para aprovechar al máximo la función de inteligencia del tiempo. Asegúrese de tener un calendario de fechas y que se haya marcado como la fecha en la vista de modelo. Además, únala con la columna de fecha de sus hechos. Refiera:
https://radacad.com/creating-calendar-table-in-power-bi-using-dax-functions
https://www.archerpoint.com/blog/Posts/creating-date-table-power-bi
https://www.sqlbi.com/articles/creating-a-simple-date-table-in-dax/

Greg_Deckler

Si pudiera proporcionar algunos datos de muestra y el resultado esperado, sería genial. Consulte esta publicación sobre cómo obtener una respuesta rápida a su pregunta: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490

Anónimo

En respuesta a Greg_Deckler

¡Actualizado!

En respuesta a Anónimo

Hola,

¿Mi última respuesta resolvió tu problema?

Si es así, márquelo como una solución para que otros la vean.

¡Gracias!

Atentamente,

Giotto

Anónimo

En respuesta a v-gizhi-msft

Hola @ v-gizhi-msft,

Ninguna de las soluciones funcionó, desafortunadamente 😞

Creo que es porque siempre tendré que filtrar los datos para este año. ¡Lo intentaré y te lo haré saber!

¡Muchas gracias!

En respuesta a Anónimo

Hola,

Si aún tiene problemas más adelante, ¿podría compartir su archivo con OneDrive para la Empresa?

Y recuerde eliminar cualquier dato sensible.

Esto me permitirá ayudarte más.

¡Espere su respuesta!

Atentamente,

Giotto

Anónimo

En respuesta a v-gizhi-msft

Hola @ v-gizhi-msft:

Lo que finalmente funcionó para mí:

Running 30D = 

CALCULATE([Total AVG Cash],
Filter (all ('Calendar'),
'Calendar'[Date].[Date] > max ('Calendar'[Date].[Date])-30 &&
'Calendar'[Date].[Date] <= MAX('Calendar'[Date].[Date]) )
)
Me di cuenta de que no quería «suma» porque estoy trabajando con saldo de caja y no tiene sentido tener una suma, así que creé una medida llamada Total AVG.
No estoy seguro de por qué puedo ver el valor de los primeros 30 días del año (sin tener datos privados del año), pero al menos tengo las cantidades correctas que se muestran a partir del día 30 del mes. 🙂
¡Muchas gracias por tu ayuda!

En respuesta a Anónimo

Hola,

Si mi respuesta lo ha ayudado a resolver su problema, márquelo como una solución para que otros la vean.

¡Gracias!

Atentamente,

Giotto

Mariusz

Hola @Anónimo

Intente usar DATESINPERIOD ()
https://docs.microsoft.com/en-us/dax/datesinperiod-function-dax

Atentamente,
Mariusz

Si esta publicación ayuda, entonces por favor considere Aceptándolo como la solución.

No dude en conectarse conmigo.
LinkedIn

Deja un comentario

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