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 :
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 🙂
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 :
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 🙂
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,
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"
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...
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 :
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 🙂