Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
delphinewalter
Contributor III
Contributor III

TCD - compter champ 1 si champ 2 non vide

Bonjour, 

 

j'ai un problème avec une fonction de count(distinct...).

j'ai un tableau qui me met pour chaque année le CA généré par les nouveaux clients exclusivement de l'année en question. Je voudrais pouvoir compter le nombre de nouveaux clients correspondants.

le tableau actuellementle tableau actuellement

 Capture.png = le tableau actuellement.

voici ma formule de décompte des clients : 

if(sum({$<TIERS_annee_creation={'$(=max(CalendarYear)-1)'},V_annee={'$(=max(CalendarYear)-1)'}>}V_CA_HT)>0,1,0)*count({$<TIERS_annee_creation={'$(=max(CalendarYear)-1)'},V_annee={'$(=max(CalendarYear)-1)'}>}distinct TIERS_code)

 et voici le résultat que ça me donne (et mon problème) :

Capture2.PNG

j'ai bien 1 seul nouveau client à qui j'ai réellement facturé quelque chose. Il y a un autre TIERS_code qui a reçu des choses mais non facturées (et qui d'ailleurs n'apparaît pas dans le tableau) : je considère donc que ce n'est pas un client à proprement parlé. 

Comment faire pour que le nombre de la catégorie parente ("eshop" dans ma capture d'écran), soit égal au nombre de clients "réels" ? en logique, je ferais "pour chaque client, si la somme du CA > 0, compte 1 sinon compte 0" et ensuite la somme de tout ça, mais je n'arrive pas à le traduire en formule (peut-être que la logique n'est pas la bonne non plus ?).

Merci pour votre aide !

16 Replies
delphinewalter
Contributor III
Contributor III
Author

OK merci c’est plus clair que l’explication dans la base de connaissance 😊
sylvain_piccarreta

Il faudrait donc utiliser comme je te l'ai suggéré 

=count({$<V_CA,HT={">0"},TIERS_annee_creation=.......

ne pas oublier de laisser avant ton champ indiquant le client le mot distinct.

En effet, cela filtrera pour ne prendre que les clients dont ils ont au moins une ligne de CA >0 (V_CA,HT={">0"}). Le distinct permettra de ne comptabiliser le client uniquement 1 fois à chaque quelque soit le nombre de ligne de CA >0 qu'il y aurait pour l'année.

delphinewalter
Contributor III
Contributor III
Author

Oui mais justement, ça c'est ce que je fais actuellement et ça ne fonctionne pas car 1 facture = plusieurs lignes et c'est le total de ces lignes qui égale 0 sur lequel devrait porter la condition.
sylvain_piccarreta

peux-tu me mettre un fichier qvw en exemple (quelques valeurs fictives) afin que je puisse tester et voir où est le souci.

 

Merci

delphinewalter
Contributor III
Contributor III
Author

Bonjour Sylvain,

Voici un fichier test. J'ai aussi enlevé les classifications de tiers, donc ça te fait une longue liste, mais tu verras qu'il y en a qui sont comptés malgré un CA = 0.
En gros, dans ma table transactions j'ai PUNHT, PGHT et CA_HT. En théorie, CA_HT = PUNHT * QTE mais mes remises sur facture, par exemple, n'ont pas de PUNHT, seulement un CA_HT. Donc pour une facture F1 donnée je peux avoir :
Tiers
Facture
article
PGHT
PUNHT
QTE
CA_HT
T1
F1
A1
1
0,8
1
0,8
T1
F1
A2
1
0,8
2
1,6
T1
F1
REMISE



-2,4
Tu vois bien que la facture est à 0, mais aucun CA_HT ne l'est. D'où il me faudrait une contrainte qui me fasse si la somme de CA_HT pour F1 = 0, alors on ne compte pas T1. Ou alors dans le chargement de ma table transaction, il faudrait que je rajoute un champ « montant total de facture » qui soit calculé pour chaque facture.

Delphine

sylvain_piccarreta

Merci.

 

Cela m'a permis de faire des tests.

 

voici la formule qui semble convenir : =if(Sum(CA_HT)<>0,count(distinct Tiers),0)

delphinewalter
Contributor III
Contributor III
Author

Alors c'est ce que j'ai fait au début, et les clients avec CA = 0 n'apparaissent effectivement plus, mais ils sont tout de même comptés dans le total final. C'est-à-dire que pour une catégorie donnée, je vais avoir 3 client qui apparaissent par exemple, mais le total de la catégorie sera 7.