Accéder au contenu principal

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 :

Deux tableaux, l'un montrant que Max(Invoice Date) est une seule valeur et l'autre que Invoice Date est un tableau de valeurs.

 Two tables, one showing that Max(Invoice Date) is a single value, and one showing that Invoice Date is an array of values.

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 :

  1. Sélectionnez la table intitulée Using If() on Invoice dates.
    Le panneau des propriétés s'affiche.
  2. Cliquez sur Ajouter une colonne et sélectionnez Mesure.
  3. Cliquez sur le symbole Expression .
    L'éditeur d'expression s'ouvre.
  4. Saisissez les éléments suivants : If( [Invoice Date]>= Date(41323), 'After', 'Before' )
  5. Cliquez sur Appliquer.

Tableau affichant les dates de facture fractionnées par une date de référence.

 Table showing invoice dates being split by a reference date.

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 :

  1. Sélectionnez la table Sum(Amount) disponible.
    Le panneau des propriétés s'affiche.
  2. Cliquez sur Ajouter une colonne et sélectionnez Mesure.
  3. Cliquez sur le symbole Expression .
    L'éditeur d'expression s'ouvre.
  4. Saisissez les éléments suivants : If( [Invoice Date]>= 41323, Sum(Sales) )
  5. Cliquez sur Appliquer.

Tableau affichant l'année, la somme des ventes pour chaque année et les résultats de l'expression à l'aide de la fonction If().

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

Conseil: Conservez l'Étiquette intacte sur les mesures, afin d'afficher les différences entre chaque expression. Dans les colonnes contenant des valeurs monétaires, définissez le Format des nombres sur Devise, et le Modèle de format sur $ #,##0;-$ #,##0.

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 :

  1. Cliquez sur Ajouter une colonne et sélectionnez Mesure.
  2. Cliquez sur le symbole Expression .
    L'éditeur d'expression s'ouvre.
  3. Saisissez les éléments suivants : If( [Invoice Date]>= Date(41323), Sum(Sales) )
  4. Cliquez sur Appliquer.

Tableau affichant l'année, la somme des ventes pour chaque année et les résultats des différentes expressions à l'aide de la fonction If().

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

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 :

  1. Cliquez sur Ajouter une colonne et sélectionnez Mesure.
  2. Cliquez sur le symbole Expression .
    L'éditeur d'expression s'ouvre.
  3. Saisissez les éléments suivants : Sum( If([Invoice Date]>= Date(41323), Sales ) )
  4. Cliquez sur Appliquer.

Tableau affichant l'année, la somme des ventes pour chaque année et les résultats des différentes expressions à l'aide de la fonction If().

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

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.