Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
nathroche
Contributor III
Contributor III

variables interactives

Bonjour,

J'ai créé dans mon script une variable durée calculant la durée d'une modalité de soin selon les dates de début et de fin de la modalité:

DD as "DEMod",

DF as "DFMod",

    Case

    When MODALITE.DF Is Null And MODALITE.DD >= '01/01/2016' and MODALITE.DD <= '31/08/2016' Then To_Date('31/08/2016', 'dd/mm/yyyy') - MODALITE.DD

     When MODALITE.DF Is Null And MODALITE.DD < '01/01/2016' Then To_Date('31/08/2016', 'dd/mm/yyyy') - To_Date('31/12/2015', 'dd/mm/yyyy')

     When MODALITE.DF >= '31/08/2016' And MODALITE.DD >= '01/01/2016' and MODALITE.DD <= '31/08/2016'Then To_Date('31/08/2016', 'dd/mm/yyyy') - MODALITE.DD

     When MODALITE.DF >= '31/08/2016' And MODALITE.DD < '01/01/2016' Then To_Date('31/08/2016', 'dd/mm/yyyy') - To_Date('31/12/2015', 'dd/mm/yyyy')

     When MODALITE.DF <= '31/08/2016' And MODALITE.DD >= '01/01/2016' and MODALITE.DD <= '31/08/2016' Then MODALITE.DF - MODALITE.DD

     When MODALITE.DF <= '31/08/2016' and MODALITE.DF >= '01/01/2016' And MODALITE.DD < '01/01/2016' Then MODALITE.DF - To_Date('31/12/2015', 'dd/mm/yyyy')

  End As "DuréeMod2016",

Seulement comme j'ai plusieurs années, je répète donc ce bout de code sur les années voulues. De plus la période est fixe, ici de janvier à août. Pensez-vous qu'il serait possible de rendre tout cela un peu plus intéractif: laisser l'utilisateur le choix des date de la période ?

Merci!

Nathalie

14 Replies
sfatoux72
Partner - Specialist
Partner - Specialist

Quand tu dis "Laisser l'utilisateur le choix des dates de la période", si il y a plusieurs utilisateur qui veulent avoir chacun leurs périodes et pouvoir les modifier rapidement dans l'interface, ceci ne pourra pas se faire dans le script.

Mais si tu as un utilisateur, ou plusieurs utilisateurs qui vont tous utiliser la même période, ces période pourront être définie dans un fichier Excel qui sera chargé dans l'application et on pourra rendre ça dynamique dans le script

nathroche
Contributor III
Contributor III
Author

Bonjour Sébastien,

Merci pour cette réponse.

En fait, l'utilisateur étant principalement moi, voir deux collègues en plus, mais je voudrais éviter d'aller à chaque fois dans le code pour changer la période, histoire de répondre plus vite aux demandes.

Quand tu parles d'un fichier Excel, c'est à dire? Avec toutes les dates possibles?

Not applicable

Bonjour,

Moins "jolie" et moins performant mais tu peux :

- mettre une liste de sélection ou zone de saisis dans ton interface

- l'utilisateur sélectionne ça date de début et date de fin

- puis avec des déclencheurs vous impactez la sélection sur vos data (vous recalculez DuréeMod2016 à chaque fois)

nathroche
Contributor III
Contributor III
Author

Bonjour,

Je vais essayer cette solution déjà. Je ne suis encore jamais passée par les déclencheurs, donc à tester!

sfatoux72
Partner - Specialist
Partner - Specialist

Bonjour,

Voici un exemple de ce qui peut être réalisé.

J'ai créer vos champs DuréeModyyyy, mais je pense qu'il est plus simple de travailler avec les champs AnnéeMod et DuréeMod qui ne vont changer de nom en fonction des années considérées.

Si vous désirez changer  les années ou la période à considérer, vous pouvez modifier les variable depuis l'interface et relancer le chargement. Attention, n'oubliez pas de commenter l'initialisation des variables dans le script.

Le calcul de la durée se faisant après cout, vous pouvez commenter dans votre code la partie de la requete effectuant le calcul.

// table simulant vosdonnées
Modalité:
LOAD * INLINE [
IDMod, DEMod, DFMod, Info
1, 01/03/2014, 25/05/2014, Modalité hors des années considérés
2, 01/05/2014, , Modalité sans date de fin couvrant toutes les années considérées
3, 05/06/2014, 18/03/2015, Modalité commançant avant une année considérée et se terminant dans une année considérée
4, 04/01/2015, 06/03/2015, Modalité commançant et se terminant dans la même année considéré
5, 22/03/2015, 05/03/2016, Modalité commançant et se terminant dans deux années considérés différente
6, 01/03/2016, 09/05/2017, Modalité commançant dans une année considérée et se terminant dans une année non considérée
]
;

// Ces variables pourront être commentée après la première exécution,
// elles pourront être modifiées depuis l'interface
SET vsYears = '2015,2016'; // Années à considérer
SET vsPeriodFrom = '01/01'; // Début de la période
SET vsPeriodTo = '31/08'; // Fin de la période

// Initialisation de la table Durée
Durée:
LOAD *
Inline [IDMod, YearMod, DuréeMod];

FOR Each tmpYear in $(vsYears)
LET tmpPeriodFrom = Date#('$(vsPeriodFrom)/$(tmpYear)');
LET tmpPeriodTo = Date#('$(vsPeriodTo)/$(tmpYear)');

Concatenate(Durée)
LOAD
     
IDMod,
     
$(tmpYear) as YearMod,
     
if(DFMod > '$(tmpPeriodTo)' or Len(DFMod)=0, '$(tmpPeriodTo)', DFMod)
      -
if(DEMod < '$(tmpPeriodFrom)', '$(tmpPeriodFrom)', DEMod) as DuréeMod,
     
if(DFMod > '$(tmpPeriodTo)' or Len(DFMod)=0, '$(tmpPeriodTo)', DFMod)
      -
if(DEMod < '$(tmpPeriodFrom)', '$(tmpPeriodFrom)', DEMod) as DuréeMod$(tmpYear)
Resident Modalité
Where  ( DEMod >= '$(tmpPeriodFrom)' and  DEMod <= '$(tmpPeriodTo)' )
       
or ( DFMod >= '$(tmpPeriodFrom)' and  DFMod <= '$(tmpPeriodTo)' )
       
or ( DEMod < '$(tmpPeriodFrom)' and  (DFMod > '$(tmpPeriodTo)' or Len(DFMod)=0) );

NEXT

// Suppression des variables temporaires
SET tmpYear = ;
SET tmpPeriodFrom = ;
SET tmpPeriodTo = ;

nathroche
Contributor III
Contributor III
Author

Merci beaucoup pour cette réponse complète!

Déjà je vais essayer de bien comprendre le code 🙂

et ensuite j'essaye! Je vous tiens au courant.

sfatoux72
Partner - Specialist
Partner - Specialist

Bonjour Natalie,

Avez-vous pu essayer? Avez-vous des questions sur le code ?

sfatoux72
Partner - Specialist
Partner - Specialist

Bonjour,

Si des réponses vous ont aidés, merci de les spécifier comme "Utile".

Si vous désirez recommander une réponse aux autres membre de la communauté, cliquez sur recommander.

Et si la réponse résout votre problème, merci de mettre la question comme résolue, afin d'aider les autres membres de la communauté.

Merci

sfatoux72
Partner - Specialist
Partner - Specialist

Bonjour Natalie,

Pas nouvelle de votre part 😞

Avez-vous pu tester la solution ?