Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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,
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:
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:
Bonjour @denis_reigadas
est ce que tu peux partager un exemple de données et le output souhaité ?
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
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:
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: