Cuando tenemos que aplicar expresiones distintas en función
del valor que tome una dimensión, podemos hacerlo de varias formas.
Ej: If (dimension =1, expr1,
If (dimension=2,
exp2,
If (dimension=3,
exp3,
If (dimension=x,
exprx))))
1) Usando
la función PICK(). Esto sólo lo haremos cuando los valores de la dimensión sean
números naturales.
Pick(dimensión,
expr1, expr2, expr3……exprx)
Una forma rápida de crear esta
función pick es hacerlo dinámicamente usando CONCAT() en lugar de escribir una
función larguísima que contenga todas las expresiones. Así mejoramos el
mantenimiento y la legibilidad.
Para hacerlo, hay que meter
todas las expresiones en un campo en una isla de datos. El origen puede ser un
inline, una Excel o un fichero de texto. Lo único que hay que tener en cuenta
es que deben estar ordenadas según el valor de la dimensión y el orden que
ocuparán en la función PICK().
Ejemplo: Imaginemos que
tenemos una dimensión “Dim_x” con los valores 1, 2 y 3 y que según el valor que
tome se aplique una expresión u otra: Para el valor 1 hará la suma del campo1,
para el valor 2 hará la media y para el valor 3 obtendrá la moda.
Tenemos este inline:
ISLA_DATOS:
LOAD * INLINE [
Orden, Expresion
1,
SUM(campo1)
2, AVG(campo1)
3, MODE(campo1)
];
En las expresiones de gráficos
u objetos sustituiremos los if anidados por esta única expresión:
PICK(Dim_x, $(=CONCAT(Expresion, ’,’ ,Orden)))
Observad que los argumentos de
CONCAT son las columnas del INLINE
2) Con
expansión del signo $. De esta forma los valores de la dimensión no tienen por
qué ser numéricos.
A diferencia del ejemplo 1 en el que las
diferentes expresiones se introducían en un campo de una isla de datos cuyo
origen era un inline, un Excel o cualquier otra fuente, aquí crearemos una
variable por cada expresión.
El nombre de cada variable
debe tener un formato muy concreto: una raíz común + cada valor posible de la
dimensión:
Ejemplo
1: Suponiendo que tenemos una dimensión “Dim_x” con los valores 1, 2 y 3
Creamos
las variables:
SET Var_1
= SUM(campo1);
SET Var_2
= AVG(campo1);
SET Var_3
= MODE(campo1);
Ejemplo
2: Suponiendo que la dimensión “Dim_x” tenga los valores Madrid, Málaga y
Bilbao
Creamos
las variables
SET Var_Madrid = SUM(campo1);
SET Var_Málaga
= SUM(Campo1*0,05);
SET Var_Bilbao = SUM(campo1*0,02);
En los objetos sustituimos los if anidados por
esta expresión:
=$(='Var_'&ONLY(Dim_x))
3) Usando la función ALT().
ALT(
IF(Dim_x=’Madrid’, SUM(campo1)),
IF(Dim_x=’Málaga’, SUM(Campo1*0,05)),
IF(Dim_x=’Bilbao’, SUM(campo1*0,02)),
0
);
3) Usando la función ALT().
Esta
opción es la menos recomendable porque se ejecuta casi igual que los IF
anidados, pero al menos facilita la lectura y comprensión de la expresión.
Se debe usar sólo cuando no se puedan evitar los IF anidados, como por ejemplo en el Script.
Sólo funciona cuando los valores devueltos son números. No funciona si devuelve cadenas de caracteres.
Sólo funciona cuando los valores devueltos son números. No funciona si devuelve cadenas de caracteres.
Usando
el ejemplo 2, lo podemos transformar por:
ALT(
IF(Dim_x=’Madrid’, SUM(campo1)),
IF(Dim_x=’Málaga’, SUM(Campo1*0,05)),
IF(Dim_x=’Bilbao’, SUM(campo1*0,02)),
0
);
No hay comentarios:
Publicar un comentario