lunarweekstart - fonction de script et fonction de graphique
Cette fonction renvoie une valeur correspondant à un horodatage de la première milliseconde du premier jour de la semaine lunaire contenant l'argument date. Dans Qlik Sense, les semaines lunaires sont définies en comptant le 1er janvier comme le premier jour de la semaine et, à l'exception de la dernière semaine de l'année, elles contiendront exactement sept jours.
LunarweekStart(date[, period_no[, first_week_day]])
double
La fonction lunarweekstart() détermine la semaine lunaire de la date. Elle renvoie ensuite un horodatage, au format date, pour la première milliseconde de cette semaine-là.
Argument | Description |
---|---|
date | Date ou horodatage à évaluer. |
period_no | period_no est un entier ou une expression qui aboutit à un entier, où la valeur 0 indique la semaine lunaire contenant l'argument date. Les valeurs négatives spécifiées pour period_no indiquent les semaines lunaires passées tandis que les valeurs positives désignent les semaines lunaires à venir. |
first_week_day | Décalage pouvant être supérieur ou inférieur à zéro. Il modifie le début de l'année du nombre de jours et/ou de fractions de jour spécifié. |
Cas d'utilisation
La fonction lunarweekstart() est couramment utilisée dans le cadre d'une expression lorsque l'utilisateur souhaite que le calcul utilise la fraction de la semaine qui s'est écoulée jusqu'à présent. Contrairement à la fonction weekstart(), au début de chaque nouvelle année civile, la semaine commence le 1er janvier et chaque semaine suivante commence sept jours plus tard. La fonctionlunarweekstart() n'est pas affectée par la variable système FirstWeekDay.
Par exemple, vous pouvez utiliser la fonction lunarweekstart() pour calculer les intérêts cumulés au cours d'une semaine jusqu'à la date d'aujourd'hui.
Exemple | Résultat |
---|---|
lunarweekstart('01/12/2013') | Renvoie 01/08/2013. |
lunarweekstart('01/12/2013', -1) | Renvoie 01/01/2013. |
lunarweekstart('01/12/2013', 0, 1 ) | Renvoie 01/09/2013, car la définition de first_week_day sur 1 signifie que le début de l'année est devenu le 01/02/2013. |
Paramètres régionaux
Sauf indication contraire, les exemples de cette rubrique utilisent le format de date suivant : MM/JJ/AAAA. Le format de date est indiqué dans l'instruction SET DateFormat de votre script de chargement de données. Le format de date par défaut peut être différent dans votre système en raison de vos paramètres régionaux et d'autres facteurs. Vous pouvez modifier les formats utilisés dans les exemples ci-dessous en fonction de vos besoins. Ou vous pouvez modifier les formats utilisés dans votre script de chargement pour qu'ils correspondent à ceux de ces exemples.
Les paramètres régionaux par défaut des applications sont basés sur les paramètres système régionaux de l'ordinateur ou du serveur sur lequel Qlik Sense est installé. Si le serveur Qlik Sense auquel vous accédez est configuré sur la Suède, l'éditeur de chargement de données utilisera les paramètres régionaux suédois pour les dates, l'heure et la devise. Ces paramètres de format régionaux ne sont pas liés à la langue affichée dans l'interface utilisateur Qlik Sense. Qlik Sense sera affiché dans la même langue que celle du navigateur que vous utilisez.
Exemple 1 – aucun argument supplémentaire
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.
Le script de chargement contient :
-
Ensemble de données contenant un ensemble de transactions pour 2022, chargé dans une table appelée Transactions.
- Champ de date fourni dans la variable système DateFormat au format (MM/DD/YYYY).
-
Création d'un champ, start_of_week, qui renvoie un horodatage du début de la semaine lunaire au cours de laquelle les transactions ont eu lieu.
Script de chargement
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekstart(date) as start_of_week,
timestamp(lunarweekstart(date)) as start_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
Résultats
Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :
-
date
-
start_of_week
-
start_of_week_timestamp
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
1/19/2022 | 01/15/2022 | 1/15/2022 12:00:00 AM |
2/5/2022 | 02/05/2022 | 2/5/2022 12:00:00 AM |
2/28/2022 | 02/26/2022 | 2/26/2022 12:00:00 AM |
3/16/2022 | 03/12/2022 | 3/12/2022 12:00:00 AM |
4/1/2022 | 03/26/2022 | 3/26/2022 12:00:00 AM |
5/7/2022 | 05/07/2022 | 5/7/2022 12:00:00 AM |
5/16/2022 | 05/14/2022 | 5/14/2022 12:00:00 AM |
6/15/2022 | 06/11/2022 | 6/11/2022 12:00:00 AM |
6/26/2022 | 06/25/2022 | 6/25/2022 12:00:00 AM |
7/9/2022 | 07/09/2022 | 7/9/2022 12:00:00 AM |
7/22/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
7/23/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
7/27/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
8/2/2022 | 07/30/2022 | 7/30/2022 12:00:00 AM |
8/8/2022 | 08/06/2022 | 8/6/2022 12:00:00 AM |
8/19/2022 | 08/13/2022 | 8/13/2022 12:00:00 AM |
9/26/2022 | 09/24/2022 | 9/24/2022 12:00:00 AM |
10/14/2022 | 10/08/2022 | 10/8/2022 12:00:00 AM |
10/29/2022 | 10/29/2022 | 10/29/2022 12:00:00 AM |
Le champ start_of_week est créé dans l'instruction preceding load via la fonction lunarweekstart() et en transmettant le champ date comme argument de la fonction.
La fonction lunarweekstart() identifie la semaine lunaire de la date en renvoyant un horodatage pour la première milliseconde de cette semaine-là.
La transaction 8189 a eu lieu le 19 janvier. La fonction lunarweekstart() identifie que la semaine lunaire commence le 15 janvier. Par conséquent, la valeur start_of_week de cette transaction renvoie la première milliseconde de ce jour-là, à savoir, le 15 janvier à 12:00:00 AM.
Exemple 2 – period_no
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.
Le script de chargement contient :
-
Même ensemble de données et même scénario que ceux du premier exemple.
-
Création d'un champ, previous_lunar_week_start, qui renvoie l'horodatage du début de la semaine lunaire avant la transaction.
Script de chargement
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekstart(date,-1) as previous_lunar_week_start,
timestamp(lunarweekstart(date,-1)) as previous_lunar_week_start_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
Résultats
date | previous_lunar_week_start | previous_lunar_week_start_timestamp |
---|---|---|
1/7/2022 | 12/24/2021 | 12/24/2021 12:00:00 AM |
1/19/2022 | 01/08/2022 | 1/8/2022 12:00:00 AM |
2/5/2022 | 01/29/2022 | 1/29/2022 12:00:00 AM |
2/28/2022 | 02/19/2022 | 2/19/2022 12:00:00 AM |
3/16/2022 | 03/05/2022 | 3/5/2022 12:00:00 AM |
4/1/2022 | 03/19/2022 | 3/19/2022 12:00:00 AM |
5/7/2022 | 04/30/2022 | 4/30/2022 12:00:00 AM |
5/16/2022 | 05/07/2022 | 5/7/2022 12:00:00 AM |
6/15/2022 | 06/04/2022 | 6/4/2022 12:00:00 AM |
6/26/2022 | 06/18/2022 | 6/18/2022 12:00:00 AM |
7/9/2022 | 07/02/2022 | 7/2/2022 12:00:00 AM |
7/22/2022 | 07/09/2022 | 7/9/2022 12:00:00 AM |
7/23/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
7/27/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
8/2/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
8/8/2022 | 07/30/2022 | 7/30/2022 12:00:00 AM |
8/19/2022 | 08/06/2022 | 8/6/2022 12:00:00 AM |
9/26/2022 | 09/17/2022 | 9/17/2022 12:00:00 AM |
10/14/2022 | 10/01/2022 | 10/1/2022 12:00:00 AM |
10/29/2022 | 10/22/2022 | 10/22/2022 12:00:00 AM |
Dans cet exemple, étant donné que l'argument period_no égal à -1 a été utilisé comme argument de décalage dans la fonction lunarweekstart(), la fonction commence par identifier la semaine lunaire au cours de laquelle les transactions ont lieu. Elle décale ensuite d'une semaine en arrière et identifie la première milliseconde de cette semaine lunaire.
La transaction 8189 a eu lieu le 19 janvier. La fonction lunarweekstart() identifie que la semaine lunaire commence le 15 janvier. Par conséquent, la semaine lunaire précédente a commencé le 8 janvier à 12:00:00 AM ; il s'agit de la valeur renvoyée pour le champ previous_lunar_week_start.
Exemple 3 – first_week_day
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.
Le script de chargement contient le même ensemble de données et le même scénario que ceux du premier exemple. Dans cet exemple, nous définissons les semaines lunaires de sorte qu'elles commencent le 5 janvier.
Script de chargement
SET DateFormat='MM/DD/YYYY';
Transactions:
Load
*,
lunarweekstart(date,0,4) as start_of_week,
timestamp(lunarweekstart(date,0,4)) as start_of_week_timestamp
;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
Résultats
Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :
-
date
-
start_of_week
-
start_of_week_timestamp
date | start_of_week | start_of_week_timestamp |
---|---|---|
1/7/2022 | 01/05/2022 | 1/5/2022 12:00:00 AM |
1/19/2022 | 01/19/2022 | 1/19/2022 12:00:00 AM |
2/5/2022 | 02/02/2022 | 2/2/2022 12:00:00 AM |
2/28/2022 | 02/23/2022 | 2/23/2022 12:00:00 AM |
3/16/2022 | 03/16/2022 | 3/16/2022 12:00:00 AM |
4/1/2022 | 03/30/2022 | 3/30/2022 12:00:00 AM |
5/7/2022 | 05/04/2022 | 5/4/2022 12:00:00 AM |
5/16/2022 | 05/11/2022 | 5/11/2022 12:00:00 AM |
6/15/2022 | 06/15/2022 | 6/15/2022 12:00:00 AM |
6/26/2022 | 06/22/2022 | 6/22/2022 12:00:00 AM |
7/9/2022 | 07/06/2022 | 7/6/2022 12:00:00 AM |
7/22/2022 | 07/20/2022 | 7/20/2022 12:00:00 AM |
7/23/2022 | 07/20/2022 | 7/20/2022 12:00:00 AM |
7/27/2022 | 07/27/2022 | 7/27/2022 12:00:00 AM |
8/2/2022 | 07/27/2022 | 7/27/2022 12:00:00 AM |
8/8/2022 | 08/03/2022 | 8/3/2022 12:00:00 AM |
8/19/2022 | 08/17/2022 | 8/17/2022 12:00:00 AM |
9/26/2022 | 09/21/2022 | 9/21/2022 12:00:00 AM |
10/14/2022 | 10/12/2022 | 10/12/2022 12:00:00 AM |
10/29/2022 | 10/26/2022 | 10/26/2022 12:00:00 AM |
Dans cet exemple, étant donné que l'argument first_week_date égal à 4 est utilisé dans la fonction lunarweekstart(), il reporte le début de l'année du 1er janvier au 5 janvier.
La transaction 8189 a eu lieu le 19 janvier. Étant donné que les semaines lunaires commencent le 5 janvier, la fonction lunarweekstart() identifie que la semaine lunaire contenant le 19 janvier commence également le 19 janvier à 12:00:00 AM. Il s'agit par conséquent de la valeur renvoyée pour le champ start_of_week.
Exemple 4 – exemple objet graphique
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.
Le script de chargement contient le même ensemble de données et le même scénario que ceux du premier exemple.
Cependant, dans cet exemple, le même ensemble de données est chargé dans l'application. Le calcul qui renvoie un horodatage pour le début de la semaine lunaire des transactions est créé sous forme de mesure dans un objet graphique de l'application.
Script de chargement
Transactions:
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
Résultats
Chargez les données et ouvrez une feuille. Créez une table et ajoutez ce champ comme dimension : date.
Ajoutez les mesures suivantes :
=lunarweekstart(date)
=timestamp(lunarweekstart(date))
date | =lunarweekstart(date) | =timestamp(lunarweekstart(date)) |
---|---|---|
1/7/2022 | 01/01/2022 | 1/1/2022 12:00:00 AM |
1/19/2022 | 01/15/2022 | 1/15/2022 12:00:00 AM |
2/5/2022 | 02/05/2022 | 2/5/2022 12:00:00 AM |
2/28/2022 | 02/26/2022 | 2/26/2022 12:00:00 AM |
3/16/2022 | 03/12/2022 | 3/12/2022 12:00:00 AM |
4/1/2022 | 03/26/2022 | 3/26/2022 12:00:00 AM |
5/7/2022 | 05/07/2022 | 5/7/2022 12:00:00 AM |
5/16/2022 | 05/14/2022 | 5/14/2022 12:00:00 AM |
6/15/2022 | 06/11/2022 | 6/11/2022 12:00:00 AM |
6/26/2022 | 06/25/2022 | 6/25/2022 12:00:00 AM |
7/9/2022 | 07/09/2022 | 7/9/2022 12:00:00 AM |
7/22/2022 | 07/16/2022 | 7/16/2022 12:00:00 AM |
7/23/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
7/27/2022 | 07/23/2022 | 7/23/2022 12:00:00 AM |
8/2/2022 | 07/30/2022 | 7/30/2022 12:00:00 AM |
8/8/2022 | 08/06/2022 | 8/6/2022 12:00:00 AM |
8/19/2022 | 08/13/2022 | 8/13/2022 12:00:00 AM |
9/26/2022 | 09/24/2022 | 9/24/2022 12:00:00 AM |
10/14/2022 | 10/08/2022 | 10/8/2022 12:00:00 AM |
10/29/2022 | 10/29/2022 | 10/29/2022 12:00:00 AM |
La mesure start_of_week est créée dans l'objet graphique via la fonction lunarweekstart() et en transmettant le champ date comme argument de la fonction.
La fonction lunarweekstart() identifie la semaine lunaire de la valeur date, renvoyant un horodatage pour la dernière milliseconde de cette semaine-là.
La transaction 8189 a eu lieu le 19 janvier. La fonction lunarweekstart() identifie que la semaine lunaire commence le 15 janvier. Par conséquent, la valeur start_of_week de cette transaction est la première milliseconde de ce jour-là, à savoir, le 15 janvier à 12:00:00 AM.
Exemple 5 – scénario
Vue d'ensemble
Ouvrez l'éditeur de chargement de données et ajoutez le script de chargement ci-dessous à un nouvel onglet.
Le script de chargement contient :
-
Ensemble de données contenant un ensemble de soldes de prêts, chargé dans une table appelée Loans.
-
Données constituées des ID des prêts, du solde au début de la semaine et du taux d'intérêt simple facturé pour chaque prêt par an.
L'utilisateur final souhaite un objet graphique qui affiche, par ID de prêt, les intérêts actuels cumulés pour chaque prêt au cours de la semaine jusqu'à la date du jour.
Script de chargement
Loans:
Load
*
Inline
[
loan_id,start_balance,rate
8188,$10000.00,0.024
8189,$15000.00,0.057
8190,$17500.00,0.024
8191,$21000.00,0.034
8192,$90000.00,0.084
];
Résultats
Procédez comme suit :
-
Chargez les données et ouvrez une feuille. Créez un tableau.
-
Ajoutez les champs suivants comme dimensions.
-
loan_id
-
start_balance
-
-
Ensuite, pour calculer les intérêts cumulés, créez la mesure suivante :
=start_balance*(rate*(today(1)-lunarweekstart(today(1)))/365)
-
Définissez le Formatage des nombres des mesures sur Devise.
loan_id | start_balance | =start_balance*(rate*(today(1)- lunarweekstart (today(1)))/365) |
---|---|---|
8188 | $10000.00 | $15.07 |
8189 | $15000.00 | $128.84 |
8190 | $17500.00 | $63.29 |
8191 | $21000.00 | $107.59 |
8192 | $90000.00 | $1139.18 |
Si on utilise la date d'aujourd'hui comme seul argument, la fonction lunarweekstart() renvoie la date de début de l'année en cours. En soustrayant ce résultat de la date actuelle, l'expression renvoie le nombre de jours qui se sont écoulés jusqu'à présent cette semaine.
Cette valeur est ensuite multipliée par le taux d'intérêt et divisée par 365 pour obtenir le taux d'intérêt effectif encouru pour cette période. Le résultat est ensuite multiplié par le solde initial du prêt pour renvoyer les intérêts cumulés jusqu'à présent cette semaine.