zvm
Hola,
¿Es posible actualizar la columna con Power Query («M») como con el comando de actualización de SQL?
Aquí está la situación:
– una columna es texto libre donde necesito buscar ciertos patrones (1, 2 o 3 diferentes en cada fila)
– la segunda columna es digamos category_code
– el resultado depende de los patrones de texto y el código de categoría
Necesito revisar todas las filas y agruparlas según sus patrones de prueba y categoría_código y asignar algo como código_producto.
La fuente es un archivo de Excel (3 de ellos, pero eso no es importante), no una base de datos. Y la base de datos no se puede utilizar. Por lo tanto, la solución también podría desarrollarse en Excel.
Puedo filtrar filas con Power Query. Se parece a esto:
#"Filtered Rows" = Table.SelectRows(#"Appended Query", each Text.Contains([opis], "70") and Text.Contains([opis], "400") and [šifra] = "A" or Text.Contains([opis], "25") and [šifra] = "C" or Text.Contains([opis], "500") and Text.Contains([opis], "60") and [šifra] = "B" or Text.Contains([opis], "0,7") and [šifra] = "A")
El pseudocódigo sería:
si la columna ‘descripción’ contiene «70» y contiene «400» y la columna cat_code = «A», entonces prod_code = A5
si la columna ‘descripción’ contiene «25» y la columna cat_code = «B», entonces prod_code = B2
si la columna ‘descripción’ contiene «agg» y contiene «40» y la columna cat_code = «A», entonces prod_code = A2
…
O actualización de SQL:
actualizar tabla
establecer prod_code = «A5»
donde descripción como «%70%» y descripción como «%400%»
y código_gato = «A»
Y necesito aproximadamente cien combinaciones diferentes para verificar y actualizar.
¿Hay alguna solución para esto sin SQL, es decir. dentro de Excel, Power Query?
v-yulgu-msft
En respuesta a zvm
Hola @zvm,
Si no existe [prod_code] campo en la tabla de origen y está intentando insertar uno nuevo, agregue una columna personalizada como esta:
=if Text.Contains(https://community.powerbi.com/t5/Desktop/Power-Query-update-column/m-p/459711 ,"70") and Text.Contains(https://community.powerbi.com/t5/Desktop/Power-Query-update-column/m-p/459711 ,"400") and [cat_code]="A" then "A5" else if Text.Contains(https://community.powerbi.com/t5/Desktop/Power-Query-update-column/m-p/459711 ,"agg") and Text.Contains(https://community.powerbi.com/t5/Desktop/Power-Query-update-column/m-p/459711 ,"40") and [cat_code]="A" then "A2" else if Text.Contains(https://community.powerbi.com/t5/Desktop/Power-Query-update-column/m-p/459711 ,"25") and [cat_code]="B" then "B2" else " "
Si ya existe un existente [prod_code] y desea actualizar su valor con los números de producto correctos, agregue un paso adicional basado en el cambio anterior.
#"Replaced Value" = Table.ReplaceValue(#"Added Custom",each [prod_code], each [Custom] , Replacer.ReplaceText,{"prod_code"})
Atentamente,
Yuliana Gu
eljeswar
Hola @zvm,
Power Query le da la opción de crear una columna personalizada que puede tener declaraciones if en ella.
¿Probaste eso…?
Pero cuando dice que hay 100 combinaciones similares para reemplazar, deberíamos buscar algo mejor que una instrucción IF o un comando de actualización.
¿Puede decirme si la columna ‘descripción’ tendrá un número distinto de entradas? o ¿Puede tener cualquier número de nuevas entradas que se agreguen con frecuencia a la columna de descripción?
zvm
En respuesta a eljeswar
Hola,
La columna personalizada y las declaraciones If disponibles son bastante simples y no pueden resolver esto. SI solo puede tener una condición y necesito 2 o más columnas diferentes.
No es «reemplazar», necesito crear o llenar otra columna basada en los valores de esos dos: descripción y cat_code.
La descripción puede tener cualquier número de entradas. normalmente tiene varios miles. Y estoy interesado en unas cien combinaciones. Pero esas cien combinaciones pueden ocurrir en varios cientos de registros. Por ejemplo:
«Botella 400 ml, 50 mg»
y
«Bot. 400ml,50mg»
ambos son completos válidos que describen el mismo producto y ambos deben obtener el mismo prod_code. Busco «400» y «50», por ejemplo, para filtrarlos. Pero, ¿cómo puedo asignar prod_code programáticamente?
v-yulgu-msft
En respuesta a zvm
Hola @zvm,
Si no existe [prod_code] campo en la tabla de origen y está intentando insertar uno nuevo, agregue una columna personalizada como esta:
=if Text.Contains(https://community.powerbi.com/t5/Desktop/Power-Query-update-column/m-p/459711 ,"70") and Text.Contains(https://community.powerbi.com/t5/Desktop/Power-Query-update-column/m-p/459711 ,"400") and [cat_code]="A" then "A5" else if Text.Contains(https://community.powerbi.com/t5/Desktop/Power-Query-update-column/m-p/459711 ,"agg") and Text.Contains(https://community.powerbi.com/t5/Desktop/Power-Query-update-column/m-p/459711 ,"40") and [cat_code]="A" then "A2" else if Text.Contains(https://community.powerbi.com/t5/Desktop/Power-Query-update-column/m-p/459711 ,"25") and [cat_code]="B" then "B2" else " "
Si ya existe un existente [prod_code] y desea actualizar su valor con los números de producto correctos, agregue un paso adicional basado en el cambio anterior.
#"Replaced Value" = Table.ReplaceValue(#"Added Custom",each [prod_code], each [Custom] , Replacer.ReplaceText,{"prod_code"})
Atentamente,
Yuliana Gu
zvm
En respuesta a v-yulgu-msft
Hola Yuliana,
¡Gracias! Eso es.
Todo es claro y sencillo. De hecho, estaba pensando que ese es el camino a seguir a través de «if-else if». Pero no conocía la sintaxis M adecuada.
¡salud!