The importance of Only()
Only() renvoie un valeur s'il n'y a qu'une valeur possible dans le groupe. Cette valeur est le résultat de l'agrégation. Par défaut, Qlik Sense prend la valeur Only() si aucune fonction d'agrégation n'est spécifiée.
S'il existe une relation un à un entre la dimension de graphique et le paramètre, la fonction Only() renvoie la seule valeur possible. S'il existe plusieurs valeurs, elle renvoie NULL. Par exemple, la recherche du seul produit dont le prix unitaire est égal à 12 renverra NULL si plusieurs produits ont un prix unitaire de 12.
Les images suivantes montrent la différence entre les relations un-à-un et un-à-plusieurs :
La fonction Only() est une fonction d'agrégation. Elle utilise de nombreux enregistrements en entrée et renvoie une seule valeur, tout comme Sum() ou Count(). Qlik Sense utilise des agrégations dans quasiment tous ses calculs. Les expressions d'un graphique, d'une expression de tri, d'une zone de texte, d'une recherche avancée et d'une étiquette calculée sont toutes des agrégations et ne peuvent pas être calculées sans impliquer une fonction d'agrégation.
Mais que se passe-t-il si un utilisateur saisit une expression sans fonction d'agrégation explicite ? Par exemple, si l'expression de tri est définie sur Date ? Ou s'il existe une recherche avancée, pour les clients qui ont acheté de la bière et du vin, utilisant l'expression =[Type de produit]='Bière et vin' ?
C'est là que la fonction Only() affecte le calcul. En l'absence de fonction d'agrégation explicite dans l'expression, Qlik Sense utilise implicitement la fonction Only(). Dans les cas ci-dessus, Only(Date) est utilisé comme expression de tri et Only([Type de produit])='Bière et vin' est utilisé comme critère de recherche.
Parfois, la nouvelle expression renvoie un résultat que l'utilisateur n'attend pas. Les deux exemples ci-dessus fonctionnent correctement quand il existe une seule valeur possible de Date ou de Product Type, mais aucune d'elles ne fonctionne quand il existe plusieurs valeurs.
Différentes expressions utilisant Only()
Nous allons créer quatre KPI avec des expressions similaires. Ainsi, nous pouvons comparer dans quelle mesure le fait d'avoir des références de champ nu ou d'avoir Only() à une position différente dans l'expression peut avoir un impact sur les résultats de la sélection.
Dans l'application, sur la feuille Importance of Only(), vous trouverez un volet de filtre avec Invoice Date comme dimension.
Procédez comme suit :
- Créez KPI.
- Cliquez sur Ajouter une mesure. Cliquez sur le symbole .
L'éditeur d'expression s'ouvre. - Saisissez les éléments suivants : Month([Invoice Date])
- Créez trois KPIs supplémentaires avec les mesures : Month(Only([Invoice Date])), Month(Max([Invoice Date])) et Only(Month([Invoice Date])).
- Cliquez sur Appliquer.
Lorsque vous disposez d'une référence de champ nu, la fonction Only() est insérée au niveau le plus bas. Cela signifie que les deux premiers KPI, Month([Invoice Date]) et Month(Only([Invoice Date])), seront interprétés de la même façon et donneront toujours le même résultat.
Comme vous le voyez, trois des quatre KPI renvoient NULL. Le troisième KPI, Month(Max([Invoice Date])), renvoie déjà une valeur, même si aucune sélection n'a été faite.
Lorsque vous écrivez des expressions, vous devez toujours vous demander quelle agrégation utiliser, ou quelle valeur utiliser s'il existe plusieurs valeurs. Si vous souhaitez utiliser NULL pour représenter plusieurs valeurs, vous pouvez laisser l'expression telle quelle. Pour les nombres, vous voulez probablement plutôt utiliser Sum(), Avg(), Min() ou Max(). Pour les chaînes, vous pouvez utiliser Only() ou MinString().
Procédez comme suit :
- Arrêtez l'édition de la feuille.
- Dans le volet de filtre, sélectionnez une date du mois de janvier.
- Confirmez la sélection en cliquant sur .
Quand une seule sélection est effectuée, tous les KPI renvoient la réponse correcte. Même si l'expression contient une référence de champ nu, telle que l'expression dans Month([Invoice Date]), le fait que nous ayons effectué une seule sélection lui permet de renvoyer la valeur correcte.
Procédez comme suit :
- Dans le volet de filtre, sélectionnez une date supplémentaire du mois de janvier.
- Confirmez la sélection en cliquant sur .
Les deux premiers KPI renvoient NULL et les deux autres KPI renvoient la valeur de janvier correcte. Spécifiquement, le quatrième KPI renvoie une réponse correcte, car les deux sélections de date effectuées sont des dates de janvier.
Procédez comme suit :
- Dans le volet de filtre, sélectionnez une date supplémentaire d'un autre mois que janvier.
- Confirmez la sélection en cliquant sur .
Quand plusieurs sélections sont effectuées à l'aide de dates de mois différents, seul le troisième KPI renvoie une valeur. La valeur renvoyée est celle du mois le plus long de la sélection, conformément à l'expression Month(Max([Invoice Date])). Étant donné que Only() est automatiquement inséré dans les expressions avec des références de champ nu, vous ne pouvez pas toujours être sûr que le niveau le plus bas sera approprié pour l'expression. Le placement de Only() est important.
Pour plus d'informations, consultez Only - fonction de graphique.