The importance of Only()
Only() devuelve un valor si solo hay un valor posible en el grupo. Este valor será el resultado de la agregación. Qlik Sense recurre a Only() de forma predeterminada si no se especifica una función de agregación.
Si hay una relación de uno a uno entre la dimensión del gráfico y el parámetro, la función Only() devuelve el único valor posible. Si hay varios valores, devuelve NULL. Por ejemplo, buscar el único producto en el que el precio por unidad sea 12 devolverá NULL si más de un producto tiene un precio por unidad de 12.
Las imágenes siguientes muestran la diferencia entre las relaciones de uno a uno y uno a muchos:
La función Only() es una función de agregación. Utiliza muchos registros como entrada y devuelve un solo valor, de manera similar a Sum() o Count(). Qlik Sense utiliza agregaciones en prácticamente todos sus cálculos. La expresión en un gráfico, en una expresión de ordenación, en un cuadro de texto, en una búsqueda avanzada y en una etiqueta calculada son todas agregaciones y no se pueden calcular sin introducir una función de agregación.
Pero, ¿qué sucede si un usuario inserta una expresión que carece de una función de agregación explícita? Por ejemplo, si la expresión de ordenación está establecida en Date? O si hay una búsqueda avanzada de clientes que han comprado cerveza y vino utilizando la expresión =[Tipo de producto]='Cerveza y vino'?
Aquí es donde la función Only() afecta al cálculo. Si no hay una función de agregación explícita en la expresión, Qlik Sense utiliza la función Only() de manera implícita. En los casos anteriores, Only(Date) se utiliza como expresión de ordenación y Only([Product Type])="Beer and Wine" como criterio de búsqueda.
A veces, la nueva expresión devuelve un resultado que el usuario no espera. Los dos ejemplos anteriores funcionarán bien cuando solo haya un posible valor de Date o Product Type, pero ninguno de ellos funcionará para los casos en que haya más de un valor.
Diferentes expresiones con Only()
Crearemos cuatro KPI con expresiones similares. De esta manera, podemos comparar cómo tener referencias de campo desnudo o tener Only() en una posición diferente en nuestra expresión puede tener un gran impacto en los resultados de su selección.
Dentro de la app, en la hoja Importance of Only() encontrará un panel de filtrado con la dimensión Invoice Date.
Haga lo siguiente:
- Cree un KPI.
- Haga clic en Añadir medida. Haga clic en el símbolo .
Se abre el editor de expresiones. - Escriba lo siguiente: Month([Invoice Date])
- Cree tres KPIs más con las medidas: Month(Only([Invoice Date])), Month(Max([Invoice Date])) y Only(Month([Invoice Date])).
- Haga clic en Aplicar.
Cuando tiene una referencia a un campo desnudo, la función Only() se inserta en el nivel más bajo. Eso significa que los dos primeros KPI, Month([Invoice Date]) y Month(Only([Invoice Date])) se interpretarán igual y siempre darán el mismo resultado.
Como puede ver tres de los cuatro KPI devuelven NULL. El cuarto KPI, Month(Max([Invoice Date])), ya devuelve un valor, aunque no se haya realizado ninguna selección.
Cuando escriba expresiones, siempre debe preguntarse qué agregación desea usar o qué valor desea usar si hay varios valores. Si desea usar NULL para representar varios valores, puede dejar la expresión como está. Para los números, probablemente quiera usar Sum(), Avg(), Min() o Max() en su lugar. Para las cadenas de texto probablemente desee usar Only() o MinString().
Haga lo siguiente:
- Detenga la edición de la hoja.
- En el panel de filtrado, seleccione la fecha en el mes de enero.
- Confirme la selección haciendo clic en .
Cuando se realiza una única selección, todos los KPI devuelven la respuesta correcta. Incluso si la expresión contiene una referencia a un campo desnudo, como la expresión en Month([Invoice Date]), el hecho de que hayamos hecho una selección única le permite devolver el valor adecuado.
Haga lo siguiente:
- En el panel de filtrado seleccione una fecha adicional, en el mes de enero.
- Confirme la selección haciendo clic en .
Los dos primeros KPI devuelven NULL y los otros dos KPI devuelven el valor adecuado de enero. Específicamente, el cuarto KPI devuelve una respuesta correcta porque ambas selecciones de fecha que hicimos son para fechas en enero.
Haga lo siguiente:
- En el panel de filtrado seleccione una fecha adicional, en un mes que no sea enero.
- Confirme la selección haciendo clic en .
Cuando se realizan selecciones múltiples utilizando fechas en diferentes meses, solo el tercer KPI devuelve un valor. Devuelve el valor del mayor mes de la selección realizada, de acuerdo con la expresión Month(Max([Invoice Date])). Como Only() se inserta automáticamente en expresiones con referencias de campo desnudo, no siempre se puede confiar en que el nivel más bajo sea apropiado para su expresión. La colocación de Only() es importante.
Para más información vea Only - función de gráfico.