Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
Je souhaite historiser des données sous Qlik Sense.
Chaque jour des stocks sont chargés dans une table SQL. Cependant cette table SQL ne récupère que les données de la veille.
Dans mon QVD je souhaite historiser toutes les dates
Voici mon QVD :
STOCKS_HEBDO:
load
Codearticle,
Quantitystock
DATE ;
SQL
SELECT
STKL.CODEARTICLE,
STKL.QTE_STOCK,
to_date(STKL.DATSTK,'DD/MM/YY') as DATSTK,
FROM STOCK STKL
;
store STOCKS_LOGVAD_HEBDO into [lib://\F_STOCKS_$(vAnnee).qvd] (qvd);
IF FileSize('lib://QVD_Rec (omnium_dec1)/DWH\F_ODS_STOCKS_HEBDO_$(vAnnee).qvd')> 0 THEN
TRACE( 'QVD Exists' );
//On concatenate les données chargé précédemment en insant uniquement les dates qui n'existe pas dans la table finale
Concatenate
load *
From [lib://\F_STOCKS_$(vAnnee).qvd] (qvd)
Where not exists ("DATE");
Else
Trace('QVD not exists');
End if
store STOCKS_LOGVAD_HEBDO into [lib://\F_STOCKS_$(vAnnee).qvd] (qvd);
Le problème est que les données se sont pas historisé dans mon QVD. Le QVD ne garde pas les dates et prend uniquement les dates de la veille comme dans ma table SQL.
Bonjour,
Si votre demande concerne la méthode permettant d’historiser les données à partir de fichiers QVD, voici un doc qui explique en détail la méthode (cela est expliqué pour QlikView mais ça marche de la même manière avec Qlik Sense).
Cdt
Christophe Jouve
Principal Solution Architect
The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer.
De : Juliana Mialoundama
Envoyé : mercredi 7 novembre 2018 14:15
À : Christophe Jouve <Christophe.Jouve@qlik.com>
Objet : - Historisation QVD
Merci beaucoup pour la documentation Christophe.
Je souhaite uniquement faire de l'insert, update donc j'ai suivi l'étape du doc que vous m'avez envoyé en comparant ce que j'avais et c'est exactement ce que j'ai fais dans mon script mais rien n'est historisé.
Bonjour,
Je pense que vous n'avaez pas besoin de la ligne suivante :
store STOCKS_LOGVAD_HEBDO into [lib://\F_STOCKS_$(vAnnee).qvd] (qvd);
qui se trouve au milieu su script.
Vous devez charger dans la table STOCK_HEBDO (qui portera peut être mal son nom du coup) , toutes les nouvelles données ainsi que toutes les données existantes dans le QVD et qui ne sont pas dans la table des données de la veille.
C'est ensuite cette table que vous devez stocker dans le QVD, pas la table STOCK_LOGVAD_HEBDO.
Par rapport à votre script, ça donnerais ça :
STOCKS_NEW:
load
Codearticle,
Quantitystock
DATE ;
SQL
SELECT
STKL.CODEARTICLE,
STKL.QTE_STOCK,
to_date(STKL.DATSTK,'DD/MM/YY') as DATSTK,
FROM STOCK STKL
;
IF FileSize('lib://QVD_Rec (omnium_dec1)/DWH\F_ODS_STOCKS_HEBDO_$(vAnnee).qvd')> 0 THEN
TRACE( 'QVD Exists' );
//On concatenate les données chargé précédemment en insant uniquement les dates qui n'existe pas dans la table finale
Concatenate
load *
From [lib://\F_STOCKS_$(vAnnee).qvd] (qvd)
Where not exists ("DATE");
Else
Trace('QVD not exists');
End if
store STOCKS_NEW into [lib://\F_STOCKS_$(vAnnee).qvd] (qvd);
Par contre, assurez vous que la date soit bien la clé unique de vos données, sans quoi, vous risquez de passer à côté de certaines données. Si une même date peut se retrouver sur plusieurs lignes, utilisez la clé unique de vous enreg pour en tester l'existence.
Bonjour Frédéric,
Merci pour votre retour. J'ai modifié mon script du coup. Par contre je me demandais également si le problème ne venait pas de l'instruction "Store" ? Car je mets le store à la fin du end if au lieu de le mettre avant le else.
En ce qui concerne le problème de clé unique, c'est bien la clé unique car il n'y a jamais la même date dans la table SQL (c'est une table SQL qui reprend les stocks de la veille donc la date de la veille change tout le temps)
Juliana,
Pour rappel, voici le modèle du traitement de base pour un insert/update :
/////////////////////////////////////////////////////////////////////////
// chargement initial des données (historique)
// cette étape n’est faite qu’une seule fois au départ du chargement de votre historique
// elle n’est pas reprise ensuite
////////////////////////////////////////////////////////////////////////
historique:
load * inline
[num_transaction,champ,date,valeur
1,A,01/01/2018,1
2,B,02/02/2018,2
3,C,03/03/2018,3
4,D,04/04/2018,4
];
// stockage dans fichier QVD pour conservation
store historique into (qvd);
// on efface la table de l'historique ici pour l'exemple
drop table historique;
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
// MECANISME DE MISE A JOUR
// ici : insert et update de données
/////////////////////////////////////////////////////////////////////////
historique:
// on commence par charger la tranche de la mise à jour
// on suppose ici que cette tranche ne contient que les données à ajouter/mettre à jour dans la table de l'historique
// on n'a pas besoin de tester sur la date par exemple parce que certaines données seront mises à jour sur un autre critère que la date
load * inline
[num_transaction,champ,date,valeur
3,C,04/03/2018,30
5,E,05/05/2018,5
];
// puis on charge les données historique
// à partir du fichier QVD contenant toute l’historique
Concatenate
load * from (qvd)
// comme on fait un insert/update, on ne teste pas sur la date mais sur la transaction permettant d'identifier un enreg de manière unique (ici num_transaction)
where not exists (num_transaction);
// on conserve la nouvelle historique dans le fichier QVD
store historique into (qvd);
// si vous rechargez ce fichier, vous verrez que la ligne du produit C a été mise à jour et la ligne du produit E a été rajoutée
Dans votre cas, ce qui n’allait pas concernait le store qui ne contenait que la tranche de la mise à jour.
Cdt.
Christophe Jouve
Principal Solution Architect
Direct: +33 1 55 62 65 54
Mobile: +33 6 76 24 22 47
Email: Christophe.Jouve@qlik.com
Qlik
Tour Initiale
1 Terrasse Bellini
92919 Paris la Defense
qlik.com<http://www.qlik.com/>
Téléchargez gratuitement QlikView
http://www.qlikview.com/fr/explore/experience/free-download
The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon, this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from any computer.
De : Juliana Mialoundama
Envoyé : mercredi 7 novembre 2018 17:07
À : Christophe Jouve <Christophe.Jouve@qlik.com>
Objet : Re: - Historisation QVD
Merci pour l'exemple , mais que voulez vous dire par : "Dans votre cas, ce qui n’allait pas concernait le store qui ne contenait que la tranche de la mise à jour " ?
Cdt.
Pour rappel, le lien dans l’aide sur toute la méthode et les cas possibles :
https://help.qlik.com/en-US/sense/September2018/Subsystems/Hub/Content/Sense_Hub/LoadData/use-QVD-files-incremental-load.htm
Cdt
Christophe Jouve
Principal Solution Architect
De : Juliana Mialoundama
Envoyé : mercredi 7 novembre 2018 17:33
À : Christophe Jouve <Christophe.Jouve@qlik.com>
Objet : Re: - Historisation QVD
Non, vous l'avez mis au bon endroit, car au premier chargement (lorsque le qvd n'existe pas encore), il faut bien le créer, ce qui ne sera pas le cas, si vous le placez avant le else.
Le test sur la date va effectivement fonctionner, mais je vous conseille tout de même de faire le test avec la clé unique de chaque ligne, ce serait plus propre.
Bonjour Frédéric,
Juste pour vous dire que le code fonctionne bien comme je le souhaite. C'est à dire que le QVD garde en mémoire les donnée de la veille.
Cependant j'ai un soucis, il ne garde pas bien les quantités de stocks .
Le 06/11 j'avais environs 4 650 en stock et en lançant le code aujourd'hui il me met 2 en stock. Ceci viendrai t-il du code ?
STOCK_HEBDO:
load
CODEINTERNEARTICLE,
CODESAISONGESTION,
QTE_STKP,
DATSTK,
ID_JOUR;
SQL
SELECT
STKL.CODEINTERNEARTICLE,
STKL.CODESAISONGESTION,
STKL.QTE_STKP,
to_date(STKL.DATSTK,'DD/MM/YY') as DATSTK,
to_char(to_date(STKL.DATSTK,'DD/MM/YY'),'YYYYMMDD') as ID_JOUR,
FROM STK STKL
WHERE to_char(to_date(STKL.DATSTK,'DD/MM/YY'),'YYYYMMDD') >= $(vAnnee)0101
and to_char(to_date(STKL.DATSTK,'DD/MM/YY'),'YYYYMMDD') <= $(vAnnee)1231
;
If FileSize('lib://QVD_Rec (omnium_dec1)/DWH\F_ODS_STOCKS_LOGVAD_HEBDO_$(vAnnee).qvd')> 0 THEN
Trace ('Le QVD existe');
//On concatenate les données chargé précédemment en insant uniquement les dates qui n'existe pas dans la table finale
Concatenate(STOCKS_HEBDO)
Load *
From [lib://QVD_Rec (omnium_dec1)/DWH\F_ODS_STOCKS_LOGVAD_HEBDO_$(vAnnee).qvd](qvd)
Where not exists ("Cal - ID Jour");
Else
Trace ('le QVD est inexistant');
End if;
store STOCKS_HEBDO into [lib://QVD_Rec (omnium_dec1)/DWH\F_ODS_STOCKS_LOGVAD_HEBDO_$(vAnnee).qvd] (qvd);