Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
jmialoundama
Specialist
Specialist

Problème historisation des données

Bonjour, 

J'ai un problème dans mon script qui historise des données. L'historisation se fait uniquement pour certaines données et par pour toutes les données. 

Voici mon jeu de test : 

 

Tmp_Histo_Data: 
LOAD avis,
     ordre,
     date#(date_encours,'DD/MM/YYYY') as date_encours,
     encours_aru
     ;
LOAD * INLINE [
avis,ordre,date_encours,encours_aru
12345,000787915,16/04/2023,1
45678,000793354,16/04/2023,1
75216,000754796,16/04/2023,1
15479,000879357,16/04/2023,1
2035A,000897542,16/04/2023,1
TS789,000896419,16/04/2023,1
85236,000756311,16/04/2023,1
];

 

Voici mon script : 

 

Let vCurrent= Week(Today());

Set vFilePath = 'C:\...\FactRaw_Encours_Stock_ARU_Histo.qvd';

trace $(vFilePath);


 IF (NOT isNull(qvdCreateTime('C:\....\Histo_Data.qvd'))) THEN
 
    Trace 'Le QVD Histo_Data existe';

     NoConcatenate
     Histo_Data:
     LOAD avis,
          ordre,
          encours_aru,
          date_encours,
           Week(date_encours) as Date_encours_numero_semaine
    Resident Tmp_FactRaw_Histo_Date_Encours;

         Concatenate(Histo_Data)
    
     LOAD * 
    FROM [C:\....\Histo_Data.qvd](qvd)
    WHERE NOT EXISTS (date_encours);
    
       Drop table Tmp_Histo_Data;
    
    Store FactRaw_Encours_Stock_ARU_Histo into 'C:\....\Histo_Data.qvd';
    

ELSE 
    TRACE 'Le QVD Histo_Dataexiste pas';
    TRACE 'Création du QVD Histo_Data';

     NoConcatenate
      Tmp_Histo_Data_$(vCurrent):
      LOAD avis,
           ordre,
           date_encours,
           encours_aru,
	       Week(date_encours) as Date_encours_numero_semaine
   Resident Tmp_Histo_Data;
   
  Store Tmp_Histo_Data_$(vCurrent) into 'C:\....\Histo_Data.qvd';
   
  Drop table Tmp_Histo_Data_$(vCurrent);
  Drop table Tmp_Histo_Data;
    
END IF; 

 

Le script historise mes dates uniquement pour l'avis = 12345 mais pas pour les autres : 

jmialoundama_1-1680514784811.png

Savez-vous d'où peux venir le problème ? Pourquoi l'historisation ne se fait pas sur l'ensemble des données ? 

Merci d'avance pour votre aide 🙂 

 

 

Labels (3)
1 Solution

Accepted Solutions
jmialoundama
Specialist
Specialist
Author

Oui effectivement à chaque fois, je souhaite concaténer les données UNIQUEMENT lorsqu'il 'y a une nouvelle date d'encours. 

Du coup j'ai mis en place  votre solution : 

  • Jeu de données : 
Tmp_Histo_Data: 
LOAD *,
     AutoNumberHash128(avis&ordre&date_encours) as histo_id
     ; 
LOAD avis,
     ordre,
     date#(date_encours,'DD/MM/YYYY') as date_encours,
     encours_aru
     ;
LOAD * INLINE [
avis,ordre,date_encours,encours_aru
12345,000787915,16/04/2023,1
45678,000793354,16/04/2023,1
75216,000754796,16/04/2023,1
15479,000879357,16/04/2023,1
2035A,000897542,16/04/2023,1
TS789,000896419,16/04/2023,1
85236,000756311,16/04/2023,1
];

 

Le script : 

 

Let vCurrent= Week(Today());
/*On récupère la date d'encours*/
Let vNewEncoursDate=Peek('date_encours',1,'Tmp_FactRaw_Histo_Data');

Set vFilePath = 'C:\Users\T0268667\Documents\QlikView\16_Stocks\Histo_Data.qvd';

trace $(vFilePath);


 IF (NOT isNull(qvdCreateTime('C:\Users\T0268667\Documents\QlikView\16_Stocks\Histo_Data.qvd'))) THEN
 
    Trace 'Le QVD FactRaw_Encours_Stock_ARU_Histo existe';
    
     NoConcatenate
     Histo_Data:
     LOAD avis,
          ordre,
          encours_aru,
          date_encours,
          histo_id,
           Week(date_encours) as Date_encours_numero_semaine
    Resident Tmp_FactRaw_Histo_Date_Encours;

    Concatenate(FactRaw_Encours_Stock_ARU_Histo)
    LOAD * 
    FROM [C:\Users\T0268667\Documents\QlikView\16_Stocks\Histo_Data.qvd](qvd)
    WHERE date_encours <> '$(vNewEncoursDate)';
   
    Drop table Tmp_Histo_Data;
    
    Store Histo_Data into 'C:\Users\T0268667\Documents\QlikView\16_Stocks\Histo_Data.qvd';
    

