Accéder au contenu principal Passer au contenu complémentaire

Window - Fonction de script

Window() effectue des calculs à partir de plusieurs lignes d'une section (ou « fenêtre ») d'un tableau complet et produit une seule valeur pour chaque ligne.

Vous pouvez utiliser les fonctions Window pour effectuer des opérations telles que les suivantes :

  • Comparer une valeur numérique individuelle d'une ligne à la moyenne, au maximum ou au minimum d'une fenêtre du tableau.

  • Calculer le classement d'une valeur individuelle, soit dans la fenêtre, soit dans le tableau tout entier.

La fonction Window ne modifie pas le nombre d'enregistrements de la table, mais elle peut tout de même effectuer des tâches similaires telles que des fonctions d'agrégation, relationnelles et de plage.

La fonction Window doit être incluse dans l'instruction LOAD de la table que vous utilisez ou faire référence à la table, par exemple à l'aide d'une instruction Resident LOAD. Pour un exemple, consultez Exemple - Ajout d'un champ contenant une agrégation.

Le nom peut être omis, mais dans ce cas, le nom de champ est défini comme la totalité de l'expression de la fonction Window. Par exemple, AvgDepSalary dans l'exemple ci-dessous :

[AvgSalary]: Load *, Window(avg(Salary), Department) as AvgDepSalary Resident Employees;
Note Informations

Il est recommandé de donner un nom de champ à la fonction Window.

Window supporte des fonctions générales telles que l'arrondi ou des opérations numériques de base. Par exemple :

Load *, Round(Window(Sum(Salary),Department)) as SumDepSalary
Load *, Window(Sum(Salary),Department) + 5 as SumDepSalary
Note Informations

La fonction Window analyse l'ensemble de la table. En termes de consommation de mémoire, le coût de cette analyse est proportionnel au nombre de champs de la table. Une table comportant quelques champs, en plus de ceux sur lesquels porte la fonction Window, est toujours préférable à une table comportant de nombreux champs.

En règle générale, une fonction Window consomme 2 à 4 fois plus de mémoire et prend 2 à 4 fois plus de temps à charger qu'une opération de script similaire contenant la même agrégation, une clause Where (filtre), une clause Group by (partition) et une clause Order by (tri).

 

Window (main_expr, [partition1, partition2, ...], [sort_type, [sort_expr],[filter_expr], [start_expr, end_expr]])

Type de données renvoyées : une valeur par ligne, qui peut être combinée avec ou utilisée dans une autre expression ou ajoutée directement à la table obtenue par l'instruction LOAD.

 

Arguments
ArgumentDescription
main_expr

Expression d'entrée principale calculée et renvoyée par la fonction. Il doit s'agir de toute expression basée sur une agrégation, par exemple Median(Salary). Par exemple :

Window(Median(Salary)) as MedianSalary

L'expression peut également être un nom de champ sans agrégation appliquée. Dans ce cas, Window la traite comme si la fonction Only() était appliquée à ce champ. Par exemple :

Window(Salary) as WSalary

Les expressions comprenant des agrégations imbriquées ou des fonctions de fenêtre imbriquées telles que Window(Sum(Avg(Salary))) ou Window(Sum(Window(Salary))) ne sont pas autorisées.

partition1, partition2

Après main_expr, vous pouvez définir un nombre illimité de partitions. Les partitions sont des champs qui définissent les combinaisons à appliquer avec les agrégations. Par exemple :

Window(Avg(Salary), Department) as AvgDepSalary

Cela permet de calculer le salaire moyen de chaque service.

Lorsque plusieurs paramètres de partition sont fournis, l'agrégation est appliquée à chaque ligne avec une combinaison unique de champs de partition. Par exemple :

Window(Avg(Salary), Department, Country) as AvgDepSalaryPerCountry

Cela permet de calculer le salaire moyen de chaque service dans chaque pays. Les services dupliqués dans différents pays tels que Marketing dans Sweden et Marketing dans Canada seront traités comme des partitions différentes.

Le partitionnement est similaire au regroupement obtenu par la clause group by. En revanche, le partitionnement ne réduit pas le nombre d'enregistrements par rapport à la table d'entrée.

sort_type, [sort_expr]

Vous pouvez éventuellement spécifier le type de tri et l'expression de tri. Ceci définit l'ordre dans lequel l'agrégation est effectuée. sort_type est une chaîne constante et peut prendre l'une des trois valeurs suivantes :

  • ASC : tri croissant.

  • DESC : tri décroissant.

  • NONE

