Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more.
Get startedGrow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.
¿Por qué DAX es tan difícil? 😞
T1.F1 = TEXT
T1.F2 = TEXT
T1.F3 = DATE
T2.F1 = TEXT
T2.F2 = TEXT
T = Table, F = Field
T1 tiene muchas filas, con multiplicidad de F1 (el ID) y puede contener multiplicidad de F2 (a través del mismo ID y a través de otras filas para otro ID), F3 es único por F1 (ID). T2 es único en F1 y F2 es donde quiero poner el valor de T1. F2. Quiero obtener T1. F2, donde T1. F1 = T2. F1 y T1. F3 es la fecha más alta para todas las instancias de T1. F1. Aquí está mi intento:
(T2.)F2 =
VAR _maxDate = MAXX(FILTER(T1,T1.F1=EARLIER(T1.F1)),T1.F3)
RETURN
LOOKUPVALUE(T1.F2,T1.F1,T2.F1&&_maxDate,T1.F3)
... y esto es lo que obtengo:
Function 'LOOKUPVALUE' does not support comparing values of type Integer with values of type True/False. Consider using the VALUE or FORMAT function to convert one of the values.
Solved! Go to Solution.
Fue mi mal al hacer la fórmula coloqué la misma columna en la comparación:
Pruebe el follwowing:
LastAppStatus =
VAR _maxDate =
TOPN (
1,
FILTER (
factApplicationEvents,
factApplicationEvents[ApplicationId] = factApplication[ApplicationId]
),
factApplicationEvents[StatusDate],
DESC
)
RETURN
MAXX (
_maxDate,
factApplicationEvents[ApplicationStatus]
)
Necesitamos comparar el ID en ambas tablas y no en la misma tabla.
Resultado adjunto.
Lo más cerca que tengo es esto:
LastAppStatusDate =
VAR _maxDate =
MAXX (
FILTER (
factApplicationEvents,
factApplicationEvents[ApplicationId] = factApplicationEvents[ApplicationId]),
factApplicationEvents[StatusDate]
)
RETURN
MAXX (
FILTER (
factApplicationEvents,
factApplicationEvents[ApplicationId] = factApplicationEvents[ApplicationId]
&& factApplicationEvents[StatusDate] = _maxDate),
factApplicationEvents[ApplicationStatus]
)
Lo que devuelve un único valor que es el mismo para TODAS las filas en factApplication (que sé por los datos no es posible).
¿Tal vez necesito asignar un rowID único en la tabla secundaria y devolverlo desde el primer MAXX, lo que permitiría un LOOKUPVALUE?
DAX es un lenguaje diferente de SQL, entiendo que estás haciendo la comparación, pero necesitas abordarlo de una manera diferente. (También tengo tus dolores, también hice mucho SQL y algunas cosas se perdieron)
En este caso creo que tu problema es cómo estás haciendo el cálculo, no creas que la mejor opción es un MAXX y LOOKUP.
¿Desea obtener el estado de aplicación más alto en función de la fecha máxima es eso?
Intente hacer lo siguiente:
LastAppStatusDate =
VAR _maxDate =
TOPN (
1,
FILTER (
factApplicationEvents,
factApplicationEvents[ApplicationId] = factApplicationEvents[ApplicationId]
),
factApplicationEvents[StatusDate],
DESC
)
RETURN
MAXX ( _maxDate, factApplicationEvents[ApplicationStatus] )
Trythis
Gracias de nuevo Miguel,
LastAppStatus =
VAR _maxDate =
TOPN (
1,
FILTER (
factApplicationEvents,
factApplicationEvents[ApplicationId] = factApplicationEvents[ApplicationId]
),
factApplicationEvents[StatusDate],
DESC
)
RETURN
MAXX (
_maxDate,
factApplicationEvents[ApplicationStatus]
)
me da la misma respuesta que mi primer intento, todas las filas muestran el estado único (cuando sé por los datos que no es correcto).
Fue mi mal al hacer la fórmula coloqué la misma columna en la comparación:
Pruebe el follwowing:
LastAppStatus =
VAR _maxDate =
TOPN (
1,
FILTER (
factApplicationEvents,
factApplicationEvents[ApplicationId] = factApplication[ApplicationId]
),
factApplicationEvents[StatusDate],
DESC
)
RETURN
MAXX (
_maxDate,
factApplicationEvents[ApplicationStatus]
)
Necesitamos comparar el ID en ambas tablas y no en la misma tabla.
Resultado adjunto.
@MFelix Gracias (cómo me perdí eso también), eres una estrella y puedo seguir la lógica aquí. Mucho aprecio y felicitaciones a usted señor.
Hi, @RichHead1821
¿Puede compartir algunos datos de muestra sin que sea difícil dar el valor esperado?
Hola @MFelix , aquí vas https://1drv.ms/u/s!AlQw9UytOyzMhKZ3geV9lukb2ImGYw?e=i9g4Td avísame si no puedes acceder
Gracias Miguel,
Las cosas avanzaron un poco, ahora tengo dos columnas en T2 (factApplication) una para LastAppStatusDate, derivada usando:
LastAppStatusDate =
VAR _maxDate =
MAXX (
FILTER (
factApplicationEvents,
factApplication[ApplicationId] = factApplicationEvents[ApplicationId]),
factApplicationEvents[StatusDate]
)
RETURN _maxDate
Lo que esperaba que me permitiera hacer un LOOKUP para obtener el estado correspondiente para esa fecha:
LastAppStatus =
LOOKUPVALUE (
factApplicationEvents[ApplicationStatus],
factApplication[ApplicationId],
factApplicationEvents[ApplicationId],
factApplicationEvents[StatusDate],
factApplication[LastAppStatusDate]
)
Pero, por supuesto, eso también falla ya que hay muchas filas.
Lo que quiero hacer es (pensé) algo simple, es decir, agregar una columna a factApplication que obtiene el ApplicationStatus de factApplicationEvents, para la fila donde el factApplication[ApplicationId] coincide con el factApplicationEvents[ApplicationId] Y la fila es la que tiene el último hechoApplicationEvents[StatusDate] (todas las fechas son DateTime)
Trabajo de 2 minutos en SQL 😞
Creo que esto es un problema de lógica porque cuando se está haciendo la comparación los valores no son texto devuelto sino un sí o un no.
Sin datos es difícil darle una respuesta, ¿puede compartir una maqueta de datos o una muestra de su archivo PBIX y el resultado esperado? Puede usar un enlace de onedrive, google drive, transferencia o similar para cargar sus archivos.
Si la información es confidencial, compártala a través de un mensaje privado.
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
3 | |
2 | |
1 | |
1 | |
1 |