Cómo unir una tabla con una subconsulta usando Power query M

Un usuario Pregunto ✅

kazael

Hola,

Tengo dos tablas que me gustaría fusionar:

Tabla 1: Quejas, ID de empleado

Tabla 2: ID de empleado, nombre Emp, apellido Emp

Me gustaría unir table1 con una subconsulta de table2 con la interfaz de consulta de energía en PBI.

La razón por la que quiero hacerlo es primero, obtener los detalles de los empleados que aparecen en la primera tabla solamente (Tabla2 incluye todo el emp) y para obtenga una tabla con valores distintos (cada emp aparecerá una vez) para reducir el tamaño de la tabla final creada a partir de la combinación.

Mi consulta SQL se vería así:

SELECCIONE *

FROM Tabla1 Unión externa derecha (SELECT DISTINCT EmpID FROM Tabla 2)

Sobre Tabla 1 .EmpID = Tabla 2 .EmpID

¡Gracias!

Greg_Deckler

En respuesta a kazael

No veo por qué no, es código M, puedes hacer prácticamente lo que quieras. Mira mi técnica aquí:

https://social.technet.microsoft.com/wiki/contents/articles/32915.power-bi-merge-query-with-m.aspx

Greg_Deckler

En respuesta a kazael

Bueno, si no desea escribir código M para mantenerlo todo en una consulta, simplemente puede crear una nueva consulta de referencia para Table1. Haga clic derecho en la consulta Table1 y elija «Referencia». Luego, en esa consulta, haga clic con el botón derecho en la columna EmpID y elija eliminar los duplicados. Luego, use esa tabla en su consulta de combinación. O simplemente puede escribir esos pasos en M y mantenerlo todo en una sola consulta sin crear la tabla, pero como quiera hacerlo. Por ejemplo, algo como esto probablemente funcionaría:

= Table.NestedJoin(Table.Distinct(Table1,{"EmpID"}),{"EmpID"},Table2,{"EmpID"},"Table2",JoinKind.LeftOuter)

Greg_Deckler

¿Ha mirado las consultas de combinación?

kazael

En respuesta a Greg_Deckler

Sí, los fusioné, pero no te permite fusionar una tabla con una subconsulta de otra tabla.

Greg_Deckler

En respuesta a kazael

No veo por qué no, es código M, puedes hacer prácticamente lo que quieras. Mira mi técnica aquí:

https://social.technet.microsoft.com/wiki/contents/articles/32915.power-bi-merge-query-with-m.aspx

kazael

En respuesta a Greg_Deckler

Hola @Greg_Deckler

Gracias por tu ayuda.

Sé que es posible, pero no sé cómo incluir la parte Distinct en la consulta.

Esta es la consulta que uso ahora para unir las tablas:

= Table.NestedJoin (Table1, {«EmpID«}, Table2, {» EmpID «},»Tabla 2«, JoinKind.LeftOuter)

¿Cómo modificaría la consulta para incluir solo Distinct EmpID de Table1?

Greg_Deckler

En respuesta a kazael

Bueno, si no desea escribir código M para mantenerlo todo en una consulta, simplemente puede crear una nueva consulta de referencia para Table1. Haga clic derecho en la consulta Table1 y elija «Referencia». Luego, en esa consulta, haga clic con el botón derecho en la columna EmpID y elija eliminar los duplicados. Luego, use esa tabla en su consulta de combinación. O simplemente puede escribir esos pasos en M y mantenerlo todo en una sola consulta sin crear la tabla, pero como quiera hacerlo. Por ejemplo, algo como esto probablemente funcionaría:

= Table.NestedJoin(Table.Distinct(Table1,{"EmpID"}),{"EmpID"},Table2,{"EmpID"},"Table2",JoinKind.LeftOuter)

neharaj

En respuesta a Greg_Deckler

Hola Greg,

¿Cómo podemos unirnos a través de nestedjoin en múltiples condiciones pero con o con condición?

Ejemplo: Seleccione A.id, A.Name B.Name, B.Curso de A, B donde (A.id = B.id O A.Name = B.Name).

Estaba tratando de hacerlo usando la consulta Merge, puedo seleccionar varias columnas al unirme desde A y B, pero creo que está tomando el operador And.

kazael

En respuesta a Greg_Deckler

Hola @Greg_Deckler,

Realmente no funciona, así que intentaré escribir el código M completo usando el artículo que adjuntaste.

¡Gracias!

LivioLanzo

En respuesta a kazael

@kazael

¿Podría darnos un ejemplo visual en el que podamos trabajar?

Greg_Deckler

En respuesta a kazael

De acuerdo, @ImkeF también podría ayudar, ella es una gurú de M.

ImkeF

En respuesta a Greg_Deckler

Creo que la sintaxis M equivalente a la sintaxis SQL que mencionaste en tu publicación original sería la siguiente:

= Table.NestedJoin(Table1,,{"EmpID"},Table.Distinct(Table2, {"EmpID"}),{"EmpID"},"Table2",JoinKind.LeftOuter)

Entonces, la sintaxis de @Greg_Deckler era correcta, solo que se refería a la tabla incorrecta, por lo que puedo ver.

kazael

En respuesta a ImkeF

Hola @LivioLanzo y @ImkeF, ¡gracias por tu ayuda!

Quiero unir valores distintos de la primera tabla:

EmpID ComID
101 1
102 2
103 3
101 4

Con valores de la segunda tabla:

EmpRefNumber Primer nombre Apellido
105 Ben B
101 Ryan GRAMO
102 Jaime H
200 Rosa F

y mantenga solo los valores de la primera tabla (combinación izquierda).

La combinación debe basarse en EmpID y EmpRefNumber

¡Gracias!

LivioLanzo

En respuesta a kazael

Puedes hacerlo así:

let
    Source = 
        Table.NestedJoin(
            Table.Distinct( Table.SelectColumns( Table1, {"EmpID"} ) ),
            {"EmpID"},
            Table2,
            {"EmpRefNumber"},
            "JoinedTable",
            JoinKind.LeftOuter
        ),
    ExpandedJoinedTable = Table.ExpandTableColumn(Source, "JoinedTable", {"FirstName", "LastName"}, {"FirstName", "LastName"})
in
    ExpandedJoinedTable

O en DAX:

Table =
NATURALLEFTOUTERJOIN (
    DISTINCT ( SELECTCOLUMNS ( Table1, "EmpID", [EmpID] + 0 ) ),
    SELECTCOLUMNS (
        Table2,
        "EmpID", Table2[EmpRefNumber] + 0,
        "FirstName", table2[FirstName],
        "LastName", table2[LastName]
    )
)

Ashish_Mathur

En respuesta a kazael

Hola,

¿Qué resultado esperas?

kazael

En respuesta a Ashish_Mathur

Hola @Ashish_Mathur,

Table1.EmpID Table2.EmpRefNumber Table2.FirstName Table2.LastName
101 101 Ryan GRAMO
102 102 Jaime H
103 NULO NULO NULO

Con valores distintos en la columna Table1.EmpID

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *