- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Correction champ timestamp
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)
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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 ',');
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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')
)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Bonjour
mettre if (index(…) <=3 et non
=2 afin de tenir compte des nombres au début à 1 ou 2 chiffres
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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 !
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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 ',');
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Oui top, merci bien pour l'aide!