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. 🙂
v-gizhi-msft
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
v-gizhi-msft
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!
v-gizhi-msft
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!
v-gizhi-msft
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]) )
)
v-gizhi-msft
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
Mariusz
Si esta publicación ayuda, entonces por favor considere Aceptándolo como la solución.
No dude en conectarse conmigo.
LinkedIn