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
stuartbrown
Helper I
Helper I

Combinar filas con compartir valores únicos

Hola

He estado al acecho alrededor del foro durante un tiempo aprendiendo mucho de usted y he pasado por una serie de los tutoriales proporcionados :). Tengo un problema que me can't parecer resolver sin embargo y I'm esperando que alguien puede ayudarme.

Extraes datos de la API de Jira y esto devuelve un registro de entradas. Cada ticket puede tener varios valores de 'componente' y también varios valores de 'etiqueta'. Los datos de PowerBI muestran una fila para cada combinación de estos (ejemplo truncado a continuación)

Ticket URLNúmero de billeteEtiquetasComponentes
url/123ABC-123Etiqueta 1Componente 1
url/123ABC-123Etiqueta 1Componente 2
url/321ABC-321Etiqueta 2Componente 1
url/321ABC-321Etiqueta 3Componente 2
url/321ABC-321Etiqueta 1Componente 1
url/222ABC-222Etiqueta 2Componente 1

Me gustaría tener sólo una fila para cada número de ticket y combinar las diversas etiquetas en valores separados por comas en otras columnas.

Ticket URLNúmero de billeteMatriz de etiquetasMatriz de componentes
url/123ABC-123Etiqueta 1Componente 1, Componente 2
url/321ABC-321Etiqueta 1, Etiqueta 2, Etiqueta 3Componente 1, Componente 2

También he compartido algunos datos reales en formato Excel y pbix - en estos verá que hay un número de otras columnas que necesito mantener. ¡Si alguien puede ayudar, lo apretaría mucho!

14 REPLIES 14
Ashish_Mathur
Super User
Super User

Hola

