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

Get certified in Microsoft Fabric—for free! For a limited time, get a free DP-600 exam voucher to use by the end of 2024. Register now

Reply
Syndicate_Admin
Administrator
Administrator

UNION + UNIQUE no devuelve la tabla UNIQUE

Hola

Tengo 3 tablas (importadas de 3 archivos diferentes). Necesito un número de pieza (ÚNICO) y una descripción de número de pieza de esas 3 tablas fusionadas en 1 tabla, que planeo usar como tabla de soporte para 1:many relaciones para el resto del modelo de datos.

He probado un código UNION + UNIQUE (como archivo de muestra) para generar una nueva tabla, pero dado que las descripciones varían de un archivo a otro, la tabla naturalmente termina con múltiples números de pieza con la descripción asociada. Así:

KennT_1-1646910862546.png

Necesito que los números de pieza sean ÚNICOS con CUALQUIER descripción de cualquiera de los archivos. Así que una sola línea para PN 11 con A1 O A2 como descripción. He compartido un conjunto de datos de muestra aquí: https://1drv.ms/u/s!ArDn3OiIpCOZh9k9zES3jqjX6zPsUA?e=E4CqaW. SI la descripción pudiera priorizarse entre los 3 archivos, sería una ventaja adicional, pero estoy feliz de obtener cualquier descripción siempre que el número de pieza sea único.

No estoy seguro de si la solución debe encontrarse en PowerQuery como una unión o como un código DAX.

Espero que alguien pueda ayudarme 🙂

2 ACCEPTED SOLUTIONS

@KennT ,

Si desea obtener la descripción del recuento más alto, pruebe el siguiente código.

let
    Source = Table.Combine({Stock2, Backlog2, Sales2}),
    #"Removed Columns" = Table.RemoveColumns(Source,{"QTY"}),
    #"Grouped Rows" = Table.Group(#"Removed Columns", {"Part Number", "Description"}, {{"Count", each Table.RowCount(_), Int64.Type}}),
    #"Grouped Rows1" = Table.Group(#"Grouped Rows", {"Part Number"}, {{"MaxCount", each List.Max([Count]), type number}, {"All", each _, type table [Part Number=nullable number, Description=nullable text, Count=number]}}),
    #"Expanded All" = Table.ExpandTableColumn(#"Grouped Rows1", "All", {"Description", "Count"}, {"Description", "Count"}),
    #"Added Custom" = Table.AddColumn(#"Expanded All", "Custom", each if [MaxCount] = [Count] then [Description] else null),
    #"Grouped Rows2" = Table.Group(#"Added Custom", {"Part Number"}, {{"Description", each List.Max([Custom]), type nullable text}})
in
    #"Grouped Rows2"

Y este código obtiene la descripción del número ordinal máximo cuando se ordena por cadena.

let
    Source = Table.Combine({Stock2, Backlog2, Sales2}),
    #"Removed Columns" = Table.RemoveColumns(Source,{"QTY"}),
    #"Grouped Rows" = Table.Group(#"Removed Columns", {"Part Number"}, {{"Description", each List.Max([Description]), type nullable text}})
in
    #"Grouped Rows"

vkkfmsft_0-1647419601950.png


Si el problema aún no se resuelve, proporcione información detallada sobre el error o el resultado esperado que espera. Hágamelo saber de inmediato, esperando su respuesta.
Saludos
Winniz
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

@KennT ,

Pruebe el siguiente código. Tome la descripción con el mayor número de caracteres por número de pieza, y si las cadenas tienen la misma longitud, tome el máximo.

let
    Source = Table.Combine({Backlog2, Sales2, Stock2}),
    #"Added Custom" = Table.AddColumn(Source, "Length", each Text.Length([Description])),
    #"Grouped Rows" = Table.Group(#"Added Custom", {"Part Number"}, {{"MaxLength", each List.Max([Length]), type number}, {"Allrows", each _, type table [Part Number=nullable number, Description=nullable text, Length=number]}}),
    #"Expanded Allrows" = Table.ExpandTableColumn(#"Grouped Rows", "Allrows", {"Description", "Length"}, {"Description", "Length"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded Allrows", each ([Length] = [MaxLength])),
    #"Grouped Rows1" = Table.Group(#"Filtered Rows", {"Part Number"}, {{"Description", each List.Max([Description]), type nullable text}})
in
    #"Grouped Rows1"

Saludos
Winniz

View solution in original post

8 REPLIES 8
Syndicate_Admin
Administrator
Administrator

@KennT , Prueba como

distinct(union(distinct(Table1[Part Number]),distinct(Table2[Part Number])))

Si hay dos descripciones, utilice Resumir

unión(

summarize(Table1, Table1[Part Number],"Desc" ,Table1[Part Desc]) ,

resumir(Tabla2, Tabla1[Número de pieza],"Desc" ,Tabla2[Parte Desc]) )

Gracias por su sugerencia @amitchandak, sin embargo, no estoy seguro de que lo siga.

"distinct(union(distinct(Table1[Part Number]),distinct(Table2[Part Number])))" simplemente crearía una lista única de PNs pero SIN ninguna descripción?

Además, el resumen no funciona, supongamos que es porque son campos de texto.

Le agradecería que pudiera demostrarlo en los datos de muestra.

@KennT ,

Por favor, cree la nueva columna:

Column = 
CALCULATE (
    CONCATENATEX ( 'PN Table', [PN Descr], " or " ),
    ALLEXCEPT ( 'PN Table', 'PN Table'[Part Number] )
)

