Saltar al contenido principal Skip to complementary content

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:

Dos tablas, una muestra que Max(Invoice Date) es un único valor y otra muestra que Invoice Date es una matriz de valores.

 Two tables, one showing that Max(Invoice Date) is a single value, and one showing that Invoice Date is an array of values.

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:

  1. Seleccione la tabla disponible titulada Using If() on Invoice dates.
    Se abre el panel de propiedades.
  2. Haga clic en Añadir columna y seleccione Medida.
  3. Haga clic en el símbolo Expression .
    Se abre el editor de expresiones.
  4. Escriba lo siguiente: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
  5. Haga clic en Aplicar.

Tabla que muestra las fechas de factura divididas por una fecha de referencia.

 Table showing invoice dates being split by a reference date.

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:

  1. Seleccione la tabla Sum(Amount) disponible.
    Se abre el panel de propiedades.
  2. Haga clic en Añadir columna y seleccione Medida.
  3. Haga clic en el símbolo Expression .
    Se abre el editor de expresiones.
  4. Escriba lo siguiente: If( [Invoice Date]>= 41323, Sum(Sales) )
  5. Haga clic en Aplicar.

Tabla que muestra el año, la suma de las ventas de cada año y los resultados de la expresión que utiliza la función If().

 Table showing year, sum of sales for each year, and the results of the expression

Nota de sugerenciaMantenga la Etiqueta intacta en las medidas para mostrar las diferencias entre cada expresión. En columnas con valores monetarios cambie el Formato numérico a Moneda y el Patrón de formato a $ #,##0;-$ #,##0.

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:

  1. Haga clic en Añadir columna y seleccione Medida.
  2. Haga clic en el símbolo Expression .
    Se abre el editor de expresiones.
  3. Escriba lo siguiente: If( [Invoice Date]>= Date(41323), Sum(Sales) )
  4. Haga clic en Aplicar.

Tabla que muestra el año, la suma de las ventas de cada año y los resultados de las diferentes expresiones que utilizan la función If().

Table showing year, sum of sales for each year, and the results of the different expressions

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:

  1. Haga clic en Añadir columna y seleccione Medida.
  2. Haga clic en el símbolo Expression .
    Se abre el editor de expresiones.
  3. Escriba lo siguiente: Sum( If([Invoice Date]>= Date(41323), Sales ) )
  4. Haga clic en Aplicar.

Tabla que muestra el año, la suma de las ventas de cada año y los resultados de las diferentes expresiones que utilizan la función If().

Table showing year, sum of sales for each year, and the results of the different expressions

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.