Si vous définissez sort_type sur ASC ou sur DESC, vous devez définir une expression de tri. Avec sort_type défini sur NONE, aucune expression de tri ne devrait être fournie. L'expression de tri décide de l'ordre des lignes au sein d'une partition.

Par exemple :

Window(RecNo(), Department, 'ASC', Year)

Dans l'exemple ci-dessus, l'agrégation dans la partition est effectuée dans l'ordre croissant en fonction du champ Year.

Les paramètres de tri affectent également l'ordre dans lequel une fenêtre glissante traite un tableau. Pour un exemple, voir Exemple - Ajout d'un champ avec une fenêtre glissante triée.

filter_expr

Vous pouvez éventuellement ajouter une expression de filtre. Il s'agit d'une expression booléenne qui décide si l'enregistrement doit être inclus ou non dans le calcul.

Si filter_expr est fourni, un type de tri doit être inclus. Si aucun type de tri n'est défini, l'argument peut être interprété comme un paramètre de partition et non comme une expression de filtre. Le paramètre filter_expr peut être entièrement omis ou une valeur vraie peut être incluse. Dans les deux cas, aucun filtre n'est utilisé de sorte qu'aucune ligne n'est exclue.

Par exemple :

Window(avg(Salary), Department, 'ASC', Age, Country='US' Or Country='Canada') as AvgDepSalaryInUsOrCanada

L'instruction Window ci-dessus écartera toutes les lignes pour lesquelles le champ Country n'est pas US ou Canada, excluant ainsi ces lignes de l'agrégation. Il restera des valeurs de sortie pour les lignes qui ont été écartées, mais, comme toutes les autres lignes de sortie, elles ne contiendront que les résultats agrégés des lignes qui n'ont pas été exclues par le filtre.

start_expr,end_expr

Vous pouvez éventuellement définir les arguments de la fonctionnalité de fenêtre glissante. Cela limite davantage le nombre de lignes à agréger. Chaque ligne de sortie ne comprendra que les résultats (agrégés) d'un certain nombre de lignes précédant et suivant la ligne active. Une fenêtre glissante nécessite deux arguments (start_expr,end_expr). Si ces arguments sont fournis, le type de tri ne devrait pas être ignoré. Sinon, les arguments peuvent être interprétés comme un paramètre de partition au lieu d'une fenêtre glissante. Le paramètre start_expr,end_expr comprend :

  • Expression de début : nombre de lignes avant la ligne active à inclure dans la fenêtre.

  • Expression de fin : nombre de lignes après la ligne active à inclure dans la fenêtre.

Par exemple, si vous souhaitiez inclure les trois lignes précédentes, la ligne active et la ligne suivante :

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, -3, 1) as WSlidingSalaryDepartment

Pour indiquer toutes les lignes précédentes ou toutes les lignes suivantes, vous pouvez utiliser la fonction Unbounded(). Par exemple, pour inclure toutes les lignes précédentes, la ligne active et la ligne suivante :

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, UNBOUNDED(), 1) as WSlidingSalaryDepartment

Par exemple, pour inclure la troisième ligne à partir de la ligne active et toutes les lignes suivantes :

Window(concat(Text(Salary),'-'), Department, 'NONE', 1, 3, UNBOUNDED()) as WSlidingSalaryDepartment

Dans les exemples ci-dessus, le type de tri NONE est fourni de sorte que le script puisse faire la distinction entre les arguments de partition et les paramètres qui viennent après le type de tri.

Exemple - Ajout d'un champ contenant une agrégation

Exemple - Ajout d'un champ contenant une agrégation filtrée pour des valeurs spécifiques

Exemple - Ajout d'un champ avec une fenêtre glissante

Exemple - Ajout d'un champ avec une fenêtre glissante triée

Limitations

Window présente les limites suivantes :

  • Window est une fonction gourmande en ressources, en particulier en termes de consommation de mémoire.

  • Window n'est pas supporté dans Qlik Sense Mobile.

  • Les expressions de graphique ne supportent pas Window.

  • Vous ne pouvez pas imbriquer de fonctions Window à l'intérieur d'autres fonctions Window.

  • Window ne peut pas être utilisé à l'intérieur d'une fonction d'agrégation.

  • Window ne peut pas être utilisé dans une instruction LOAD avec une clause group by.

  • Window doit pouvoir analyser la table toute entière.

  • WRank(), RecNo() et RowNo() ne peuvent pas être utilisés avec Window lors du recours à la fonctionnalité de fenêtre glissante.

  • Lorsque la fonctionnalité de fenêtre glissante est utilisée, le temps de calcul augmente en fonction de la taille de la fenêtre. Il est généralement conseillé d'éviter les grands tableaux combinés avec des fenêtres de grande taille.

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.