Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
J'ai besoin de catégoriser des commandes en fonction de leur contenu.
Ma règle se porte sur les articles de la FamilleProduit = A :
Par numéro de commande (NumCde), je vérifie la présence dans une même commande d’au moins un article de 5 sous-famille :
Sous-Famille 1
Sous-Famille 2
Sous-Famille 3
Sous-Famille 4
Sous-Famille 5
Si c’est le cas, je flag ma commande « Ok ».
Pour toutes les autres commandes, je flag « Autres ».
Avez-vous une idée de comment je peux contrôler la présence des différentes Sous famille dans chaque commande ?
J'ai essayé via une fonction count distinct mais ce n'est pas assez fin.
Merci d'avance
NumCde | Article | SsFamille | FamilleProduit | Résultat attendu |
0000001 | 000001 | Sous-Famille 1 | A | Ok |
0000001 | 000002 | Sous-Famille 2 | A | Ok |
0000001 | 000003 | Sous-Famille 3 | A | Ok |
0000001 | 000004 | Sous-Famille 4 | A | Ok |
0000001 | 000005 | Sous-Famille 5 | A | Ok |
0000001 | 000006 | Sous-Famille 4 | A | Ok |
0000002 | 000001 | Sous-Famille 1 | A | Autres |
0000002 | 000002 | Sous-Famille 2 | A | Autres |
0000002 | 000004 | Sous-Famille 4 | A | Autres |
Bonjour,
Voici une solution :
DATA:
LOAD *
INLINE [
NumCde, Article, SsFamille, FamilleProduit
0000001, 000001, Sous-Famille 1, A
0000001, 000002, Sous-Famille 2, A
0000001, 000003, Sous-Famille 3, A
0000001, 000004, Sous-Famille 4, A
0000001, 000005, Sous-Famille 5, A
0000001, 000006, Sous-Famille 4, A
0000002, 000001, Sous-Famille 1, A
0000002, 000002, Sous-Famille 2, A
0000002, 000004, Sous-Famille 4, A
];
Left Join(DATA)
LOAD
NumCde,
If(Count(DISTINCT SubField(SsFamille, ' ', 2)) = 5, 'OK', 'Autres') as TEST
Resident DATA
Group By NumCde
;
Aurélien
Bonjour,
Voici une solution :
DATA:
LOAD *
INLINE [
NumCde, Article, SsFamille, FamilleProduit
0000001, 000001, Sous-Famille 1, A
0000001, 000002, Sous-Famille 2, A
0000001, 000003, Sous-Famille 3, A
0000001, 000004, Sous-Famille 4, A
0000001, 000005, Sous-Famille 5, A
0000001, 000006, Sous-Famille 4, A
0000002, 000001, Sous-Famille 1, A
0000002, 000002, Sous-Famille 2, A
0000002, 000004, Sous-Famille 4, A
];
Left Join(DATA)
LOAD
NumCde,
If(Count(DISTINCT SubField(SsFamille, ' ', 2)) = 5, 'OK', 'Autres') as TEST
Resident DATA
Group By NumCde
;
Aurélien
au final, pas besoin du subfield, un Count(DISTINCT SsFamille) devrait suffire.
Bonjour,
Merci pour ta réponse.
J'ai réadapté ta formule, mais ça ne fonctionne pas.
IF(subfield(Spécification3,' ', 2)<>'PC','AUTRES',IF(COUNT(DISTINCT Mid(Spécification3,Len(subfield(Spécification3,' ', 1))+Len(subfield(Spécification3,' ', 2))+2,20))=5,'OK','AUTRES'))
J'ai besoin de ma fonction subfield pour tronquer mon champ "Spécification3".
1- subfield(Spécification3,' ', 2) = me donne la famille produit
2 - Mid(Spécification3,Len(subfield(Spécification3,' ', 1))+Len(subfield(Spécification3,' ', 2))+2,20) = me donne la sous famille
C'est quand j'ajoute la condition 1 que ça plante.
Merci d'avance.
bonjour,
ppour vérifier la présence d'une chaine dans un champ, tu peux utiliser la fonction substringcount()
En ajoutant le subfield(Spécification3,' ', 2) dans le group by ?
Parfait ça marche
Merci beaucoup