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

![Duas tabelas, uma mostrando que Max(Invoice Date) é um valor único e outra mostrando que Invoice Date é uma matriz de valores.](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-nakedfield-table1.png)

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:

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 the Expressão icon.  
   O editor de expressões é aberto.
4. Insira o seguinte: If( [Invoice Date]&gt;= Date(41323), 'After', 'Before' )
5. Clique em Aplicar.

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

![Tabela mostrando datas de faturas divididas por uma data de referência.](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-nakedfield-table2.png)

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](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/if.htm)

## Evitando referências de campo descobertas

À primeira vista, esta expressão parece correta:

If([Invoice Date]&gt;= 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]&gt;= 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:

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 the Expressão icon.  
   O editor de expressões é aberto.
4. Insira o seguinte: If( [Invoice Date]&gt;= 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().

![Tabela mostrando o ano, a soma das vendas de cada ano e os resultados da expressão](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-nakedfield-table3.png)

Nota de dicaMantenha 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])&gt;= Date(41323), Sum(Sales))

Faça o seguinte:

1. Clique em Adicionar coluna e selecione Medida.
2. Clique no símbolo the Expressão icon.  
   O editor de expressões é aberto.
3. Insira o seguinte: If( [Invoice Date]&gt;= 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().

![Tabela mostrando o ano, a soma das vendas de cada ano e os resultados das diferentes expressões](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-nakedfield-table4.png)

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

Sum(If([Invoice Date]&gt;= Date(41323), Sales) )

Faça o seguinte:

1. Clique em Adicionar coluna e selecione Medida.
2. Clique no símbolo the Expressão icon.  
   O editor de expressões é aberto.
3. Insira o seguinte: Sum( If([Invoice Date]&gt;= 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().

![Tabela mostrando o ano, a soma das vendas de cada ano e os resultados das diferentes expressões](https://help.qlik.com/pt-BR/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-nakedfield-table5.png)

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.