Referências de campo descobertas
Um campo é considerado descoberto quando não está incluído em uma função de agregação.
Uma referência de campo descoberta é uma matriz, possivelmente contendo vários valores. Em caso positivo, o Qlik Sense o avaliará como NULL, sem saber qual deles é o valor desejado.
Sempre use uma função de agregação na sua expressão
Se você achar que sua expressão não é avaliada corretamente, há uma grande chance de ela não ter uma função de agregação.
Uma referência de campo em uma expressão é uma matriz de valores. Por exemplo:
Você deve delimitar o campo Data da Fatura em uma função de agregação para fazer com que ele se reduza a um único valor:
Se você não usar uma função de agregação na sua expressão, o Qlik Sense usará a função Only() por padrão. Se a referência de campo retornar vários valores, o Qlik Sense a interpretará como NULL.
Dividindo datas de faturas usando a função If()
A função If() é frequentemente usada para agregações condicionais. Ela retorna um valor dependendo de a condição fornecida na função ser avaliada como True ou False.
Dentro do aplicativo, na pasta Naked field references, você encontrará uma tabela com o título Using If() on Invoice dates.
Faça o seguinte:
- Selecione a tabela disponível com o título Using If() on Invoice dates.
O painel de propriedades é aberto. - Clique em Adicionar coluna e selecione Medida.
- Clique no símbolo .
O editor de expressões é aberto. - Insira o seguinte: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
- Clique em Aplicar.
Essa expressão testa se Invoice Date é anterior à data de referência 18/02/2013 e retorna 'Before' em caso positivo. Se a data for posterior ou igual à data de referência 18/02/2013, 'After' será retornado. A data de referência é expressa como o número inteiro 41323.
Para obter mais informações, consulte if - função de gráfico e script
Evitando referências de campo descobertas
À primeira vista, esta expressão parece correta:
If([Invoice Date]>= Date(41323) 'After', 'Before')
Ela deve avaliar datas de faturas após a data de referência, retornar 'After' ou, caso contrário, retornar 'Before'. Porém, Invoice Date é uma referência de campo descoberta. Ela não possui uma função de agregação e, como tal, é uma matriz com vários valores e será avaliada como NULL. No exemplo anterior, havia apenas um Invoice Date por valor Date na nossa tabela e, portanto, a expressão foi corretamente calculada.
Vejamos como uma expressão semelhante é calculada com um valor dimensional diferente e como resolver o problema de referência de campo descoberta:
Evitando referências de campo descobertas em uma função If()
Usaremos uma expressão semelhante à anterior:
If([Invoice Date]>= Date(41323), Sum(Sales))
Dessa vez, a função soma as vendas após a data de referência.
Dentro do aplicativo, na pasta Naked field references, você encontrará uma tabela com o título Sum(Amount).
Faça o seguinte:
- Selecione a tabela Sum(Amount) disponível.
O painel de propriedades é aberto. - Clique em Adicionar coluna e selecione Medida.
- Clique no símbolo .
O editor de expressões é aberto. - Insira o seguinte: If( [Invoice Date]>= 41323, Sum(Sales) )
- Clique em Aplicar.
Para cada ano, há uma matriz de datas de fatura após a data de referência. Como a nossa expressão não tem uma função de agregação, ela é avaliada como NULL. Uma expressão correta deve usar uma função de agregação, como Min() ou Max(), no primeiro parâmetro da função If():
If(Max([Invoice Date])>= Date(41323), Sum(Sales))
Faça o seguinte:
- Clique em Adicionar coluna e selecione Medida.
- Clique no símbolo .
O editor de expressões é aberto. - Insira o seguinte: If( [Invoice Date]>= Date(41323), Sum(Sales) )
- Clique em Aplicar.
Como alternativa, a função If() pode ser colocada dentro da função Sum():
Sum(If([Invoice Date]>= Date(41323), Sales) )
Faça o seguinte:
- Clique em Adicionar coluna e selecione Medida.
- Clique no símbolo .
O editor de expressões é aberto. - Insira o seguinte: Sum( If([Invoice Date]>= Date(41323), Sales ) )
- Clique em Aplicar.
Na penúltima expressão, a função If() foi avaliada uma vez por valor dimensional. Na última expressão, ela é avaliada uma vez por linha nos dados brutos. A diferença em como a função é avaliada faz com que os resultados sejam diferentes, mas ambos retornam uma resposta. A primeira expressão é simplesmente avaliada como NULL. A imagem acima mostra a diferença entre as expressões, usando 18/02/2013 como data de referência.