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

Grow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Obtener table1.field2 donde table2.field1 = table1.field1 y table1.field3 es la fecha más alta

¿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.

1 ACCEPTED SOLUTION

@RichHead1821 ,

Fue mi mal al hacer la fórmula coloqué la misma columna en la comparación:

MFelix_0-1646045432131.png

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.

View solution in original post

9 REPLIES 9
Syndicate_Admin
Administrator
Administrator

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?

¿ @RichHead1821

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).

@RichHead1821 ,

Fue mi mal al hacer la fórmula coloqué la misma columna en la comparación:

MFelix_0-1646045432131.png

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

Syndicate_Admin
Administrator
Administrator

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 😞

Syndicate_Admin
Administrator
Administrator

@RichHead1821 ,

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.

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel1

Power BI Monthly Update - May 2024

Check out the May 2024 Power BI update to learn about new features.