vkkfmsft_2-1647247150761.png

O pruebe el código en Power Query.

let
    Source = Table.Combine({Stock2, Backlog2, Sales2}),
    #"Removed Columns" = Table.RemoveColumns(Source,{"QTY"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Columns"),
    #"Grouped Rows" = Table.Group(#"Removed Duplicates", {"Part Number"}, {{"Description", each Text.Combine([Description]," Or "), type nullable text}})
in
    #"Grouped Rows"

vkkfmsft_1-1647247138272.png

Si el problema aún no se resuelve, proporcione información detallada sobre el error o el resultado esperado que espera. Hágamelo saber de inmediato, esperando su respuesta.
Saludos
Winniz
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

Gracias @v-kkf-msft. Absolutamente un paso hacia la solución🙂 deseada Prefiere el enfoque de Power Query.

¿Alguna forma de abordar - "Descripción", cada Text.Combine([Descripción] - un poco más dinámico, ya que los datos se actualizan semanalmente con nuevos duplicados que aparecen de vez en cuando?

Podría agregar "valor de reemplazo" para cada descripción combinada que encuentre, pero un reemplazo automatizado para futuras descripciones de duplets sería el escenario preferido.


¿Podría codificarse la consulta para devolver la descripción con el recuento más alto o al menos simplemente devolver 1 descripción al azar o el primer / último encuentro?

@KennT ,

Si desea obtener la descripción del recuento más alto, pruebe el siguiente código.

let
    Source = Table.Combine({Stock2, Backlog2, Sales2}),
    #"Removed Columns" = Table.RemoveColumns(Source,{"QTY"}),
    #"Grouped Rows" = Table.Group(#"Removed Columns", {"Part Number", "Description"}, {{"Count", each Table.RowCount(_), Int64.Type}}),
    #"Grouped Rows1" = Table.Group(#"Grouped Rows", {"Part Number"}, {{"MaxCount", each List.Max([Count]), type number}, {"All", each _, type table [Part Number=nullable number, Description=nullable text, Count=number]}}),
    #"Expanded All" = Table.ExpandTableColumn(#"Grouped Rows1", "All", {"Description", "Count"}, {"Description", "Count"}),
    #"Added Custom" = Table.AddColumn(#"Expanded All", "Custom", each if [MaxCount] = [Count] then [Description] else null),
    #"Grouped Rows2" = Table.Group(#"Added Custom", {"Part Number"}, {{"Description", each List.Max([Custom]), type nullable text}})
in
    #"Grouped Rows2"

Y este código obtiene la descripción del número ordinal máximo cuando se ordena por cadena.

let
    Source = Table.Combine({Stock2, Backlog2, Sales2}),
    #"Removed Columns" = Table.RemoveColumns(Source,{"QTY"}),
    #"Grouped Rows" = Table.Group(#"Removed Columns", {"Part Number"}, {{"Description", each List.Max([Description]), type nullable text}})
in
    #"Grouped Rows"

vkkfmsft_0-1647419601950.png


Si el problema aún no se resuelve, proporcione información detallada sobre el error o el resultado esperado que espera. Hágamelo saber de inmediato, esperando su respuesta.
Saludos
Winniz
Si esta publicación ayuda, considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.

@v-kkf-msft mis sinceras disculpas por no responder antes, pero he estado absolutamente inundado de trabajo durante la semana pasada.

¡Su solución funcionó perfectamente! Pura magia. Lo he aplicado a un conjunto de datos más grande y he agregado más columnas a la consulta que envió. Gracias @v-kkf-msft, he estado luchando con esto durante bastante tiempo.

Si no te importa una última pregunta de seguimiento. Tengo otro conjunto de datos al que quiero aplicar esta solución, pero en lugar de elegir la descripción en función del recuento, quiero que la consulta elija la descripción más larga (con la mayor cantidad de caracteres) con duplets. Agradecería su opinión si tiene tiempo.

@KennT ,

Pruebe el siguiente código. Tome la descripción con el mayor número de caracteres por número de pieza, y si las cadenas tienen la misma longitud, tome el máximo.

let
    Source = Table.Combine({Backlog2, Sales2, Stock2}),
    #"Added Custom" = Table.AddColumn(Source, "Length", each Text.Length([Description])),
    #"Grouped Rows" = Table.Group(#"Added Custom", {"Part Number"}, {{"MaxLength", each List.Max([Length]), type number}, {"Allrows", each _, type table [Part Number=nullable number, Description=nullable text, Length=number]}}),
    #"Expanded Allrows" = Table.ExpandTableColumn(#"Grouped Rows", "Allrows", {"Description", "Length"}, {"Description", "Length"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded Allrows", each ([Length] = [MaxLength])),
    #"Grouped Rows1" = Table.Group(#"Filtered Rows", {"Part Number"}, {{"Description", each List.Max([Description]), type nullable text}})
in
    #"Grouped Rows1"

Saludos
Winniz

Muchas gracias por su aporte @v-kkf-msft . Ese recuento de caracteres también funcionó según lo previsto. 2 líneas de consulta muy útiles (al menos para mí) 😊

Helpful resources

Announcements
November Carousel

Fabric Community Update - November 2024

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

Live Sessions with Fabric DB

Be one of the first to start using Fabric Databases

Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.

Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.

Nov PBI Update Carousel

Power BI Monthly Update - November 2024

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

Top Solution Authors
Top Kudoed Authors