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

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Syndicate_Admin
Administrator
Administrator

¿Cómo mostrar datos relevantes de la Tabla "Bar" usando una referencia en los datos de la Tabla "Foo"?

Hola

Tengo el siguiente problema:

La tabla Foo tiene un número de serie (serial_number) que corresponde a un número de serie en la barra de la tabla. Este no es un valor único, ya que se ingresan nuevas entradas tanto en Foo como en Bar que pueden contener un número de serie existente (y que "reemplaza" una entrada anterior) se supone que reemplazan a las entradas anteriores (y, por lo tanto, la cardinalidad es de muchas a muchas😞

image.png


Lo que se necesita es recuperar la barra [id] y la barra [descripción] de un elemento dos niveles por encima de la fila de barras a la que se hace referencia en el número de serie. En la práctica, esto significa:

Si el número de serie de la fila Foo es

waffaru_2-1638365625887.png

A continuación, la fila de la barra correspondiente es:

waffaru_4-1638365725270.png

Y queremos obtener el identificador y la descripción de esta fila de la barra (porque este elemento está dos niveles por encima):

waffaru_5-1638365822558.png


Tengo la expresión actual de Dax que funciona en cardinalidad uno a uno. Esto hace que la grandparent_id (existe otra casi similar para la descripción del abuelo. Ambos han sido probados):

Grandparent_id = 
IF(
    HASONEVALUE(Bar[id]),
    LOOKUPVALUE(
        Bar[id],
        Bar[id],
        PATHITEMREVERSE(
            Bar[Path],
            3, INTEGER
        ), BLANK()
    )
)


En este caso, agregar Grandparent_id a la tabla Foo mostrará correctamente la identificación de los abuelos de la tabla Bar relacionada. Pero debido a que la cardinalidad es De muchos a muchos (y debe ser de muchos a muchos, debido a cómo se diseñó la base de datos relacionada), esto no parece funcionar. el LOOKUPVALUE en este caso solo devuelve en blanco,a pesar de una relación existente entre Foo y Bar.

¿Cómo debo evitar este problema para poder mostrar la identificación y la descripción del abuelo en la tabla Foo? A continuación puedes ver que si agrego dichas medidas a la tabla Foo se vacía (a la izquierda de ella se muestra otra tabla Foo que no tiene las medidas en ella, y funciona bien).

waffaru_6-1638366144482.png


Cada entrada de la tabla Bar tiene una referencia parent_id, que me permite crear un PATH usando Bar[id] y Bar[parent_id]:

Path = IF(
    HASONEVALUE(Bar[id]),
    PATH(
        Bar[id],
        Bar[parent_id]
    )
)

Gracias de antemano por la ayuda.

1 ACCEPTED SOLUTION

@Anonymous ,

Aquí te sugiero que inactives la relación entre dos tablas. Esta relación hará que el resultado de la medida sea incorrecto.

Entonces solo necesitas crear dos medidas.

GrandParentID from Bar = 
VAR _ParentID =
    CALCULATE (
        SUM ( Bar[parent_id] ),
        FILTER ( ALL ( Bar ), Bar[serial_number] = MAX ( Foo[serial number] ) )
    )
VAR _GrandParentID =
    CALCULATE (
        SUM ( Bar[parent_id] ),
        FILTER ( ALL ( Bar ), Bar[id] = _ParentID )
    )
RETURN
    _GrandParentID
GrandParent Description from Bar = 
CALCULATE (
    MAX ( Bar[description] ),
    FILTER ( ALL ( Bar ), Bar[id] = [GrandParentID from Bar] )
)

El resultado es el siguiente.

1.png

Saludos
Rico Zhou

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

View solution in original post

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Puede encontrar el archivo Pbix que estoy usando en el siguiente enlace. Todos los datos de muestra necesarios están allí.
https://drive.google.com/file/d/1e7bQc2T8WVZLjGSMNILFqmXUfUwIAWFc/view?usp=sharing

@Anonymous ,

Aquí te sugiero que inactives la relación entre dos tablas. Esta relación hará que el resultado de la medida sea incorrecto.

Entonces solo necesitas crear dos medidas.

GrandParentID from Bar = 
VAR _ParentID =
    CALCULATE (
        SUM ( Bar[parent_id] ),
        FILTER ( ALL ( Bar ), Bar[serial_number] = MAX ( Foo[serial number] ) )
    )
VAR _GrandParentID =
    CALCULATE (
        SUM ( Bar[parent_id] ),
        FILTER ( ALL ( Bar ), Bar[id] = _ParentID )
    )
RETURN
    _GrandParentID
GrandParent Description from Bar = 
CALCULATE (
    MAX ( Bar[description] ),
    FILTER ( ALL ( Bar ), Bar[id] = [GrandParentID from Bar] )
)

El resultado es el siguiente.

1.png

Saludos
Rico Zhou

Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

¡Oh Dios mío, muchas gracias por esto! Todavía no tengo idea de cómo funcionan las medidas en detalle, pero las repasaré y descubriré los pasos. Por ahora, voy a tratar de aplicarlo a mi conjunto de datos real en el que se basa este conjunto de datos de prueba, y responderé si me encuentro con cualquier otro problema que no pueda superar por mí mismo.

Gracias una vez más, he tenido muchas noches sin dormir temiendo este problema.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.