Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
dimitri18
Contributor III
Contributor III

Charger 6 derniers mois incrémental

Bonjour à tous,

J'ai eu beau chercher sur internet je n'ai pas trouvé de réponse qui me conviennent.

J'ai effectué un chargement incrémental sur les données à gros volume de ce type : "nomtable_2018_4.QVD"  ou 2018 = Year et 4 = month

J'ai deux questions :

1. est-il possible de charger dans l'application de restitution une fois toutes les données et ensuite uniquement les nouvelles données provenant des QVD ? Si tel est le cas je vous en serai très reconnaissant.

2. Sinon j'ai un soucis surement idiot, pour limiter le volume de données à charger, je cherche à charger uniquement les 6 derniers mois.

J'ai fais quelque chose comme ça :

Let vdata = num(Year(Today()),'0000') & '_' & (num(Month(Today()))-6);

Le soucis étant si le résultat me ramène à l'année précédente comme c'est le cas actuellement, j'ai le résultat suivant : 2018_-2.

Je ne sais pas comment lui dire de faire 2017_11.

Je vous remercie d'avance de l'aide que vous pourriez m'apporter.

Cordialement,

Dimitri

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

Salut Dimitri,

Si tout tes QVD sont identiques (même nombre de champs), tu n’as pas besoin d’utiliser le mot clé Concatenate car QlikView effectue une concaténation automatique des tables ayant la même structure. Tu peux utiliser le code ci-dessous

for i=6 to 0

  Let vdata = Text(Date(MonthStart(ToDay(), -$(i)), 'YYYY_M'));

 

  Data:

  load * from

  ...$(vdata).qvd

next

Si il est possible qu’au fil du temps un nouveau champ s’ajoute dans les nouveaux QVD, il faudra utiliser le mot clé Concatenate pour forcer la concaténation.  Dans ce cas, il faut que la table existe. On peut charger un premier QVD en dehors de la boucle, puis charger les autres dans la boucle:

Let vdata = Text(Date(MonthStart(ToDay(), -6), 'YYYY_M'));

 

Data:

Load

* from

  ...$(vdata).qvd

for i=5 to 0

  Let vdata = Text(Date(MonthStart(ToDay(), -$(i)), 'YYYY_M'));

 

  Concatenate (Data)

  load * from

  ...$(vdata).qvd

next

View solution in original post

4 Replies
sfatoux72
Partner - Specialist
Partner - Specialist

‌ssalut Dimitri,

voici une première réponse pour créer ta variable vdata

Let vdata = Text(Date(MonthStart(ToDay(), -6), 'YYYY_MM'));

sfatoux72
Partner - Specialist
Partner - Specialist

‌oups,

SI tu veux seulement 4 pour le mois et pas 04, il faut l’écrire comme ceci :

Let vdata = Text(Date(MonthStart(ToDay(), -6), 'YYYY_M'));

dimitri18
Contributor III
Contributor III
Author

Bonjour Sébastien,

merci de votre réponse.

Cependant j'ai un soucis avec votre solution. Cela me charge uniquement le mois de Novembre 2017 et non de Nov2017 à Mai2018...

Je m'en suis inspirer pour faire des concatenate pour chaque mois jusqu'au 6ème mois de données.

Voici ce que j'ai fais

Let v5data = Text(Date(MonthStart(ToDay(), -5), 'YYYY_M'));

Let v6data = Text(Date(MonthStart(ToDay(), -6), 'YYYY_M'));

data :

load * from

...$(v5data).qvd

Concatenate(data)

load * from

...$(v6data).qvd

et cela pour les 6 mois de données.

Cependant, je ne suis pas sur que ma solution soit très conventionnelle. Avez-vous une autre démarche plus "propre" ?  j'ai essayé un système de boucle mais je n'arrive pas à l'adapter à mon besoin.

Merci de votre aide.

Dimitri

sfatoux72
Partner - Specialist
Partner - Specialist

Salut Dimitri,

Si tout tes QVD sont identiques (même nombre de champs), tu n’as pas besoin d’utiliser le mot clé Concatenate car QlikView effectue une concaténation automatique des tables ayant la même structure. Tu peux utiliser le code ci-dessous

for i=6 to 0

  Let vdata = Text(Date(MonthStart(ToDay(), -$(i)), 'YYYY_M'));

 

  Data:

  load * from

  ...$(vdata).qvd

next

Si il est possible qu’au fil du temps un nouveau champ s’ajoute dans les nouveaux QVD, il faudra utiliser le mot clé Concatenate pour forcer la concaténation.  Dans ce cas, il faut que la table existe. On peut charger un premier QVD en dehors de la boucle, puis charger les autres dans la boucle:

Let vdata = Text(Date(MonthStart(ToDay(), -6), 'YYYY_M'));

 

Data:

Load

* from

  ...$(vdata).qvd

for i=5 to 0

  Let vdata = Text(Date(MonthStart(ToDay(), -$(i)), 'YYYY_M'));

 

  Concatenate (Data)

  load * from

  ...$(vdata).qvd

next