Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
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:
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:
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í!
No esperar a romper esto fácilmente, pero muy agradecido por cualquier ayuda!
Solved! Go to Solution.
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"
Compruebe el archivo adjunto.
Creo que vale la pena probar esta función.
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.
Final q - ¿Sabes si Table.Buffer podría acelerar esto en cualquier lugar
También puede combinar los valores y mostrarlos como:
Producto A a "x, y"
Producto B á "w,z"
¿En la tabla de sinónimos? Si es así, no sabría cómo estructurar el paso Text.Contains
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"
Compruebe el archivo adjunto.
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
@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")