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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Anonymous
Not applicable

¡Desafío Power Query! "For loop" entre dos tablas para que coincida con las cadenas y agregar columnas

Necesito la ayuda de un experto de Power Query para crear una lógica de bucle como parte de la preparación de un conjunto de datos de ventas

Mis tablas de entrada son:

  1. sinónimos de producto - los diversos nombres utilizados por el equipo de ventas para hablar de los productos (en mi ejemplo a continuación hay 3 productos con varios sinónimos

  2. llamadas de ventas - cada registro es una llamada con notas que me gustaría escanear para categorizar la actividad de ventas con respecto a los 3 productos, haciendo coincidir las notas de llamada con la lista de sinónimos

Mi tabla de salida sería esencialmente la tabla de llamadas de ventas con una columna adicional por producto,en cada una de las cuales el valor de fila reflejaría si el producto se mencionó en las notas de llamada:

for loop.PNG

Con Text.Contains un Table.AddColumn, he creado la lógica de coincidencia con la que puedo crear una nueva columna para un producto específico. Ahora podría replicar ese código M para cada producto - sin embargo, lo ideal sería simplemente recorrer las columnas de la tabla de productos y replicar la lógica Text.Contains y Table.AddColumn para cada producto.

Estoy seguro de que esto es posible, aunque como un nuevo aprendiz, es un poco más allá de mí!

matching.PNG

No esperar a romper esto fácilmente, pero muy agradecido por cualquier ayuda!

1 ACCEPTED SOLUTION
camargos88
Community Champion
Community Champion

@charliedata ,

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQwVNJRMjIwMjA0MjIFMoML8rNTFRKT8ktLFJzyKxQS81IUnDKzU5VidUCqjXCrdk4sAisyQjbSDK4oPCM1NacYbJ5zUWIJ0MBYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Call ID" = _t, #"Call Date" = _t, #"Call notes" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Call ID", Int64.Type}, {"Call Date", Int64.Type}, {"Call notes", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "ProductTable", each let _text = [Call notes] in
Table.PromoteHeaders(
Table.Transpose(
Table.RemoveColumns(
Table.AddColumn(
Table.SelectRows(
   #"Product Synonyms",
   each Text.Contains( _text, [Value])),
   "Text", each "Yes"),
   "Value")))),
    #"Expanded ProductTable" = Table.ExpandTableColumn(#"Added Custom", "ProductTable", Table.ColumnNames(Table.Combine(#"Added Custom"[ProductTable])))
in
    #"Expanded ProductTable"

Capture.PNG

Compruebe el archivo adjunto.



Did I answer your question? Mark my post as a solution!

Proud to be a Super User!



View solution in original post

10 REPLIES 10
camargos88
Community Champion
Community Champion

@charliedata ,

Creo que vale la pena probar esta función.



Did I answer your question? Mark my post as a solution!

Proud to be a Super User!



camargos88
Community Champion
Community Champion

@charliedata ,

Lo siento, he entendido mal lo que dijiste.

Una vez que no es necesario mostrar la palabra (sólo sí), Table.Distinct es la mejor opción.



Did I answer your question? Mark my post as a solution!

Proud to be a Super User!



Anonymous
Not applicable

Final q - ¿Sabes si Table.Buffer podría acelerar esto en cualquier lugar

camargos88
Community Champion
Community Champion

@charliedata ,

También puede combinar los valores y mostrarlos como:

Producto A a "x, y"

Producto B á "w,z"



Did I answer your question? Mark my post as a solution!

Proud to be a Super User!



Anonymous
Not applicable

¿En la tabla de sinónimos? Si es así, no sabría cómo estructurar el paso Text.Contains

camargos88
Community Champion
Community Champion

@charliedata ,

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQwVNJRMjIwMjA0MjIFMoML8rNTFRKT8ktLFJzyKxQS81IUnDKzU5VidUCqjXCrdk4sAisyQjbSDK4oPCM1NacYbJ5zUWIJ0MBYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Call ID" = _t, #"Call Date" = _t, #"Call notes" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Call ID", Int64.Type}, {"Call Date", Int64.Type}, {"Call notes", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "ProductTable", each let _text = [Call notes] in
Table.PromoteHeaders(
Table.Transpose(
Table.RemoveColumns(
Table.AddColumn(
Table.SelectRows(
   #"Product Synonyms",
   each Text.Contains( _text, [Value])),
   "Text", each "Yes"),
   "Value")))),
    #"Expanded ProductTable" = Table.ExpandTableColumn(#"Added Custom", "ProductTable", Table.ColumnNames(Table.Combine(#"Added Custom"[ProductTable])))
in
    #"Expanded ProductTable"

Capture.PNG

Compruebe el archivo adjunto.



Did I answer your question? Mark my post as a solution!

Proud to be a Super User!



Anonymous
Not applicable

Una pregunta de seguimiento si puedo...

Si la descripción de la llamada incluye más de un sinónimo para un producto, la consulta genera columnas duplicadas, por ejemplo, si incluye tanto "ruedas" como "coche", habrá un producto B_1 en la tabla de salida

¿Algún consejo final sobre cómo tener solo un resultado (es decir, columna) por producto?

Anonymous
Not applicable

Creo que lo tengo - Agregué un Table.Distinct alrededor de la Table.RemoveColumns

Anonymous
Not applicable

@camargos88 ¡¿Cómo hiciste eso tan rápido?! Genio y perfecto - muchas gracias

amitchandak
Super User
Super User

@charliedata , Crear tres columnas como esta en la tabla salescall

Producto A á if(countx(filter(product,search(product[productA],salescall[call notes],,0)>0),product[productA])+0 >0, "Yes", "No")
Producto b á if(countx(filter(product,search(product[productb],salescall[call notes],,0)>0),product[productb])+0 >0, "Yes", "No")
Producto c á if(countx(filter(product,search(product[productc],salescall[call notes],,0)>0),product[productc])+0 >0, "Yes", "No")

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors