# 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 :

```
[Transactions]:
Load 
	*,
	Window(avg(Expression1),[Num]);
LOAD
	TransLineID,
	TransID,
	"Num",
	Dim1,
	Dim2,
	Dim3,
	Expression1,
	Expression2,
	Expression3
FROM [lib://AttachedFiles/transactions.qvd] (qvd);
```

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 SumSalary
```

```
Load *, Window(Sum(Salary),Department) + 5 as SumSalary
```

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.

Window (Window (input\_expr, [partition1, partition2, ...], [sort\_type, [sort\_expr]],[filter\_expr], [start\_expr,end\_expr]))

Type de données renvoyé : nouveau champ ajouté à la table obtenue créée par l'instruction LOAD.

Arguments

| 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 :<br><br>Window(Median(Salary)) as MedianSalary<br><br>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 :<br><br>Window(Salary,Department) as WSalary<br><br>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.<br><br>Exemple :<br><br><br>LOAD<br>Window(Max(Sales), City, 'ASC', OrderDate, Sales &gt; 300)<br>+ AddMonths(OrderDate,-6) as MAX\_Sales\_City\_Last\_6\_Mos,<br>Window(Avg(Sales), City, 'ASC', OrderDate, City = 'Portland')<br>+ AddMonths(OrderDate,-6) as Avg\_Sales\_Portland\_Last\_6\_Mos,<br>Window(Max(Sales), City, 'ASC', OrderDate, Sales &gt; 300)<br>+ AddMonths(OrderDate,-12) as MAX\_Sales\_City\_Last\_12\_Mos;<br>LOAD<br>City,<br>Sales,<br>OrderDate<br>FROM [lib://AttachedFiles/Sales Data.xlsx]<br>(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 :<br><br>Window(Avg(Salary), Unit, Department, Country) as AvgSalary<br><br>Dans l'exemple ci-dessus, les partitions sont Unit, Department et Country.<br><br>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 :<br><br><ul> <li> <p> <span>ASC</span>&nbsp;:&nbsp;tri croissant.</p> </li> <li> <p> <span>DESC</span>&nbsp;:&nbsp;tri décroissant.</p> </li> </ul><br><br>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.<br><br>Par exemple :<br><br>Window(RecNo(), Department, 'ASC', Year)<br><br>L'exemple ci-dessus montre les résultats dans la partition d'un tri croissant en fonction du champ Year.<br><br>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.<br><br>Ce paramètre peut être entièrement omis, et le résultat, dans ce cas, est l'absence de filtre.<br><br>Par exemple :<br><br>Window(avg(Salary), Department, 'ASC', Age, EmployeeID=3 Or EmployeeID=7)<br>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 :<br><br><ul> <li> <p>Expression de début&nbsp;:&nbsp;nombre de lignes avant la ligne active à inclure dans la fenêtre.</p> </li> <li> <p>Expression de fin&nbsp;:&nbsp;nombre de lignes après la ligne active à inclure dans la fenêtre.</p> </li> </ul><br><br>Par exemple, si vous souhaitiez inclure les trois lignes précédentes, la ligne active et la ligne suivante :<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, -3, 1)<br>as WSalaryDepartment<br><br>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 :<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, UNBOUNDED(), 1)<br>as WSlidingSalaryDepartment<br><br>Par exemple, pour inclure la troisième ligne à partir de la ligne active et toutes les lignes suivantes :<br><br>Window(concat(Text(Salary),'-'), Department, 'ASC', Age, Year&gt;0, 3, UNBOUNDED())<br>as WSlidingSalaryDepartment |

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

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

#### Exemple : Ajout d'un champ contenant une agrégation

Script de chargement

Créez un nouvel onglet dans l'éditeur de chargement de données, puis chargez les données suivantes sous forme de chargement inline. Créez le tableau ci-dessous dans Qlik Sense pour afficher les résultats.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id) as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Résultats

Résultats de l'ajout d'un champ contenant une agrégation

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | size | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Red | 103.43 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | 266.775 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blue | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Black | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Red | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blue | 103.43 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Black | 266.775 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Red | 103.43 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | 266.775 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blue | 42.935 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Black | 64.21 |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Red | 273.88 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blue | 103.43 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Black | 266.775 |

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

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

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

Script de chargement

Créez un nouvel onglet dans l'éditeur de chargement de données, puis chargez les données suivantes sous forme de chargement inline. Créez le tableau ci-dessous dans Qlik Sense pour afficher les résultats.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id, color_code = 'Blue') as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Résultats

Résultats de l'ajout d'un champ contenant une agrégation filtrée pour des valeurs spécifiques

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | size | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Red | - |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | - |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blue | 42.94 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Black | - |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Red | - |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blue | 118.4 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Black | - |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Red | - |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | - |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blue | 42.94 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Black | - |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Red | - |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blue | 118.4 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Black | - |

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

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/WindowFunctions/Window.htm)

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

Script de chargement

Créez un nouvel onglet dans l'éditeur de chargement de données, puis chargez les données suivantes sous forme de chargement inline. Créez le tableau ci-dessous dans Qlik Sense pour afficher les résultats.

```
Transactions:
Load
*,
Window(Avg(transaction_amount),customer_id, 'ASC', -1, 1, 0, 1) as AvgCustTransaction;

Load * Inline [
transaction_id, transaction_date, transaction_amount, transaction_quantity, customer_id, size, color_code
3750, 20180830, 23.56, 2, 2038593, L, Red
3751, 20180907, 556.31, 6, 203521, M, Orange
3752, 20180916, 5.75, 1, 5646471, S, Blue
3753, 20180922, 125.00, 7, 3036491, L, Black
3754, 20180922, 484.21, 13, 049681, XS, Red
3756, 20180922, 59.18, 2, 2038593, M, Blue
3757, 20180923, 177.42, 21, 203521, XL, Black
3758, 20180924, 153.42, 14, 2038593, L, Red
3759, 20180925, 7.42, 5, 203521, M, Orange
3760, 20180925, 80.12, 18, 5646471, M, Blue
3761, 20180926, 3.42, 7, 3036491, XS, Black
3763, 20180926, 63.55, 12, 049681, S, Red
3763, 20180927, 177.56, 10, 2038593, L, Blue
3764, 20180927, 325.95, 8, 203521, XL, Black
];
 
```

Résultats

Résultats de l'ajout d'un champ contenant une agrégation filtrée pour des valeurs spécifiques

| transaction\_id | transaction\_date | transaction\_amount | transaction\_quantity | customer\_id | size | color\_code | AvgCustTransaction |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 3750 | 20180830 | 23.56 | 2 | 2038593 | L | Red | 41.37 |
| 3751 | 20180907 | 556.31 | 6 | 203521 | M | Orange | 366.865 |
| 3752 | 20180916 | 5.75 | 1 | 5646471 | S | Blue | 42.935 |
| 3753 | 20180922 | 125.00 | 7 | 3036491 | L | Black | 64.21 |
| 3754 | 20180922 | 484.21 | 13 | 049681 | XS | Red | 273.88 |
| 3756 | 20180922 | 59.18 | 2 | 2038593 | M | Blue | 106.3 |
| 3757 | 20180923 | 177.42 | 21 | 203521 | XL | Black | 92.42 |
| 3758 | 20180924 | 153.42 | 14 | 2038593 | L | Red | 165.49 |
| 3759 | 20180925 | 7.42 | 5 | 203521 | M | Orange | 166.685 |
| 3760 | 20180925 | 80.12 | 18 | 5646471 | M | Blue | 80.12 |
| 3761 | 20180926 | 3.42 | 7 | 3036491 | XS | Black | 3.42 |
| 3763 | 20180926 | 63.55 | 12 | 049681 | S | Red | 177.56 |
| 3763 | 20180927 | 177.56 | 10 | 2038593 | L | Blue | 63.55 |
| 3764 | 20180927 | 325.95 | 8 | 203521 | XL | Black | 325.95 |

## 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 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.