The importance of Only()
O Only() retornará um valor se houver apenas um valor possível no grupo. Esse valor será o resultado da agregação. Qlik Sense assumirá Only() como padrão se nenhuma função de agregação for especificada.
Se houver um relacionamento de um para um entre a dimensão de gráfico e o parâmetro, a função Only() retornará o único valor possível. Se houver vários valores, ela retornará NULL. Por exemplo, procurar o único produto em que o preço unitário =12 retornará NULL se mais de um produto tiver um preço unitário de 12.
As imagens a seguir mostram a diferença entre os relacionamentos de um para um e de um para muitos:
A função Only() é uma função de agregação. Ela usa muitos registros como entrada e retorna apenas um valor, de maneira semelhante a Sum() ou Count(). Qlik Sense usa agregações em praticamente todos os seus cálculos. As expressões em um gráfico, em uma expressão de classificação, em uma caixa de texto, em uma pesquisa avançada e em um rótulo calculado são todas agregações e não podem ser calculadas sem envolver uma função de agregação.
Mas, e se um usuário inserir uma expressão que não possui uma função de agregação explícita? Por exemplo, se a expressão de classificação estiver definida como Date? Ou se houver uma pesquisa avançada para procurar clientes que compraram produtos de cerveja e vinho usando a expressão =[Product Type]='Cerveja e Vinho'?
É aqui que a função Only() afeta o cálculo. Se não houver uma função de agregação explícita na expressão, o Qlik Sense usará a função Only() implicitamente. Nos casos acima, Only(Date) é usado como expressão de classificação e Only([Product Type])='Beer and Wine' é usado como critério de pesquisa.
Às vezes, a nova expressão retorna um resultado não esperado pelo usuário. Ambos os exemplos acima funcionarão bem quando houver apenas um valor possível de Date ou Product Type, mas nenhum deles funcionará nos casos em que houver mais de um valor.
Expressões diferentes usando Only()
Criaremos quatro KPIs com expressões semelhantes. Dessa forma, podemos comparar como ter referências de campo descobertas ou ter Only() em uma posição diferente na nossa expressão pode exercer um grande impacto sobre os resultados da seleção.
Dentro do aplicativo, na pasta Importance of Only(), você encontrará um painel de filtro com Invoice Date como dimensão.
Faça o seguinte:
- Crie um KPI.
- Clique em Adicionar medida. Clique no símbolo .
O editor de expressões é aberto. - Insira o seguinte: Month([Invoice Date])
- Crie mais três KPIss com as medidas: Month(Only([Invoice Date])), Month(Max([Invoice Date])) e Only(Month([Invoice Date])).
- Clique em Aplicar.
Quando você tem uma referência de campo descoberta, a função Only() é inserida no nível mais baixo. Isso significa que os dois primeiros KPIs, Month([Invoice Date]) e Month(Only([Invoice Date])), serão interpretados da mesma forma e sempre gerarão o mesmo resultado.
Como você pode ver, três dos quatro KPIs retornam NULL. O terceiro KPI, Month(Max([Invoice Date])), já retorna um valor, mesmo que nenhuma seleção tenha sido feita.
Ao escrever expressões, você deve sempre se perguntar qual agregação deseja usar ou qual valor deseja usar se houver vários valores. Se quiser usar NULL para representar vários valores, deixe a expressão como está. Para números, é preferível usar Sum(), Avg(), Min() ou Max(). Para sequências de caracteres, convém usar Only() ou MinString().
Faça o seguinte:
- Pare de editar a pasta.
- No painel de filtro, selecione a data no mês de janeiro.
- Confirme a seleção clicando em .
Quando uma única seleção é feita, todos os KPIs retornam a resposta correta. Mesmo que a expressão contenha uma referência de campo descoberta, como a expressão em Month([Invoice Date]), o fato de termos feito uma seleção exclusiva permite que ela retorne o valor adequado.
Faça o seguinte:
- No painel de filtro, selecione uma data adicional no mês de janeiro.
- Confirme a seleção clicando em .
Os dois primeiros KPIs retornam NULL, e os outros dois KPI retornam o valor adequado de janeiro. Especificamente, o quarto KPI retorna uma resposta correta, pois ambas as seleções de datas que fizemos são para datas em janeiro.
Faça o seguinte:
- No painel de filtro, selecione uma data adicional em um mês diferente de janeiro.
- Confirme a seleção clicando em .
Quando várias seleções são feitas usando datas em meses diferentes, apenas o terceiro KPI retorna um valor. Ele retorna o valor do maior mês da seleção feita, conforme a expressão Month(Max([Invoice Date])). Como Only() é inserida automaticamente em expressões com referências de campo descobertas, nem sempre é possível deduzir que o nível mais baixo será apropriado para a sua expressão. O posicionamento de Only() é importante.
Para obter mais informações, consulte Somente - função de gráfico