jwkuyper
Tengo esta segmentación, que se basa en una jerarquía de fechas.
Tengo esta tabla.
Como puede ver, también tengo la siguiente medida que calcula la última fecha en el rango seleccionado de la cortadora anterior. Además, para demostrar que mi medida es correcta, he incluido la columna ‘Fecha de finalización del último mes’ para mostrar que mi medida y la última fecha en la segmentación coinciden.
Max_Quarter_Value =
MAXX(
KEEPFILTERS(VALUEs('AUM Source'[Month End Date])),
CALCULATE(MAX('AUM Source'[Month End Date]))
)
Mi problema es: quiero mostrar ‘End AUM Test’ como el AUM final para ese último período en el rango seleccionado, ’09 / 30/2020 ‘en este caso. En este momento, ‘Finalizar prueba AUM’ está sumando todos los trimestres del rango seleccionado anteriormente. Como puede ver en la siguiente tarjeta:
esta suma será igual a $ 621 mil millones de la tabla de correspondencias anterior
Mi código actual para ‘Finalizar prueba AUM’ se encuentra a continuación.
End AUM Test =
CALCULATE(
SUM('AUM Source'[Value]),
Filter(
'AUM Source',
and(
'AUM Source'[ShortAcctName]="End AUM",
'AUM Source'[Month End Date].[Date]=[Max_Quarter_Value]
)))
¡Gracias!
Allison Kennedy
@jwkuyper Un par de cosas con las que puedes jugar.
Intente usar LASTDATE en lugar de MAX.
Cuidado con su contexto DAX. Es posible que deba considerar el uso de EARLIER o Variables para codificar de forma rígida ese valor máximo del trimestre en el cálculo; de lo contrario, es libre de cambiar con el contexto de la función FILTER en la que está anidado.
Aquí hay una buena introducción a las variables para ayudarlo: https://www.sqlbi.com/articles/variables-in-dax/
jwkuyper
En respuesta a Allison Kennedy
Este fue un muy buen consejo. Usé LASTDATE en lugar de MAX y también creé una variable dentro de mi medida como me recomendó. Esto funciona, gracias.
End AUM Based on Last Date in Slicer =
VAR
EndDate = LASTDATE('AUM Source'[Month End Date])
Return
CALCULATE(
sum('AUM Source'[End AUM]),
'AUM Source'[Month End Date] = EndDate)
Anónimo
// If you create a correct model, then your calculation will be
// also correct. For a correct model you need:
// 1. An Account dimension.
// 2. A proper Calendar dimension.
// 3. A fact table (AUM Source) that joins to them.
// All columns in a fact table must always be hidden and
// slicing must take place via dimensions only.
// Then your measure is this:
End AUM =
CALCULATE(
SUM( 'AUM Source'[Value] ),
KEEPFILTERS( Account[Short Acct Name] = "End AUM" ),
LASTDATE( 'Calendar'[Date] )
)
Mejor
D
Anónimo
En respuesta a Anónimo
Por cierto, su medida anterior es incorrecta por muchas razones (de hecho, demasiadas para hablar aquí), pero la principal es que parece que no entiende qué es la «transición de contexto» y cuándo ocurre. Obtiene una suma para todo el período seleccionado porque las medidas, cuando se calculan mediante iteradores, realizan una transición de contexto. Como resultado, [Max_Quarter_Value] en cada fila de ‘Fuente AUM’ tiene exactamente el mismo valor que [Month End Date].[Date].
Mi consejo para ti es este. Obtenga información sobre DAX y apéguese a los principios de modelado dimensional adecuados. Te ahorrarás innumerables horas de dolor y frustración. Aquí hay algo para comenzar en su camino hacia la comprensión de DAX y el modelado de datos:
https://www.youtube.com/watch?v=_quTwyvDfG0
https://www.youtube.com/watch?v=78d6mwR8GtA
Y aquí hay algo sobre la información de tiempo adecuada:
https://www.sqlbi.com/tv/time-intelligence-in-microsoft-power-bi/
Espero que te ayude.
Mejor
D
Allison Kennedy
@jwkuyper Un par de cosas con las que puedes jugar.
Intente usar LASTDATE en lugar de MAX.
Cuidado con su contexto DAX. Es posible que deba considerar el uso de EARLIER o Variables para codificar de forma rígida ese valor máximo del trimestre en el cálculo; de lo contrario, es libre de cambiar con el contexto de la función FILTER en la que está anidado.
Aquí hay una buena introducción a las variables para ayudarlo: https://www.sqlbi.com/articles/variables-in-dax/
jwkuyper
En respuesta a Allison Kennedy
Este fue un muy buen consejo. Usé LASTDATE en lugar de MAX y también creé una variable dentro de mi medida como me recomendó. Esto funciona, gracias.
End AUM Based on Last Date in Slicer =
VAR
EndDate = LASTDATE('AUM Source'[Month End Date])
Return
CALCULATE(
sum('AUM Source'[End AUM]),
'AUM Source'[Month End Date] = EndDate)