Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Nov. 20th, Qlik Insider - Lakehouses: Driving the Future of Data & AI - PICK A SESSION
cancel
Showing results for 
Search instead for 
Did you mean: 
jmialoundama
Specialist
Specialist

Historisation QVD

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.

9 Replies
cje
Employee
Employee

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

jmialoundama
Specialist
Specialist
Author

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é.

fletexier
Contributor
Contributor

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.

jmialoundama
Specialist
Specialist
Author

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)

cje
Employee
Employee

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

jmialoundama
Specialist
Specialist
Author

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.

cje
Employee
Employee

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

fletexier
Contributor
Contributor

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.

jmialoundama
Specialist
Specialist
Author

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 .

1.JPG

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);