Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour à tous,
Suite à une mise à jour de l'EAI traitant les données, un champ timestamp "version" que je recevais en format "YYYY-MM-DD hh:mm:ss" a été modifié avec un chiffre en début (et des _): "5 YYYY-MM-DD_hh_mm_ss" ou "10 YYYY-MM-DD_hh_mm_ss"
Je cherche un moyen dans mon script d'enlever le chiffre avant le timestamp pour que mes maquettes fonctionnent à nouveau car là tout plante 😕
J'ai essayé ,if(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),Timestamp(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),'YYYY-MM-DD hh:mm:ss') pour uniformiser mais le chiffre en début de champ, qui est aléatoire, bloque la correction.
Vous auriez une solution pour dire à Qlik d'enlever ce qui se trouve avant YYYY ? Pour qu'après la correction d'uniformisation s'applique?
Merci +++ d'avance et bonne journée
(j'ai demandé un changement à la source pour revenir au format précédent mais ça va prendre quelques semaines et entre temps les données arrivant aux mauvais format ne sont pas prises en compte)
Bonjour
Cà devrait résoudre le cas :
[Table1]:
load *,
if(len(version)=19,
Timestamp(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),'YYYY-MM-DD hh:mm:ss'),
if(index(version,' ',1)<=3 ,
timestamp(
Timestamp#(
date(subfield(subfield(version,' ',2),'_',1),'YYYY-MM-DD')
&' '&
time#(replace(right(version,8),'_',':'),'hh:mm:ss')
,'YYYY-MM-DD hh:mm:ss'))
)) as version_OK
;
LOAD * INLINE
[
date.date,version
18/05/2022,10 2022-05-23_08_39_08
19/05/2022,1 2022-05-23_08_39_08
20/05/2022,2022-05-23_08_39_08
](delimiter is ',');
Hello,
L'idée serait d'utiliser la fonction subfield comme cela : subfield(ChampDate,' ')
Et de vérifier que la 1ere valeur extraite est bien une date.
Si ca n'est pas le cas, alors on est dans le nouveau format de date.
Bonjour
Pour supprimer le chiffre aléatoire en début, enlever les '_' , les remplacer par ':' =>
if(index('1 2022-05-23_08_39_08',' ',1)=2 ,
Timestamp#(
date(subfield(subfield('1 2022-05-23_08_39_08',' ',2),'_',1),'YYYY/MM/DD')&' '&
replace(right('1 2022-05-23_08_39_08',8),'_',':') ,'YYYY-MM-DD HH:MM:SS') ,
Timestamp#(version,'YYYY-MM-DD_hh_mm_ss')
)
Merci bien de vos retours, je n'arrive pas à obtenir le champ corrigé sans le chiffre aléatoire mais je continue de chercher avec vos aides.
Bonjour
mettre if (index(…) <=3 et non
=2 afin de tenir compte des nombres au début à 1 ou 2 chiffres
Merci du complément, j'ai essayé avec <=3 mais ça ne fonctionne pas non plus. J'ai l'impression de ne pas être loin mais je suis toujours bloqué avec le mauvais format.
Si quelqu'un à le même soucis au final j'ai ajouté:
Right(version,19) as version_ok
avant la partie d'harmonisation:
if(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),Timestamp(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),'YYYY-MM-DD hh:mm:ss') et c'est bon!
Bon je me suis réjoui trop vite, le champ modifié sans les chiffres aléatoire du début ('YYYY-MM-DD_hh_mm_ss') n'est pas reconnu comme un timestamp donc la correction des _ en : ne fonctionne pas....keep searching
..je l'aurais un jour, je l'aurai !
Bonjour
Cà devrait résoudre le cas :
[Table1]:
load *,
if(len(version)=19,
Timestamp(Timestamp#(version,'YYYY-MM-DD_hh_mm_ss'),'YYYY-MM-DD hh:mm:ss'),
if(index(version,' ',1)<=3 ,
timestamp(
Timestamp#(
date(subfield(subfield(version,' ',2),'_',1),'YYYY-MM-DD')
&' '&
time#(replace(right(version,8),'_',':'),'hh:mm:ss')
,'YYYY-MM-DD hh:mm:ss'))
)) as version_OK
;
LOAD * INLINE
[
date.date,version
18/05/2022,10 2022-05-23_08_39_08
19/05/2022,1 2022-05-23_08_39_08
20/05/2022,2022-05-23_08_39_08
](delimiter is ',');
Oui top, merci bien pour l'aide!