cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Resolver III
Resolver III

¡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
Super User III
Super User III

@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
Super User III
Super User III

@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!



Super User III
Super User III

@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!



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

Super User III
Super User III

@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!



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

Super User III
Super User III

@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

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?

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

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

Super User IV
Super User IV

@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")



Did I answer your question? Mark my post as a solution! Appreciate your Kudos!!
Dashboard of My Blogs !! YouTube Channel !! Connect on Linkedin

Proud to be a Super User!

Helpful resources

Announcements
secondImage

Congratulations!

We are excited to announce the Power BI Super Users!

Microsoft Ignite

Microsoft Ignite

Join digitally, March 2–4, 2021 to explore new tech that's ready to implement. Experience the keynote in mixed reality through AltspaceVR!

secondImage

The largest Power BI virtual conference

100+ sessions, 100+ speakers, Product managers, MVPs, and experts. All about Power BI. Attend online or watch the recordings.

Top Kudoed Authors