ELSE 
    TRACE 'Le QVD FactRaw_Encours_Stock_ARU_Histo existe pas';
    TRACE 'Création du QVD FactRaw_Encours_Stock_ARU_Histo';

     NoConcatenate
      Tmp_Histo_Data_Week_$(vCurrent):
      LOAD avis,
           ordre,
           date_encours,
           encours_aru,
           histo_id,
	       Week(date_encours) as Date_encours_numero_semaine
   Resident Tmp_FactRaw_Histo_Date_Encours;
   
  Store Tmp_Histo_Data_Week_$(vCurrent) into 'C:\Users\T0268667\Documents\QlikView\16_Stocks\Histo_Data.qvd';
   
  Drop table Tmp_Encours_ARU_Week_$(vCurrent);
  Drop table Tmp_FactRaw_Histo_Date_Encours;
    
END IF; 
 

 

La solution fonctionne comme je le souhaite. C'est à dire que les lignes sont insérés UNIQUEMENT si il y'a une nouvelle date. 

Merci pour votre aide 🙂 

View solution in original post

4 Replies
Dref278
Creator
Creator

Bonjour,

Je vois que dans le chargement du fichier TMP_Histo_Data, toutes les lignes sont à la même date.

Si les fichiers historisés sont identiques, le problème ne pourrait-il pas venir de la clause utilisée pour le chargement.

Après chargement de la première ligne,  date_encours existe dans le dataset.

Du coup, la clause WHERE NOT EXISTS (date_encours) empêcherait le chargement des autres lignes.

Cdlt,

Pour avoir une bonne réponse, il faut poser la bonne question (Chat GPT, 2023)
jmialoundama
Specialist
Specialist
Author

Bonjour @Dref278 , 

Merci pour votre retour. 

J'avais mis la clause WHERE NOT EXISTS car je souhaite que l'insert se fasse uniquement lorsque l'on a une nouvelle "date_encours"

 

 

Dref278
Creator
Creator

@jmialoundama,

Si vous n'avez qu'une seule nouvelle date à chaque fois, une solution consisterait à charger l'encours, à récupérer la date_encours dans une variable (Var_Date_new) , puis à venir concaténer l'historique en utilisant une clause where Date_encours <> Var_Date_new,

Après, attendez  un peu, d'autres auront peut être de meilleures solutions...

Pour avoir une bonne réponse, il faut poser la bonne question (Chat GPT, 2023)
jmialoundama
Specialist
Specialist
Author

Oui effectivement à chaque fois, je souhaite concaténer les données UNIQUEMENT lorsqu'il 'y a une nouvelle date d'encours. 

Du coup j'ai mis en place  votre solution : 

  • Jeu de données : 
Tmp_Histo_Data: 
LOAD *,
     AutoNumberHash128(avis&ordre&date_encours) as histo_id
     ; 
LOAD avis,
     ordre,
     date#(date_encours,'DD/MM/YYYY') as date_encours,
     encours_aru
     ;
LOAD * INLINE [
avis,ordre,date_encours,encours_aru
12345,000787915,16/04/2023,1
45678,000793354,16/04/2023,1
75216,000754796,16/04/2023,1
15479,000879357,16/04/2023,1
2035A,000897542,16/04/2023,1
TS789,000896419,16/04/2023,1
85236,000756311,16/04/2023,1
];

 

Le script : 

 

Let vCurrent= Week(Today());
/*On récupère la date d'encours*/
Let vNewEncoursDate=Peek('date_encours',1,'Tmp_FactRaw_Histo_Data');

Set vFilePath = 'C:\Users\T0268667\Documents\QlikView\16_Stocks\Histo_Data.qvd';

trace $(vFilePath);


 IF (NOT isNull(qvdCreateTime('C:\Users\T0268667\Documents\QlikView\16_Stocks\Histo_Data.qvd'))) THEN
 
    Trace 'Le QVD FactRaw_Encours_Stock_ARU_Histo existe';
    
     NoConcatenate
     Histo_Data:
     LOAD avis,
          ordre,
          encours_aru,
          date_encours,
          histo_id,
           Week(date_encours) as Date_encours_numero_semaine
    Resident Tmp_FactRaw_Histo_Date_Encours;

    Concatenate(FactRaw_Encours_Stock_ARU_Histo)
    LOAD * 
    FROM [C:\Users\T0268667\Documents\QlikView\16_Stocks\Histo_Data.qvd](qvd)
    WHERE date_encours <> '$(vNewEncoursDate)';
   
    Drop table Tmp_Histo_Data;
    
    Store Histo_Data into 'C:\Users\T0268667\Documents\QlikView\16_Stocks\Histo_Data.qvd';
    

ELSE 
    TRACE 'Le QVD FactRaw_Encours_Stock_ARU_Histo existe pas';
    TRACE 'Création du QVD FactRaw_Encours_Stock_ARU_Histo';

     NoConcatenate
      Tmp_Histo_Data_Week_$(vCurrent):
      LOAD avis,
           ordre,
           date_encours,
           encours_aru,
           histo_id,
	       Week(date_encours) as Date_encours_numero_semaine
   Resident Tmp_FactRaw_Histo_Date_Encours;
   
  Store Tmp_Histo_Data_Week_$(vCurrent) into 'C:\Users\T0268667\Documents\QlikView\16_Stocks\Histo_Data.qvd';
   
  Drop table Tmp_Encours_ARU_Week_$(vCurrent);
  Drop table Tmp_FactRaw_Histo_Date_Encours;
    
END IF; 
 

 

La solution fonctionne comme je le souhaite. C'est à dire que les lignes sont insérés UNIQUEMENT si il y'a une nouvelle date. 

Merci pour votre aide 🙂