Prueba este código M

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WKi3K0Tc0MlbSUXJ0ctaFsHwSk1JzFAyBLOf83IL8vNS8EiAvVod41UZw1cZGhlDVEBZEtREOs7GrNibJbFzuNjIygqqGsHC4JBYA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Ticket URL" = _t, #"Ticket Number" = _t, Labels = _t, Components = _t]),
    #"Grouped Rows" = Table.Group(Source, {"Ticket URL"}, {{"All labels", each Text.Combine(List.Distinct([Labels]), ", "), type text}}),
    Joined = Table.Join(Source, "Ticket URL", #"Grouped Rows", "Ticket URL"),
    #"Grouped Rows1" = Table.Group(Joined, {"Ticket URL"}, {{"All components", each Text.Combine(List.Distinct([Components]), ", "), type text}}),
    Joined1 = Table.Join(Joined, "Ticket URL", #"Grouped Rows1", "Ticket URL"),
    #"Removed Columns" = Table.RemoveColumns(Joined1,{"Labels", "Components"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Columns")
in
    #"Removed Duplicates"

Espero que esto ayude.

Untitled.png


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/
mahoneypat
Employee
Employee

Gracias por proporcionar el pbix. Eso hace que sea más fácil ayudar. Esto se hace más fácilmente en la consulta, así que copié la tabla final (ya que no pude actualizar con el origen) y la puse en una nueva consulta para demostrarla. Puede ver cómo hacerlo con el código M siguiente y realizar los mismos pasos en la consulta original. Para ver cómo funciona, simplemente cree una consulta en blanco, vaya a Editor avanzado y reemplace el texto allí con el código M a continuación. Los pasos clave son agrupar en la columna de número de ticket, pero mantener todas las filas y, a continuación, usar las funciones de lista y text.combine para crear la cadena de valores.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("zdddb4IwFAbgv0K4nZae1vLRuznNErMPM9iV8QJnN4mTGqju76/qptkcxCEICYECITw5b3MKo5E5U2qZcst6lRJNwgTFQlmJSJUVLiPrPVSbYZSmK2EBBQ8cs2X2h36bUpvpYXf1trug9wQT3AbcJhCAzTHllCDPgSsMGOvb92IarRZ6sNsCafTk7lmje/1sjlvNsNz0/f9bXAp7S2fzgiBM58cYHECHU4dTijxMvzF38kPvh4mc6sNAzmJ96MlYnFOcEkC+SNbRi3jYnpTEYtjes0hWZsA2mTGXA0Gu6x5l9lWpMuZQhZ5C86hCz+NTtybPj4nUmNTyVPVll6cqlCDpsL0Ke1kqEgDmTPcBG2Gb/NmYygiuKkxNlSl9YldLqqlKUaxEsoiUErFqTJ3yUQUrRQ8oNx8FnGHkgJPVuwdSGL7YrrhibZy76l5EVqhnXkR2m4RTMZFyXpPv14dU45I9zVdfvqf5iqeMXeYdlE6GEnsBUE5A/0wggCq/Sqv0FEmxSs+2044/AQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Ticket URL" = _t, #"Ticket Number" = _t, #"Ticket Type" = _t, #"JIRA Project (?)" = _t, #"Created Date" = _t, Priority = _t, Labels = _t, Assignee = _t, Status = _t, Components = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Ticket URL", type text}, {"Ticket Number", type text}, {"Ticket Type", type text}, {"JIRA Project (?)", type text}, {"Created Date", type datetimezone}, {"Priority", type text}, {"Labels", type text}, {"Assignee", type text}, {"Status", type text}, {"Components", type text}}),
    #"Removed Other Columns" = Table.SelectColumns(#"Changed Type",{"Ticket Number", "Labels", "Components"}),
    #"Grouped Rows" = Table.Group(#"Removed Other Columns", {"Ticket Number"}, {{"AllRows", each _, type table [Ticket Number=nullable text, Labels=nullable text, Components=nullable text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Labels", each Text.Combine(List.Distinct([AllRows][Labels]), ", ")),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Components", each Text.Combine(List.Distinct([AllRows][Components]), ", ")),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"AllRows"})
in
    #"Removed Columns"

saludos

palmadita





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


Muchas gracias por su respuesta! Funciona muy bien para el formato de tabla de salida que mostré en la pregunta. ¿Sabe cómo podría mantener también las otras columnas en los datos (asignado, estado, etc.)?

Hola

¿A quién estás respondiendo? Si es a mí a quien está respondiendo, entonces comparta las otras columnas y muestre el resultado exacto.


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/

@Ashish_Mathur lo siento, me golpeó respuesta a continuación su respuesta, pero parece no haber asociado los dos, lo siento mi culpa 🙂

La lista completa de columnas es la siguiente, las que están en negrita son las columnas que se modifican en la solución, las demás no necesitan modificarse, pero deben seguir estando presentes en la salida. Hay una versión pbix y Excel de los datos reales al final de la pregunta orginal si eso también ayuda?

Ticket URL
Número de billete
Tipo de entrada
Proyecto JIRA (?)
Fecha de creación
Prioridad
Etiquetas
Cesionario
Estado
Componentes
Resumen

Hola

Este código M parece funcionar

let
    Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    #"Grouped Rows" = Table.Group(Source, {"Ticket URL"}, {{"All labels", each Text.Combine(List.Distinct([Labels]), ", "), type text}}),
    Joined = Table.Join(Source, "Ticket URL", #"Grouped Rows", "Ticket URL"),
    #"Grouped Rows1" = Table.Group(Joined, {"Ticket URL"}, {{"All components", each Text.Combine(List.Distinct([Components]), ", "), type text}}),
    Joined1 = Table.Join(Joined, "Ticket URL", #"Grouped Rows1", "Ticket URL"),
    #"Removed Columns" = Table.RemoveColumns(Joined1,{"Labels", "Components"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Columns")
in
    #"Removed Duplicates"

Espero que esto ayude.

Untitled.png


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/

@Ashish_Mathur gracias - Lo intenté pero obtengo un error 'Expression.Error: No pudimos encontrar una tabla de Excel llamada 'Data'.'. Intenté intercambiar el origen de la última consulta con el origen de la consulta anterior, pero eso solo dio las mismas columnas limitadas que anteriormente.

¿Es que necesito enumerar todas las columnas aquí:

Source : Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WKi3K0Tc0MlSUXJ0ctaFsHwSk1JzFAyBlOf83IL8vNS8EiAvVod41UZw1cZGhlDVEBZETREOs7GrNibJbFzui ygqqGsHC4BYJS", BinaryEncoding.Base64), Compression.Deflate)),

let _t á ((tipo de texto que acepta valores NULL) meta [Serialized.Text ? true]) en la tabla de tipos ['URL de ticket' ''_t'URL de ticket'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''_t _t _t''''''''''''''

Hola

Puede descargar mi archivo PBI desde aquí.

Espero que esto ayude.


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/

@Ashish_Mathur muchas gracias por su ayuda continua. Cuando ejecuto tu archivo obtengo un duplicado del ticket 3340, ¿verdad?

También (y lo siento si se trata de una pregunta realmente novato) - ¿cómo modifico correctamente la fuente para que apunte a mi consulta

powerbi.png

Al ejecutar esto, se produce un error 'Expression.Error: el nombre '_t' no se ha reconocido. Asegúrese de que está escrito correctamente.' en la etapa de origen y en la etapa de cambio de tipo y error 'Expression.Error: No podemos convertir un valor de tipo Table al tipo List.
Detalles:
Valor[Tabla]
Tipo [Tipo]'

Hola

De nada. las filas 334o aparecen dos veces debido a diferentes entradas en la columna Resumen. Una vez que los haces iguales, la fila duplicada desaparece. Ver la imagen

Untitled.png


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/

@Ashish_Mathur muchas gracias! ¿Y puede aconsejar cómo intercambiar el origen a la consulta que se muestra en la imagen?

powerbi.png

Sólo reemplaza el nombre allí.


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/

OK, así que desde el PBIX que proporcionó la fuente es:

Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("1dVPb4IwGAbwr9JwncDbliJwm3+ybNnUCDsZD81stBkWA2Xbx1/Rzc2o4bAtqxf6AqH55cmTMps5K603VeL7Rb3hS5kLj+ucV5XkylNC+6WotM830s+5bkZZVbXwMcUx7jodZzhJXUpDZsZevdw9MFcCBFwMLsEZDhOgCSVe3MVXgAHM6wexkPXaDKrO868lK9Cg2O2BetePZppMxwPkogl1EbophVBIizeNnHnHWnh/mP4RPKJ4Dw8aTcar52M5ZDhIaDeh1IuBfsrvi9eGVRYLs9wVK2WWQaHEQdy3oz6GGCAg/y5NRfkin8Roe9PqpT/iMgj3XHKuEZg1jWBRgokXRdFRIz6iTXnJVye73GCx+ch8ZjN2198LwY6nPcuwB729jDK0ku2rRCv5V4tBArYnQ3yOTDIMCTOnWehBSE6eu2f/c1soMLO9tdBvidoAPWiA/bm2cS1LVyotyrXUWih9Efm2g48Tnr8D", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Ticket URL" = _t, #"Ticket Number" = _t, #"Ticket Type" = _t, #"JIRA Project (?)" = _t, #"Created Date" = _t, Priority = _t, Labels = _t, Assignee = _t, Status = _t, Components = _t, Summary = _t]),

Basado en esto y la documentación que he modificado para:

Origen: Table.FromRows((('EPS BAU (2)''URL de entrada' ' _t', ''Número de ticket' '_t'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''"Tipo de ticket" , _t, "Proyecto JIRA (?)" , _t, "Fecha de creación" , _t, "Prioridad_t, "Etiquetas" _t, "Asignado" , _t, "Estado" _t, Componentes, _t, " Resumen, _t) y " _t), "Estado"

Pero obtengo un error de sintaxis 'Token, coma esperada' en 'como tabla),'

Mi comprensión de los documentos es que la función FromRows toma una lista (¿asumir matriz?) pero no puedo encontrar la manera de obtener esta lista de 'EPS BAU (2)'

Hola

No creo que pueda ayudarte más allá de esto. Un último intento sería copiar todas las líneas (después de la línea de código fuente) en el código M de mi solución y pegarlas después de la línea de origen de la tabla EPS BAU (2). Las ortografías (incluidas las mayúsculas y minúsculas de los encabezados en el tabel EPS BAU (2) deben ser las mismas que en mi tabla).

Espero que esto ayude.


Regards,
Ashish Mathur
http://www.ashishmathur.com
https://www.linkedin.com/in/excelenthusiasts/

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.