Qlik Community

Ask a Question

Groupe des Utilisateurs Francophones

Announcements
Join us at the Cloud Data and Analytics Tour! REGISTER TODAY
cancel
Showing results for 
Search instead for 
Did you mean: 
steph24350
Contributor III
Contributor III

Mapping

Bonjour,

J'aimerais effectuer un mapping au niveau de ma "Désignation article"

Ci-dessous un script de mapping pour supprimer les accents d’une chaîne de caractère qui est donc la « Désignation article »

Aussi, j’aimerais que lorsque la « Désignation article » importée comporte   MINI BEIGNETS 5X35 FOURRES PAS, et bien que cela soit modifié en MINI BEIGNETS FRAMBOISE

Mon script fonctionne bien pour la modification des accents mais pas pour cette modification ci-dessus.

Pourriez-vous m'aider, ai-je fait une erreur dans le script ?

 

Merci à vous !

 

// Table de mapping ==> Suppression des accents
//*********************************************

MapSupprimeAccent:
Mapping LOAD * INLINE [
From, To


MINI BEIGNETS 5X35 FOURRES PAS, MINI BEIGNETS FRAMBOISE
à, a
á, a
â, a
ã, a
é, e
ê, e
í, i
ó, o
ô, o
õ, o
ú, u
À, A
Á, A
Â, A
Ã, A
É, E
Ê, E
Í, I
Ó, O
Ô, O
Õ, O
Ú, U
ç, c
Ç, c
];

 

NoConcatenate
DataSage:
LOAD
        'SAGE_'&RowNo() as No_Facture_Sage,
       F1,
     F2,
     [code du client final],
     [libéllé client final],

     [Code commercial],
     [Nom commercial],
     TEXT([Ref article]) as [Ref article],
     MapSubString('MapSupprimeAccent',upper(rtrim(left([Désignation article],30)))) as [Désignation article],
     [Nb de cartons facturés], 

 

4 Replies
Taoufiq_Zarra
Master II
Master II

Bonjour @steph24350 

à mon avis ya aucun problème dans le script sauf qu'il faut faire attention à la limite 30 dans left([Désignation article],30)

30 c'est exactement la taille de MINI BEIGNETS 5X35 FOURRES PAS

donc upper(rtrim(left('MINI BEIGNETS 5X35 FOURRES PAS dsjhflkdjfh sflkdfh d',30))) retournera MINI BEIGNETS 5X35 FOURRES PAS et avec MapSubString le résultat est MINI BEIGNETS FRAMBOISE MapSubString joue le role de remplacer puisque il ya pas de texte ni avant ni après (limite de 30)

voilà un exemple :

cas avec 30

Map1:
mapping load * inline [
From, To
MINI BEIGNETS 5X35 FOURRES PAS,MINI BEIGNETS FRAMBOISE
à, a
];

Data:

load *,MapSubString('Map1',upper(rtrim(left([Désignation article],30)))) as [NewDésignation article] inline [
Désignation article
MINI BEIGNETS 5X35 FOURRES PAS dsjhflkdjfh sflkdfh
dskjfmds à
]

output:

Capture.PNG
le reste de texte : dsjhflkdjfh sflkdfh est invisible à cause de la limite 30

cas2: limite 40 ou sans limite :

Map1:
mapping load * inline [
From, To
MINI BEIGNETS 5X35 FOURRES PAS,MINI BEIGNETS FRAMBOISE
à, a
];

Data:

load *,MapSubString('Map1',upper(rtrim(left([Désignation article],40)))) as [NewDésignation article] inline [
Désignation article
MINI BEIGNETS 5X35 FOURRES PAS dsjhflkdjfh sflkdfh
dskjfmds à
]

output:

 

Capture2.PNG

on a bien le reste du texte

 

 

Regards,
Taoufiq ZARRA

"Please LIKE posts and "Accept as Solution" if the provided solution is helpful "

(you can mark up to 3 "solutions") 😉
brunobertels
Specialist II
Specialist II

Bonjour 

plutot que de faire un mapping pour une seule occurrence à remplacer , je te propose d'utiliser la fonction REPLACE() 

soit ici ( çà çà marche ) 

   MapSubString('MapSupprimeAccent',upper(rtrim(left(replace([Désignation article],' MINI BEIGNETS 5X35 FOURRES PAS','MINI BEIGNETS FRAMBOISE')30)))) as [Désignation article],

 

sinon dans la table d'origine : 

load 

...

replace([Désignation article],' MINI BEIGNETS 5X35 FOURRES PAS','MINI BEIGNETS FRAMBOISE') as [Désignation article],

...

from ...

 

 

steph24350
Contributor III
Contributor III
Author

Merci pour les réponses !

Concernant le REPLACE

Si j'ai plusieurs remplacements à effectuer, puis-je toujours me servir du REPLACE ?  Et si oui comment faire ?

 

Merci à vous

Bien cordialement,

 

brunobertels
Specialist II
Specialist II

Bonjour 

oui il est possible de faire plusieurs remplacement à la volée .. 

Il faut imbriquer la fonction replace comme ceci 

replace(replace([MADIMENSION],'ValeurA','ValeurA1'),'ValeurB',ValeurB1')) et ainsi de suite