Références de champ nu
Un champ est considéré comme nu quand il n'est pas intégré à une fonction d'agrégation.
Une référence de champ nu est un tableau contenant éventuellement plusieurs valeurs. Qlik Sense, ne sachant pas laquelle de ces valeurs vous voulez, l'évalue comme NULL.
Utilisez toujours une fonction d'agrégation dans l'expression
Si votre expression n'effectue pas correctement l'évaluation, il est fort probable qu'elle ne contienne pas de fonction d'agrégation.
Une référence de champ dans une expression est un tableau de valeurs. Par exemple :
Vous devez intégrer le champ Date de facture dans une fonction d'agrégation pour qu'il soit réduit à une seule valeur.
Si vous n'utilisez pas de fonction d'agrégation dans votre expression, Qlik Sense utilisera la fonction Only() par défaut. Si la référence de champ renvoie plusieurs valeurs, Qlik Sense l'interprétera comme NULL.
Fractionnement des dates de facture à l'aide de la fonction If()
La fonction If() est souvent utilisée pour les agrégations conditionnelles. Elle renvoie une valeur variant selon que la condition fournie dans la fonction est évaluée comme True ou False.
Dans l'application, sur la feuille Naked field references, vous trouverez une table intitulée Using If() on Invoice dates.
Procédez comme suit :
- Sélectionnez la table intitulée Using If() on Invoice dates.
Le panneau des propriétés s'affiche. - Cliquez sur Ajouter une colonne et sélectionnez Mesure.
- Cliquez sur le symbole .
L'éditeur d'expression s'ouvre. - Saisissez les éléments suivants : If( [Invoice Date]>= Date(41323), 'After', 'Before' )
- Cliquez sur Appliquer.
Cette expression teste si Invoice Date se trouve avant la date de référence 18-2-2013 et renvoie 'Before' si c'est le cas. Si la date est ultérieure ou égale à la date de référence 2/18/2013, 'After' est renvoyé. La date de référence est exprimée sous la forme du nombre entier 41 323.
Pour obtenir davantage d'informations, voir if - fonction de graphique et script
Éviter les références de champ nu
À première vue, cette expression semble correcte :
If([Invoice Date]>= Date(41323) 'After', 'Before')
Elle doit évaluer des dates de facture après la date de référence, renvoyer 'After' ou, sinon, renvoyer 'Before'. Cependant, Invoice Date est une référence de champ nu ; elle ne comporte pas de fonction d'agrégation et est par conséquent un tableau de plusieurs valeurs et effectuera l'évaluation sur NULL. Dans l'exemple précédent, il n'existait qu'une seule Invoice Date par valeur Date dans le tableau, ce qui fait que l'expression effectuait correctement le calcul.
Voyons comment une expression similaire effectue le calcul sous une valeur de dimension différente et comment résoudre le problème de référence de champ nu :
Éviter les références de champ nu dans une fonction If()
Nous allons utiliser une expression similaire à la précédente :
If([Invoice Date]>= Date(41323), Sum(Sales))
Cette fois-ci, la fonction additionne les ventes ultérieures à la date de référence.
Dans l'application, sur la feuille Naked field references, vous trouverez une table intitulée Sum(Amount).
Procédez comme suit :
- Sélectionnez la table Sum(Amount) disponible.
Le panneau des propriétés s'affiche. - Cliquez sur Ajouter une colonne et sélectionnez Mesure.
- Cliquez sur le symbole .
L'éditeur d'expression s'ouvre. - Saisissez les éléments suivants : If( [Invoice Date]>= 41323, Sum(Sales) )
- Cliquez sur Appliquer.
Pour chaque année, il existe un tableau de dates de facture ultérieures à la date de référence. Étant donné que l'expression ne contient pas de fonction d'agrégation, elle effectue l'évaluation sur NULL. Une expression correcte doit utiliser une fonction d'agrégation telle que Min() ou Max() dans le premier paramètre de la fonction If() :
If(Max([Invoice Date])>= Date(41323), Sum(Sales))
Procédez comme suit :
- Cliquez sur Ajouter une colonne et sélectionnez Mesure.
- Cliquez sur le symbole .
L'éditeur d'expression s'ouvre. - Saisissez les éléments suivants : If( [Invoice Date]>= Date(41323), Sum(Sales) )
- Cliquez sur Appliquer.
Sinon, la fonction If() peut être placée à l'intérieur de la fonction Sum() :
Sum(If([Invoice Date]>= Date(41323), Sales) )
Procédez comme suit :
- Cliquez sur Ajouter une colonne et sélectionnez Mesure.
- Cliquez sur le symbole .
L'éditeur d'expression s'ouvre. - Saisissez les éléments suivants : Sum( If([Invoice Date]>= Date(41323), Sales ) )
- Cliquez sur Appliquer.
Dans l'avant-dernière expression, la fonction If() a été évaluée une fois par valeur de dimension. Dans la dernière expression, elle est évaluée une fois par ligne dans les données brutes. La différence dans la façon dont la fonction est évaluée entraîne des résultats différents mais elles renvoient une réponse. La première expression est évaluée à NULL. L'image ci-dessus montre la différence entre les expressions en utilisant 2/18/2013 comme date de référence.