Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Problème de calcul sur des sous-totaux de colonne avec formules

Bonjour,

J’ai créé un Tableau simple sur Qlikview avec 2 dimensions (nom fournisseur, numéro article), et ensuite j’ai créé des expressions avec des formules de calculs.

Une expression me calcule par exemple le montant facturé par article, dans une autre j’ai mis en place une formule de calcul me permettant de déterminer ma date de prochaine rupture du produit, dont voici la formule :

date(date(today()+num((([Quantité disponible])+[Encours achats confirmés])/(((sum([Quantité à facturer])+[Qté RAL cdes client totale])/((today()-[Date première réception])))),'# ##0.'))
-
num(avg(if([Code magasin]='TEST',null(),(if([Date commande achat]<2000,([Date de rangement]-[Date commande achat entete]),([Date de rangement]-[Date commande achat]))))),'# ##0.'))

Cette formule marche très bien et me renvoi la bonne date sur chacune de mes lignes.

Par contre je cherche à compter le nombre de ligne avec une date comprise dans une période au niveau du sous total, et là impossible, cela ne fonctionne pas au niveau de la ligne des sous totaux.

Pour cela j’ai rajouté une nouvelle colonne avec la formule suivante juste pour me renvoyer une valeur simple (dans mon cas 1) pour les lignes répondant à mon critère en me disant que grâce à cela il arrivera à me faire mes sous totaux, mais sans plus de résultat.

=if(date(date(today()+num((([Quantité disponible])+[Encours achats confirmés])/(((sum([Quantité à facturer])+[Qté RAL cdes client totale])/((today()-[Date première réception])))),'# ##0.'))
-
num(avg(if([Code magasin]='GLOTIN',null(),(if([Date commande achat]<2000,([Date de rangement]-[Date commande achat entete]),([Date de rangement]-[Date commande achat]))))),'# ##0.'))
<(
today()+30),'1','')

Je n’arrive toujours pas à afficher de sous totaux pour ces 2 colonnes. Vous avez une idée ?

 

Merci d’avance,

3 Replies
martin59
Specialist II
Specialist II

Bonjour,

Vous pouvez déjà utiliser la fonction dimensionality() afin de repérer si vous êtes sur une ligne de sous-total ou non et modifier le calcul effectué selon ce critère.

Pour vous aider sur votre formule, pourriez-vous la détailler en francais svp ?

Martin Favier

Not applicable
Author

Bonjour,

Merci de votre réponse, effectivement la fonction Dimensionality() me permet de "contrôler" l'affichage sur ma ligne total et j'arrive donc, par exemple, a afficher du texte, ou bien une somme simple comme dans l'exemple ci-dessous

if(dimensionality()=1,'J affiche ce que je veux',date(date(today()+num((([Quantité disponible])+[Encours achats confirmés])/(((sum([Quantité à facturer])+[Qté RAL cdes client totale])/((today()-[Date première réception])))),'# ##0.'))
-
num(avg(if([Code magasin]='TEST',null(),(if([Date commande achat]<2000,([Date de rangement]-[Date commande achat entete]),([Date de rangement]-[Date commande achat]))))),'# ##0.'))

Par contre, je n'arrive pas à afficher une condition me permettant de compter le nombre de lignes sur lesquelles j'ai une date inférieure à today()+30.

Pour le détail de ma formule cela va être un peu compliqué, en "gros" :

IF(mon article possède un critére= X ou Y dans un des champs de ma table article

ALORS( j'affiche la date de réappro de mon article que j'obtient en calculant la date à laquelle je vais arriver en rupture - le nombre de jour moyen que prend mon fournisseur pour me réapprovisionner)

//Condition avant mon calcul

if([critére]=X' or Y',date(

//Calcul de la date ou mon produit va arriver en rupture

date(today()+num((([Quantité disponible])+[Encours achats confirmés])/(((sum([Quantité à facturer])+[Qté RAL cdes client totale])/((today()-[Date première réception])))),'# ##0.'))

// Calcul du nombre de jour moyen que mon fournisseur prend pour me livrer.

-num(avg(if([Code magasin]='XXX',null(),(if([Date commande achat]<2000,([Date de rangement]-[Date commande achat entete]),([Date de rangement]-[Date commande achat]))))),'# ##0.')))

A la suite de ce calul j'obtient pour chacun de mes articles la date à laquelle je dois passer commande pour éviter de tomber en rupture. Par contre je n'arrive pas à compter le nombre d'article qui auront comme critère d'avoir une date inférieure à celle d'aujourdh'ui +30 jours.

Merci de votre aide,

Not applicable
Author

Bonjour,

Pour avoir un total qui fonctionne vous devez indiquer à Qlikview quelle agrégation vous souhaitez.

Sur une formule simple sum(Montant) Qlikview sait que le total est la somme des montants sur l'ensemble de la dimension, par contre sur un if() il ne peut le deviner, il faut donc lui préciser.

Pour cela il faut donc faire : sum(aggr( votre formule avec le if(), Dimensions de votre tableau))

En espérant que cela puisse vous aider.

Pauline