Hace tiempo no escribíamos un tip en M. Recientemente, me comentaron que querían hacer varios reemplazos de texto por nro para generar una columna de ID y mejorar la relación para que sea más liviana. Un buen ejercicio para alivianar el modelo.
Recorde que había escrito un post al inicio del blog con múltiples reemplazos, pero quise probar una técnica que aprendí hace unos años y hoy voy a compartir aqui.
Este artículo mostrará lo más parecido que tenemos en power query para generar algo estilo case o switch.
Para poder generar un case en Power Query vamos a realizar algo similar a un archivo de formato json. Veamos el caso simplificado.
Contamos con una tabla de hechos que traía el estado de una operación en texto y tenemos una dimension de estados. Sin embargo para reducir el tamaño de la relación y buena práctica, sería mejor que la relación este dada por un entero y no texto.

Vamos a asumir que la operación no puede desarrollarse en base de datos, porque recordemos que "mientras más temprano o atrás podamos resolver data modeling mejor será". Este escenario esta a modo de ejemplo.
Conociendo los estados y sus ID podríamos crear una función que reemplace el texto por el número esperado bajo una condición.
El primer paso será generar una variable que tenga las opciones de reemplazo

El primer valor será el que queremos encontrar y el segundo el que reemplazaremos. Podríamos definir que es una lista de listas, puesto que los {} en Power Query representan listas.
Para pode ejecutar el reemplazo sobre un texto seguiremos con la siguiente indicación:

De ese modo selecciona una lista devolviendo el primer resultado {0} quiere el segundo item {1}. Para filtrar ese item haremos un contains de texto de "rawText" validando contra cada fila (haciendo un each validamos fila por fila) donde _ representa una lista de las recorridas y {0} el primer item de la fila al cual lo compara.
Para mejor desarrollo esto podemos englobarlo en una función que recibe el texto por parametro y llamaremos "ChageStatus"

Para ejecutarlo en nuestra tabla de operación podemos llamarlo de dos maneras. Por un lado con "Agregar columna personalizada". La nueva columna simplemente haría ChangeStatus([Estado]).
Si queremos reemplazar la columna existente con sus múltiples reemplazos, entonces agregaremos un paso personalizado con el botón fx.
Nos nutriremos de TransformColumns y generaremos un código de este estilo:
= Table.TransformColumns(
#"Paso anterior",
{ { "Estado", each ChangeStatus(_) } }
)
El método permite ejecutar varias funciones recorriendo fila a fila sobre una columna. De nuevo una lista de listas. En nuestro caso es una sola operación de lista en la listas. Para ello, definimos la columna Estado como la involucrada al reemplazo y llamamos la función con each. Each nos permite ir fila a fila capturando el record de la columna con "_". Por esta razón, lo colocamos como parámetro.
De esa forma reemplazaremos nuestros textos por números de texto. Solo restará cambiar el tipo de la columna a entero para reducir el tamaño de la relación cuando esta generado el modelo.
Espero que este pequeño tip les haya servido y despligue nuevas ideas sobre Power Query y su manejo de listas.