Ir para conteúdo principal

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:

Duas tabelas, uma mostrando que Max(Invoice Date) é um valor único e outra mostrando que Invoice Date é uma 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.

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.

  1. Selecione a tabela disponível com o título Using If() on Invoice dates.
    O painel de propriedades é aberto.
  2. Clique em Adicionar coluna e selecione Medida.
  3. Clique no símbolo Expression.
    O editor de expressões é aberto.
  4. Insira o seguinte: If( [Invoice Date]>= Date(41323), 'After', 'Before' )
  5. Clique em Aplicar.

Tabela mostrando datas de faturas divididas por uma data de referência.

 Table showing invoice dates being split by a reference date.

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).

  1. Selecione a tabela Sum(Amount) disponível.
    O painel de propriedades é aberto.
  2. Clique em Adicionar coluna e selecione Medida.
  3. Clique no símbolo Expression.
    O editor de expressões é aberto.
  4. Insira o seguinte: If( [Invoice Date]>= 41323, Sum(Sales) )
  5. Clique em Aplicar.

Tabela mostrando o ano, a soma das vendas de cada ano e os resultados da expressão usando a função If().

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

Dica: Mantenha o Rótulo intacto nas medidas para mostrar as diferenças entre cada expressão. Em colunas com valores monetários, alteramos o Formato numérico para Dinheiro e o Padrão de formato para $ #,##0;-$ #,##0.

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))

  1. Clique em Adicionar coluna e selecione Medida.
  2. Clique no símbolo Expression.
    O editor de expressões é aberto.
  3. Insira o seguinte: If( [Invoice Date]>= Date(41323), Sum(Sales) )
  4. Clique em Aplicar.

Tabela mostrando o ano, a soma das vendas de cada ano e os resultados das diferentes expressões usando a função If().

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

Como alternativa, a função If() pode ser colocada dentro da função Sum():

Sum(If([Invoice Date]>= Date(41323), Sales) )

  1. Clique em Adicionar coluna e selecione Medida.
  2. Clique no símbolo Expression.
    O editor de expressões é aberto.
  3. Insira o seguinte: Sum( If([Invoice Date]>= Date(41323), Sales ) )
  4. Clique em Aplicar.

Tabela mostrando o ano, a soma das vendas de cada ano e os resultados das diferentes expressões usando a função If().

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

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.