Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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 🙂