Power Query – columna de actualización

Un usuario Pregunto ✅

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?

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

1 PNG

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

2 PNG

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?

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

1 PNG

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

2 PNG

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!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *