LAG
Description
LAG
est une fonction d'agrégation de fenêtre qui répartit les lignes en groupes, trie les lignes en fonction d'un champ et renvoie la valeur d'un champ de la ligne au décalage spécifié avant (au-dessus de) la ligne actuelle dans le groupe.Le
PARTITION BY
La clause d'entrée détermine les champs à utiliser pour répartir un ensemble de lignes d'entrée en groupes. Le ORDER BY
La clause .Workday sépare les lignes d'entrée en groupes en fonction des champs de partition, trie les lignes en fonction des champs de tri, puis calcule l'expression d'agrégation (décalage pour cette fonction) dans chaque groupe.
Syntaxe
LAG(input_field,offset,default_value)OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
Valeur de renvoi
Renvoie une valeur par ligne du même type que le
champ Input_field
.Paramètres d'entrée
- input_field
- Est obligatoire. Le champ sur lequel exécuter la fonction d'agrégation. Vous pouvez indiquer n'importe quel type de champ.
- offset
- Facultatif. Nombre de lignes avant la ligne en cours dont la valeur doit être renvoyée. Doit être un nombre littéral supérieur ou égal à zéro (0) et inférieur ou égal à 100. Si vous n'indiquez pas de décalage, Workday utilise la valeur 1.
- default_value
- Facultatif. La valeur cette fonction renvoie lorsque la ligne de décalage est en dehors de la fenêtre actuellement définie ou lorsque la valeur de la ligne de décalage est NULL.default_valuedoit être du même type queInput_field. Si vous n'indiquez pas de valeur par défaut, Workday utilise la valeur NULL.
- OVER()
- Obligatoire.OVERdoit être utilisé dans un calendrierLAGexpression.
- PARTITION BYpartitioning_field
- Est obligatoire. Utilisez l'optionPARTITION BYclause pour spécifier un ou plusieurs champs à utiliser pour partitionner un groupe de lignes d'entrée. Vous pouvez indiquer n'importe quel type de champ sauf Devise. Exemple : si vous spécifiez le champ Mois comme champ de partitionnement, Workday regroupe donc dans une partition unique tous les enregistrements ayant la même valeur pour Mois.
- ORDER BYordering_field
- Est obligatoire. Utilisez l'optionORDER BYclause pour indiquer comment trier les lignes d'entrée dans la partition en utilisant les valeurs du champ spécifié dans chaque partition. Vous pouvez indiquer n'importe quel type de champ sauf Devise.Vous pouvez utiliser laDESCouASCMots-clés pour trier par ordre décroissant (valeurs de haut à bas, les valeurs NULL sont les dernières) ou par ordre croissant (valeurs de basse à haute, les valeurs NULL sont les premières) pour chaque champ de tri. Si vous n'indiquez aucun ordre de tri pour un champ de tri, Workday trie automatiquement les lignes par ordre croissant.
Exemples
Exemple : vous disposez d'un jeu de données avec les lignes et les champs suivants.
row_ID | Employee_Name | Eff_Date | Salaire |
|---|---|---|---|
1 | Goh | 1/1/18 | 49000 |
2 | Goh | 1/1/19 | 56000 |
3 | Goh | 01/01/17 | 44000 |
4 | Freeman | 1/1/18 | 65000 |
5 | Freeman | 01/01/17 | 57000 |
6 | Freeman | 1/1/19 | 69000 |
7 | Smith | 1/1/18 | 51000 |
8 | Smith | 1/1/19 | 56000 |
9 | Smith | 1/1/16 | 44000 |
Vous pouvez classer les lignes de chaque employé dans l'ordre croissant (ASC) en fonction du champ de date d'effet (
Eff_Date
), de sorte que le salaire le plus récent apparaît en premier dans chaque partition.Utilisez l'expression suivante dans le champ
Salary_Increase
pour calculer la modification du salaire entre chaque modification de la date d'effet :[Salary] - (LAG([Salary], 1, [Salary]) OVER( PARTITION BY [Employee_Name] ORDER BY [Eff_Date] ASC) )
Vous obtenez les résultats suivants :
row_ID | Employee_Name | Eff_Date | Salaire | Salary_Increase |
|---|---|---|---|---|
2 | Goh | 1/1/19 | 56000 | 7000 |
1 | Goh | 1/1/18 | 49000 | 5 000 |
3 | Goh | 01/01/17 | 44000 | 0 |
6 | Freeman | 1/1/19 | 69000 | 4 000 |
4 | Freeman | 1/1/18 | 65000 | 8000 |
5 | Freeman | 01/01/17 | 57000 | 0 |
8 | Smith | 1/1/19 | 56000 | 5 000 |
7 | Smith | 1/1/18 | 51000 | 7000 |
9 | Smith | 1/1/16 | 44000 | 0 |