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: 
celkaenel
Contributor III
Contributor III

Qlik Sense : Pivot table avec mesures non sommer

Bonjour,

Je dois réaliser dans Qlik Sense ce genre de tableau (évolution des prix par rapport au quantité) :

celkaenel_0-1685952044993.png

Exemple de données sources :

celkaenel_1-1685952370647.png

J'avais pensé le faire avec une Pivot Table, mais mon problème est que le prix dois apparaitre non sommer et il peux y avoir plusieur prix pour une même quantité. 

Avez-vous des ideés ? 

Merci d'avance

11 Replies
brunobertels
Master
Master

Bonjour 

Est ce que quelque chose comme çà te conviendrait ? : 

brunobertels_0-1686155429339.png

 

Si oui une fois chargé tes données 

 

Dans un TCD 

En dimension ITEM ( ligne ) 

En colonne : Year 

Puis les formules suivantes 

Quantité P1 

Sum({<Prix={'$(=min(Prix,1))'}>}[Qté recue])

Prix P1 

only({<Prix={'$(=min(Prix,1))'}>}Prix)

Quantité P2 

Sum({<Prix={'$(=min(Prix,2))'}>}[Qté recue])

Prix P2

only({<Prix={'$(=min(Prix,2))'}>}Prix)

 

Total Quantité 

Sum({<Prix=>} TOTAL [Qté recue])

Total Year

num(aggr(

Sum({<Prix={'$(=min(Prix,1))'}>}[Qté recue])*only({<Prix={'$(=min(Prix,1))'}>}Prix)
+
Sum({<Prix={'$(=min(Prix,2))'}>}[Qté recue])*only({<Prix={'$(=min(Prix,2))'}>}Prix)

,Item,Year),'€ #00,00')

 

Si plusieurs Item et plusieurs Année agréger ces formules Aggr( la formule , ITEM , YEAR) 

 

J'espère que çà t'aidera 

celkaenel
Contributor III
Contributor III
Author

Bonjour,

Désolé pour la réponse tardive, je viens d'essayer la solution.

Merci c'est se que je voulais !

Par contre si plusieurs Item et plusieurs Année, ca ne marche pas. 

celkaenel_0-1687443003482.png

Est se que j'ai fait une faute  dans mes formule ? Voici mes formules : 

  • Quantité P1  : Aggr(Sum({<[Prix ]={'$(=min([Prix ],2))'}>}[Qté recue]), Item, YEAR)
  • Prix P1  : Aggr(only({<[Prix E]={'$(=min([Prix ],1))'}>}[Prix]), Item, YEAR)

D'avance merci

brunobertels
Master
Master

Bonjour 

 

Regarde si cela te convient , j'ai testé avec 2 Item ( A et B ) mais pas avec 2 années mais je pense que çà devrait marcher 

 

créer un TCD 

dim ITEM en ligne 

Year en colonne 

 

Quantité P1 

aggr(if(rank(-Prix) = 1 , sum([Qté recue])),Year, Item, Prix)

Prix P1 

aggr(min(Prix,1),Item) only(aggr(min(Prix,1),Item))

Quantité P2 

aggr(if(rank(-Prix) = 2 , sum([Qté recue])),Year, Item, Prix)

Prix P2 

aggr(min(Prix,2),Item) ou  only(aggr(min(Prix,2),Item))  

 

Total Quantité 

Sum({<Prix=>} [Qté recue]) ou juste sum(Qté recue)  

 

Total Year 

num(

aggr(sum(Prix *[Qté recue]), Item, Year)

,'€ #00,00')

 

celkaenel
Contributor III
Contributor III
Author

Bonjour,

Merci. Je viens de tester et ca fonctionne bien.

Par contre j'ai encore une question, je voudrais cacher la colonne  si c'est null mais je n'y arrive pas surtout si deux année.

celkaenel_1-1688567017786.png

 

celkaenel_0-1688566998426.png

 

Voici ma condition dans la propriété "show column if" de mon champs Quantité 2 :

sum(aggr(if(rank(-[PO_UNIT_PRICE]) = 2 , sum([Qty Received])),Creation_date_YEAR, Item, [PO_UNIT_PRICE]))>0

Ou me suis je trompé ?

 

brunobertels
Master
Master

Bonjour 

"Afficher la colonne si : Vous pouvez afficher ou masquer une colonne selon qu'une condition est vraie ou fausse."

soit si  = 0 : masquée , si = 1 : affichée 

çà donnerait pour toi : 

if( sum(aggr(if(rank(-[PO_UNIT_PRICE]) = 2 , sum([Qty Received])),Creation_date_YEAR, Item, [PO_UNIT_PRICE]))>0, 1 , 0 ) 

si la valeur de la formule est > 0 , afficher 1 ( afficher la colonne ) , si non afficher  0 ( masquer la colonne ) 

celkaenel
Contributor III
Contributor III
Author

Bonjour,

Merci de votre réponse.

Malheureusement ça ne marche pas. La colonne s'affiche dans tout les cas.

Que puis-je faire ?

Merci

brunobertels
Master
Master

Bonjour 

On peut tenter çà 

 if( sum(aggr(if(rank(-[PO_UNIT_PRICE]) = 2 , sum([Qty Received])),Creation_date_YEAR, Item, [PO_UNIT_PRICE]))=0, 1 , 0 ) 

ou if( isnull( 

sum(aggr(if(rank(-[PO_UNIT_PRICE]) = 2 , sum([Qty Received])),Creation_date_YEAR, Item, [PO_UNIT_PRICE]))

) , 1 , 0 ) 

celkaenel
Contributor III
Contributor III
Author

Cette fois ca m'enlevève bien les colonnes, mais aussi celle avec des valeurs.  C'est vriament bizarre

Voici toutes mes expressions, j'ai peut-etre fait une erreur  :

  1. Dimension / ligne : Item
  2. Dimension / colonne : Creation_date_YEAR
  3. Measures :
    • Qty 1 : aggr(if(rank(-[PO_UNIT_PRICE]) = 1 , sum([Qty Received])),Creation_date_YEAR, Item, [PO_UNIT_PRICE])
    • Price 1 : aggr(min([PO_UNIT_PRICE],1),Item, Creation_date_YEAR)
    • Qty 2 : aggr(if(rank(-[PO_UNIT_PRICE]) = 2 , sum([Qty Received])),Creation_date_YEAR, Item, [PO_UNIT_PRICE])
    • Price 2 : aggr(min([PO_UNIT_PRICE],2),Item, Creation_date_YEAR)

 

 

 

brunobertels
Master
Master

Bonjour 

Cette fois ca m'enlève bien les colonnes, mais aussi celle avec des valeurs.  C'est vraiment bizarre =>

Alors en fait c'est normal un TCD crée un produit cartésien des données , et comme on utilise des dimensions calculées pour afficher les P1 P2 etc par année çà coince . 

il faut peut être chercher a changer le modèle de données et créer des champs dans le script , notamment pour l'ordre des Prix ( P1 P2 ) et des quantités Type Quantité Q1 Q2 en fonction du prix. 

Pas eu le temps de tester çà m'ai qd j'ai un moment j'y regarde