Referencias de campo desnudo
Un campo se considera desnudo cuando no está incluido en una función de agregación.
Una referencia de campo desnudo es una matriz que posiblemente contiene varios valores. Qlik Sense al no saber cuál de estos valores quiere, lo evaluará como NULL.
Utilice siempre una función de agregación en su expresión
Si encuentra que su expresión no se evalúa correctamente, existe una alta probabilidad de que no tenga una función de agregación.
Una referencia de campo en una expresión es una matriz de valores. Por ejemplo:
Debe incluir el campo Invoice Date (Fecha de factura) en una función de agregación para que se contraiga en un solo valor.
Si no utiliza una función de agregación en su expresión, Qlik Sense usará de manera predeterminada la función Only(). Si la referencia de campo devuelve varios valores, Qlik Sense lo interpretará como NULL.
Dividir las fechas de una factura utilizando la función If()
La función If() se utiliza a menudo para agregaciones condicionales. Devuelve un valor dependiendo de si la condición proporcionada dentro de la función se evalúa como Verdadero o Falso.
Dentro de la app, en la hoja Naked field references hallará una tabla titulada Using If() on Invoice dates.
Haga lo siguiente:
- Seleccione la tabla disponible titulada Using If() on Invoice dates.
Se abre el panel de propiedades. - Haga clic en Añadir columna y seleccione Medida.
- Haga clic en el símbolo .
Se abre el editor de expresiones. - Inserte lo siguiente: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
- Haga clic en Aplicar.
Esta expresión prueba si la fecha de factura Invoice Date es anterior a la fecha de referencia 2/18/2013 y devuelve 'Before' si lo es. Si la fecha es posterior o igual a la fecha de referencia 2/18/2013, devuelve 'After' . La fecha de referencia se expresa mediante el número entero 41323.
Para más información vea if - función de script y de gráfico
Evitar las referencias de campos desnudos
A primera vista, esta expresión parece correcta:
If([Invoice Date]>= Date(41323) 'After', 'Before')
Debería evaluar las fechas de la factura después de la fecha de referencia y devolver 'After' o si no devolver 'Before'. Sin embargo, Invoice Date es una referencia a un campo desnudo, no tiene una función de agregación y, como tal, es una matriz con varios valores y devolverá NULL. En el ejemplo anterior solo hay una Invoice Date por valor de Date en nuestra tabla, por lo que la expresión se calcula bien.
Veamos ahora cómo se calcula una expresión similar con un valor dimensional diferente y cómo resolver los problemas de referencia de campo desnudo que surgen:
Evitar las referencias de campo desnudo en una función If()
Usaremos una expresión similar a la anterior:
If([Invoice Date]>= Date(41323), Sum(Sales))
Esta vez, la función suma las ventas posteriores a la fecha de referencia.
Dentro de la app, en la hoja Naked field references hallará una tabla titulada Sum(Amount).
Haga lo siguiente:
- Seleccione la tabla Sum(Amount) disponible.
Se abre el panel de propiedades. - Haga clic en Añadir columna y seleccione Medida.
- Haga clic en el símbolo .
Se abre el editor de expresiones. - Inserte lo siguiente: If( [Invoice Date]>= 41323, Sum(Sales) )
- Haga clic en Aplicar.
Para cada año hay una matriz de fechas de factura que son posteriores a la fecha de referencia. Como nuestra expresión carece de una función de agregación, devuelve NULL. Una expresión correcta debería usar una función de agregación como Min() o Max() en el primer parámetro de la función If():
If(Max([Invoice Date])>= Date(41323), Sum(Sales))
Haga lo siguiente:
- Haga clic en Añadir columna y seleccione Medida.
- Haga clic en el símbolo .
Se abre el editor de expresiones. - Inserte lo siguiente: If( [Invoice Date]>= Date(41323), Sum(Sales) )
- Haga clic en Aplicar.
De manera alternativa se puede incluir la función If() dentro de la función Sum():
Sum(If([Invoice Date]>= Date(41323), Sales) )
Haga lo siguiente:
- Haga clic en Añadir columna y seleccione Medida.
- Haga clic en el símbolo .
Se abre el editor de expresiones. - Inserte lo siguiente: Sum( If([Invoice Date]>= Date(41323), Sales ) )
- Haga clic en Aplicar.
En la penúltima expresión, la función If() se evaluó una vez por valor dimensional. En la última expresión, se evalúa una vez por fila en los datos sin procesar. La diferencia en cómo se evalúa la función hace que los resultados sean diferentes, pero ambos devuelven una respuesta. La primera expresión simplemente devuelve NULL. La imagen superior muestra la diferencia entre las expresiones, usando 18/02/2013 como la fecha de referencia.