jueves, 5 de enero de 2023

Power Query: Operador de fusión -??-(COALESCE)

Seguramente estés acostumbrado a 'luchar' contra los valores null empleado sentencias condicionales de control (if... then...else...).
Sin duda un método sencillo y fácil de gestionar... Pero, ¿conoces el operador de fusión '??' ?.
Este operador devuelve el resultado de su operando izquierdo si no es Null; en caso contrario, tednremos como resultado el valor de su operando derecho.
Esto es, el operando derecho solo se evalúa si el operando izquierdo es NULL.

En otros lenguajes este operador-función es conocida como COLAESCE, que retorna a la primera expresión no nula entre sus argumentos.

Veamos algunos ejemplos de uso...
Supongamos que partimos de una tabla como la siguiente:
Power Query: Operador de fusión -??-(COALESCE)


La idea es calcular el cociente entre 'Habitantes' y 'Km2' para conocer la densidad de población (Nota: Son datos aleatorios!!!)

La forma clásica sería agregar una nueva columna condicional para evitar el nulo en los casos de no disponer valores sería la 'Opción1', comparada con otra empleando '??':
let
    Origen = Excel.CurrentWorkbook(){[Name="TblDATOS"]}[Content],

    //Opción 1
    //Doble condicional para controlar los nulos en las columnas implicadas
    CondicionalEstandar=Table.AddColumn(
                    Origen,
                    "Densidad1", 
                    each if [Km2]=null then 0 else 
                        if [Habitantes]=null then 0 else [Habitantes]/[Km2]),
    
    //Opción 2
    //Usando el operador de fusión para en caso de devolver nulo
    //cambiarlo por 0
    Coalesce=Table.AddColumn(
                CondicionalEstandar,
                "Densidad2",
                each [Habitantes]/[Km2]??0 )
in
    Coalesce

Power Query: Operador de fusión -??-(COALESCE)


Vemos que el resultado es equivalente... aunque más directo a la hora de escribir el código.

Otro ejemplo, donde tenemos dos columnas con valores.. y en algunos registros falta información.
Un código alternativo:
let
    Origen = Excel.CurrentWorkbook(){[Name="TblDATOS"]}[Content],

    CondicionalEstandar = Table.AddColumn(
                Origen, 
                "UltimoDatoPIB_2021_2022_v1", 
                each if [PIB_2022]<>null then [PIB_2022] else 
                    if [PIB_2021]<>null then [PIB_2021] else 0),

     Coalesce=Table.AddColumn(
                CondicionalEstandar,
                "UltimoDatoPIB_2021_2022_v2",
                each [PIB_2022]??[PIB_2021]??0)

in
    Coalesce

Power Query: Operador de fusión -??-(COALESCE)

Ejemplo donde se ha aplicado un doble operador de fusión -'??'-, dando doble solución al problema.
La lectura de
[PIB_2022]??[PIB_2021]??0
sería:
Nos quedamos con el dato de [PIB_2022] si es NO nulo; si lo fuera ,evaluaríamos [PIB_2021] con igual criterio, en caso de que [PIB_2021] fuera NO nulo nos quedaríamos con este valor... y si no lo fuera retornaríamos el valor dado 'cero'.

La simpleza y elegancia de este operador no debería pasar desapercibida ;-)

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.