Window - fonction de script
Window() effectue des calculs à partir de différentes lignes, produisant une valeur pour chaque ligne séparément.
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 de la colonne.
-
Calculer le classement d'une valeur individuelle, soit dans la colonne, soit dans la table toute entière.
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 comporter un cache dans l'instruction LOAD de la table que vous utilisez pour pouvoir l'ajouter à la table. Par exemple :
Window prend en charge des fonctions générales telles que l'arrondi ou des opérations numériques de base. Par exemple :
Vous pouvez définir une fenêtre glissante pour la fonction Window. Cela définit le nombre de lignes utilisées lors de l'application de la fonction Window à la ligne active. Par exemple, vous pouvez définir la fenêtre de sorte qu'elle corresponde aux trois lignes précédentes et aux trois lignes suivantes.
Type de données renvoyé : Nouveau champ ajouté à la table obtenue créée par l'instruction LOAD.
Argument | Description |
---|---|
input_expr |
Expression d'entrée 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'entrée 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,Department) as WSalary
Vous pouvez éventuellement définir un partitionnement avec l'expression d'entrée. Le partitionnement est identique au regroupement obtenu par la clause group by, à la différence près que le résultat est ajouté sous forme de nouvelle colonne à la table d'entrée. Le partitionnement ne réduit pas le nombre d'enregistrements de la table d'entrée. Il est possible de définir plusieurs champs de partition. Exemple :
LOAD
Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300)
+ AddMonths(OrderDate,-6) as MAX_Sales_City_Last_6_Mos, Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland') + AddMonths(OrderDate,-6) as Avg_Sales_Portland_Last_6_Mos, Window(Max(Sales), City, 'ASC', OrderDate, Sales > 300) + AddMonths(OrderDate,-12) as MAX_Sales_City_Last_12_Mos; LOAD City, Sales, OrderDate FROM [lib://AttachedFiles/Sales Data.xlsx] (ooxml, embedded labels, table is [Sales Data]);
|
partition1, partition2 |
Après input_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. L'agrégation est appliquée séparément avec chaque partition. Par exemple : Window(Avg(Salary), Unit, Department, Country) as AvgSalary
Dans l'exemple ci-dessus, les partitions sont Unit, Department et Country. Les partitions ne sont pas obligatoires, mais elles sont nécessaires pour le fenêtrage approprié des champs. |
sort_type, [sort_expr]] |
Vous pouvez éventuellement spécifier le type de tri et l'expression de tri. sort_type peut prendre une des deux valeurs suivantes :
Si vous définissez sort_type, vous devez définir une expression de tri. Il s'agit d'une expression qui décide de l'ordre des lignes au sein d'une partition. Par exemple : Window(RecNo(), Department, 'ASC', Year)
L'exemple ci-dessus montre les résultats dans la partition d'un tri croissant en fonction du champ Year. Note InformationsLe type de tri et l'expression de tri sont essentiellement nécessaires uniquement avec les fonctions RecNo et WRank.
|
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. Ce paramètre peut être entièrement omis, et le résultat, dans ce cas, est l'absence de filtre. Par exemple : Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)
as wAvgSalary) as wAvgSalaryIfEmpIs3or7 |
[start_expr,end_expr] |
Vous pouvez éventuellement définir l'argument de la fonctionnalité de fenêtre glissante. Une fenêtre glissante nécessite deux arguments :
Par exemple, si vous souhaitiez inclure les trois lignes précédentes, la ligne active et la ligne suivante : Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, -3, 1) 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, 'ASC', Age, Year>0, UNBOUNDED(), 1) Par exemple, pour inclure la troisième ligne à partir de la ligne active et toutes les lignes suivantes : Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year>0, 3, UNBOUNDED()) |
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
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 pris en charge dans Qlik Sense Mobile.
-
Les expressions de graphique ne prennent pas en charge 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 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.