Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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
ssalut Dimitri,
voici une première réponse pour créer ta variable vdata
Let vdata = Text(Date(MonthStart(ToDay(), -6), 'YYYY_MM'));
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'));
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
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