Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
Cirdecp007
Creator
Creator

Ajouter un champ dans le script de chargement à partir d'une formule dans l'application

Bonjour,

 

J'ai fait une formule dans mon application qui marche très bien mais me pose un problème visuel au niveau du champ filtre (onglet vert de la barre supérieur)  qui affiche la formule au lieu du libellé que je souhaite.

L'idée de cette formule et de ne faire apparaître que les années où j'ai des données de facturation alors que j'ai d'autres sources dont l'année peut être inférieur ou supérieur aux années facturées.

Ma formule fonctionnelle dans QLIK SENSE est :

If(Year<='$(=max({<Source={'Facturation'}>}Year))',
If(Year>='$(=min({<Source={'Facturation'}>}Year))',
Year
,)
,)

Dans le script de chargement, j'ai réussi à faire quelque chose de similaire mais cette fois ce sont les critères d'année de référence qui sont fixes (2019 et 2023) qui me dérange car j'aimerais faire que ces années soient variables automatiquement d'une année à l'autre (par exemple en 2024, les années fixes seront 2020 et 2024)

Annee:
Load distinct Year as Annee
Resident MasterCalendar
where Year <=2023
and Year >= 2019
;

J'aimerais donc remplacé 2023 par l'année max de la Source = Facturation et 2019 par l'année min de la Source = Facturation. Pouvez-vous m'aider svp ?

J'ai essayé de mettre un where Source = 'Facturation' mais ça n'a pas fonctionné probablement car je ne charge pas la Source dans ce bout de code...

J'ai pensé à une solution alternative qui devrait marcher avec les fonctions year(today()) et un écart d'année fixe mais je voudrais quelque chose de plus propre si possible :

Annee:
Load distinct Year as Annee
Resident MasterCalendar
where Year <=year(today())
and Year >= year(today()) - 4
;

Je vous remercie par avance de votre aide.

2 Solutions

Accepted Solutions
Dref278
Creator
Creator

Bonsoir,

Si j'ai bien compris le problème, voici ce que je ferais :

1. Charger une table avec les années min et max. Cette table contiendra une seule ligne et deux champs :

Load

Max(Year) as Y_Max,

Min(Year) as Y_Min

from <Source>

where Source='Facturation'

 

2. Charger ta table source en effectuant une jointure full avec cette table. De cette façon, tu associeras tes années min et max avec toutes les lignes.

3. Reparcourir cette table en créant un troisième champ Filtre_Annee qui ne sera alimenté que pour les lignes ou   Y_Min<Year <Y_Max.

3. Supprimer les champs Y_Min et Y_Max pour qu'il ne traine pas dans l'appli

4. Utiliser le champ Filtre_Annee dans l'application.

 

Cdlt,

Pour avoir une bonne réponse, il faut poser la bonne question (Chat GPT, 2023)

View solution in original post

Cirdecp007
Creator
Creator
Author

C'est bon, il fallait ajouter un Noconcatenate

 

MasterCalendar:
Noconcatenate
LOAD *
Resident MasterCalendar2
where Year <= Y_Max
and Year >= Y_Min
;

View solution in original post

3 Replies
Dref278
Creator
Creator

Bonsoir,

Si j'ai bien compris le problème, voici ce que je ferais :

1. Charger une table avec les années min et max. Cette table contiendra une seule ligne et deux champs :

Load

Max(Year) as Y_Max,

Min(Year) as Y_Min

from <Source>

where Source='Facturation'

 

2. Charger ta table source en effectuant une jointure full avec cette table. De cette façon, tu associeras tes années min et max avec toutes les lignes.

3. Reparcourir cette table en créant un troisième champ Filtre_Annee qui ne sera alimenté que pour les lignes ou   Y_Min<Year <Y_Max.

3. Supprimer les champs Y_Min et Y_Max pour qu'il ne traine pas dans l'appli

4. Utiliser le champ Filtre_Annee dans l'application.

 

Cdlt,

Pour avoir une bonne réponse, il faut poser la bonne question (Chat GPT, 2023)
Cirdecp007
Creator
Creator
Author

Merci beaucoup.

Je pense que je ne suis pas loin du résultat mais cela ne marche pas avec mon script ci-dessous :

MasterCalendar2:
LOAD *
FROM [$(vs_appData_qvd_transform)MasterCalendar.qvd]
(qvd)
;
Join Load
Max(year(Date)) as Y_Max,
Min(year(Date)) as Y_Min
Resident Faits
where Source='Facturation'
;
MasterCalendar:
LOAD *
Resident MasterCalendar2
where Year <= Y_Max
and Year >= Y_Min
;

drop table MasterCalendar2 ;

 

En effet, il n'y a rien de charger dans MasterCalendar:

Alors que j'ai bien les Year différents dans chaque ligne de MasterCalendar2: et les années figées dans Y_Max et Y_Min. Peut-être faut il mettre un format particulier ou il y a une erreur de syntaxe.

Avez-vous une idée ?

Merci par avance.

Cirdecp007
Creator
Creator
Author

C'est bon, il fallait ajouter un Noconcatenate

 

MasterCalendar:
Noconcatenate
LOAD *
Resident MasterCalendar2
where Year <= Y_Max
and Year >= Y_Min
;