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:
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 '??':
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:
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 ;-)
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:
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
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
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.