Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
brunobertels
Master
Master

Trouver et remplacer une valeur dans un champ

Bonjour à tous 

J'ai un problème de remplacement de valeur 

Dans une table j'ai un champ "Indicateurs" dans lequel j'ai une Valeur 'Pause' répéter deux fois. 

pour chaque nom en effet j'ai une fois la valeur 'Pause' en gras dans mon tableau qui se trouve toujours sous la valeur 'Post-travail' .

Cette valeur Pause en Gras correspond à la somme dans valeur qui se trouve en dessous 

Je cherche à remplacer cette valeur Pause par 'HorsProd'

NomIndicateursNombreTemps
Nom1Attente50h29'19
Nom1Traitement50h53'03
Nom1Appel entrant50h53'03
Nom1Post-travail50h12'23
Nom1Pause10h01'03
Nom1Pause10h01'03
    
Nom2Attente181h23'36
Nom2Traitement202h09'32
Nom2Appel entrant161h51'47
Nom2Rappel20h17'24
Nom2Numérotation20h00'21
Nom2Post-travail180h42'05
Nom2Pause30h29'21
Nom2Pause10h00'13
Nom2Personnelle20h29'08

 

Dans un premier temps avec l'aide de la communauté j'ai pu y arriver grâce au champs Nombre en ajoutant un flag max(nombre) et une clause where 

Ca marche si la valeur Nombre de Pause est > à al veleur Nombre de Pause ( Nom2) 

 

Mais voir Nom1 

Si la Valeur du champ Nombre Pause est égale à la valeur du champ Nombre Pause çà ne fonctionne plus

 

Aussi ma question est comment modifier le champ INDICATEURS pour remplacer le texte Pause qui est toujours en dessous de la valeur Post-travail par la valeur 'HorsProd' ? 

 

Merci par avance pour votre aide 

1 Solution

Accepted Solutions
ezkurdim
Contributor II
Contributor II

Hello,

En partant du principe que c'est toujours la valeur qui se trouve en dessous de 'Post-travail' qu'il faut remplacer et que ton load order est OK (on peut modifier code facilement si ce n'est pas le cas) alors essaye par exemple ceci:

DataTemp:
Load * Inline [
Nom,Indicateurs,Nombre,Temps
Nom1,Attente,5,0h29'19
Nom1,Traitement,5,0h53'03
Nom1,Appel entrant,5,0h53'03
Nom1,Post-travail,5,0h12'23
Nom1,Pause,1,0h01'03
Nom1,Pause,1,0h01'03
Nom2,Attente,18,1h23'36
Nom2,Traitement,20,2h09'32
Nom2,Appel entrant,16,1h51'47
Nom2,Rappel,2,0h17'24
Nom2,Numérotation,2,0h00'21
Nom2,Post-travail,18,0h42'05
Nom2,Pause,3,0h29'21
Nom2,Pause,1,0h00'13
Nom2,Personnelle,2,0h29'08
];

NoConcatenate
Data:
  Load
	Nom,
	Nombre,
	Temps,
    if(Nom = peek(Nom),if(previous(Indicateurs)='Post-travail','Hors-Prod',Indicateurs),Indicateurs) as Indicateurs
Resident DataTemp;

drop table DataTemp;

 

View solution in original post

3 Replies
ezkurdim
Contributor II
Contributor II

Hello,

En partant du principe que c'est toujours la valeur qui se trouve en dessous de 'Post-travail' qu'il faut remplacer et que ton load order est OK (on peut modifier code facilement si ce n'est pas le cas) alors essaye par exemple ceci:

DataTemp:
Load * Inline [
Nom,Indicateurs,Nombre,Temps
Nom1,Attente,5,0h29'19
Nom1,Traitement,5,0h53'03
Nom1,Appel entrant,5,0h53'03
Nom1,Post-travail,5,0h12'23
Nom1,Pause,1,0h01'03
Nom1,Pause,1,0h01'03
Nom2,Attente,18,1h23'36
Nom2,Traitement,20,2h09'32
Nom2,Appel entrant,16,1h51'47
Nom2,Rappel,2,0h17'24
Nom2,Numérotation,2,0h00'21
Nom2,Post-travail,18,0h42'05
Nom2,Pause,3,0h29'21
Nom2,Pause,1,0h00'13
Nom2,Personnelle,2,0h29'08
];

NoConcatenate
Data:
  Load
	Nom,
	Nombre,
	Temps,
    if(Nom = peek(Nom),if(previous(Indicateurs)='Post-travail','Hors-Prod',Indicateurs),Indicateurs) as Indicateurs
Resident DataTemp;

drop table DataTemp;

 

brunobertels
Master
Master
Author

Bonjour 

Merci beaucoup pour ta solution . 

De mon coté j'avais finalement trouvé ceci 

if(previous(INDICATEURS) ='Post-travail',replace(INDICATEURS,'Pause','Hors_Prod'),INDICATEURS) as [INDICATEURS]

 

Mais je vais testé ta proposition 

Bruno

ezkurdim
Contributor II
Contributor II

Hello Bruno,

Ne connaissant pas le contexte de tes data, tu peux probablement dans ma solution proposée te passer du premier test if (test sur le nom précédent).

Belle journée.

Ray