Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
denis_reigadas
Contributor
Contributor

Alternative multi sélections If

Bonjour,
N'ayant pas trouvé de réponses / solutions à mon problème autre qu'utiliser à la chaîne les conditions "IF", je vous soumet le sujet.
En fonction de 3 critères à prendre en compte (dimensions 3D), je dois classifier mes "unités" et leur affecter un code couleur.
Exemple ci joint.
Jusqu'à présent, j'empile les conditions "si" pour classer chaque unité et leur affecter le bon critère de sortie.
Existe-t-il une méthode plus intelligente pour calculer ce critère et l'affecter à mes unités?
J'ai creusé "ApplyMap", sans succès ..
Il doit exister une autre approche, mais je sèche depuis un moment et persiste dans l'empilement de "If".
Intéressé par vos expériences respectives,
Amicalement,

1 Solution

Accepted Solutions
Taoufiq_Zarra

Bonjour @denis_reigadas ,

Je viens de voir ta réponse, ya actuelement un problème de notification, donc sans Tag (par @)  ya pas de notification.

oui intervalMatch, je te propose ce script, c'est un peu long, mais ça aidera à bien organiser les critères.

la table initiale:

Capture.PNG

Le script:

 

Input:
load * inline [
Id,hauteur,largeur,longueur
1,100,120,50
2,520,15,25
3,20,15,25
];


Critere1:
LOAD * INLINE [
Start, End, Map
0, 40, 1
40,999999999, 2
];

join (Input)
Inner Join IntervalMatch ( hauteur )

LOAD Start, End
Resident Critere1;

LEFT JOIN (Input)

LOAD * RESIDENT Critere1;

DROP TABLE Critere1;

DROP FIELD Start, End;

Critere2:
LOAD * INLINE [
Start2, End2, Map2
0, 29, 3
30,59, 4
60,99999999,5
];
join (Input)
Inner Join IntervalMatch ( largeur )

LOAD Start2, End2
Resident Critere2;

LEFT JOIN (Input)

LOAD * RESIDENT Critere2;

DROP TABLE Critere2;

DROP FIELD Start2, End2;
Critere3:
LOAD * INLINE [
Start3, End3, Map3
0, 29, 6
30,40, 7
40,99999999,8
];

join (Input)

Inner Join IntervalMatch ( longueur )

LOAD Start3, End3
Resident Critere3;
LEFT JOIN (Input)

LOAD * RESIDENT Critere3;

DROP TABLE Critere3;

DROP FIELD Start3, End3;

Mappingcouleur:

mapping load * inline [
CodeMap,Couleur
    1_3_6, Bleu
    1_3_7, Bleu
    1_3_8, Bleu
    1_4_6, Bleu
    1_4_7, Orange
    1_4_8, Rouge
    1_5_6, Orange
    1_5_7, Orange
    1_5_8, Rouge
    2_3_6, Rouge
    2_3_7, Orange
    2_3_8, Noir
    2_4_6, Rouge
    2_4_7, Rouge
    2_4_8, Noir
    2_5_6, Rouge
    2_5_7, Rouge
    2_5_8, Noir
];

Final:

load Id,hauteur,largeur,longueur,applymap('Mappingcouleur',Map&'_'&Map2&'_'&Map3) as ccouleur resident Input;

drop table Input;

 

 

output:

Capture.PNG

 

Regards,
Taoufiq ZARRA

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

(you can mark up to 3 "solutions") 😉

View solution in original post

3 Replies
Taoufiq_Zarra

Bonjour @denis_reigadas 

est ce  que tu peux partager un exemple de données et le output souhaité ?

Regards,
Taoufiq ZARRA

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

(you can mark up to 3 "solutions") 😉
denis_reigadas
Contributor
Contributor
Author

Bonsoir Taoufiq,

Les données de départ sont des critères dimensions longueurs, largeurs et hauteurs, permettant de classer des unités de production en code couleur.

En pièce jointe dans le post de départ,  critère 1 = hauteur, critère 2 = largeur et critère 3 = longueur.

A chaque "classe" est associé un code (couleur ou autre).

Chaque unité de production supporte ces données dimensions (longueur, largeur, hauteur)

En sortie, chaque unité sera classée selon les différentes possibilités. 

Exemple, pour toute unité, hauteur inférieure à 40, largeur de 39, et longueur =29 alors code Bleu.

J'utilise l'accumulation de "Si" pour décrire tous mes cas.

J'ose croire en une solution plus robuste, switch case ?

Je creuse INTERVALMATCH...

Denis

Taoufiq_Zarra

Bonjour @denis_reigadas ,

Je viens de voir ta réponse, ya actuelement un problème de notification, donc sans Tag (par @)  ya pas de notification.

oui intervalMatch, je te propose ce script, c'est un peu long, mais ça aidera à bien organiser les critères.

la table initiale:

Capture.PNG

Le script:

 

Input:
load * inline [
Id,hauteur,largeur,longueur
1,100,120,50
2,520,15,25
3,20,15,25
];


Critere1:
LOAD * INLINE [
Start, End, Map
0, 40, 1
40,999999999, 2
];

join (Input)
Inner Join IntervalMatch ( hauteur )

LOAD Start, End
Resident Critere1;

LEFT JOIN (Input)

LOAD * RESIDENT Critere1;

DROP TABLE Critere1;

DROP FIELD Start, End;

Critere2:
LOAD * INLINE [
Start2, End2, Map2
0, 29, 3
30,59, 4
60,99999999,5
];
join (Input)
Inner Join IntervalMatch ( largeur )

LOAD Start2, End2
Resident Critere2;

LEFT JOIN (Input)

LOAD * RESIDENT Critere2;

DROP TABLE Critere2;

DROP FIELD Start2, End2;
Critere3:
LOAD * INLINE [
Start3, End3, Map3
0, 29, 6
30,40, 7
40,99999999,8
];

join (Input)

Inner Join IntervalMatch ( longueur )

LOAD Start3, End3
Resident Critere3;
LEFT JOIN (Input)

LOAD * RESIDENT Critere3;

DROP TABLE Critere3;

DROP FIELD Start3, End3;

Mappingcouleur:

mapping load * inline [
CodeMap,Couleur
    1_3_6, Bleu
    1_3_7, Bleu
    1_3_8, Bleu
    1_4_6, Bleu
    1_4_7, Orange
    1_4_8, Rouge
    1_5_6, Orange
    1_5_7, Orange
    1_5_8, Rouge
    2_3_6, Rouge
    2_3_7, Orange
    2_3_8, Noir
    2_4_6, Rouge
    2_4_7, Rouge
    2_4_8, Noir
    2_5_6, Rouge
    2_5_7, Rouge
    2_5_8, Noir
];

Final:

load Id,hauteur,largeur,longueur,applymap('Mappingcouleur',Map&'_'&Map2&'_'&Map3) as ccouleur resident Input;

drop table Input;

 

 

output:

Capture.PNG

 

Regards,
Taoufiq ZARRA

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

(you can mark up to 3 "solutions") 😉