Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Nov. 20th, Qlik Insider - Lakehouses: Driving the Future of Data & AI - PICK A SESSION
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Set analysis avec une dimension d'un tableau

Bonjour,

Je charge des données de masse salariale par activité. Un objectif est défini pour chaque activité, il consiste à prendre comme référence le montant de l'année N-1 ou N-2 selon l'activité considérée.

Je voudrais calculer l'objectif avec un set analysis. L'année à considérer est chargée dans le champ OBJ_Année_référence. Si je mets une valeur en dur, cela fonctionne (par exemple 2012) :

=sum({1<Année ={"2012"}, Mois_num ={"<=$(=V_Dernier_mois)"}>} MSV_Mt_coût_total)

Par contre si je mets le champs OBJ_Année_référence, j'obtiens zéro. J'ai essayé en mettant Only(OBJ_Année_référence) mais cela ne résoud pas le problème.

Savez-vous comment faire pour dire au set analysis de prendre la valeur de OBJ_Année_référence pour la valeur de Activité de la même ligne du tableau ?

Je joins un qvw pour exemple.

Merci pour votre aide !

Thierry

1 Solution

Accepted Solutions
rlp
Creator
Creator

La Set Analysis est très ptarique mais dès lors que l'on veut exprimer une condition d'égalité entre deux champs, il vaut mieux utiliser un if d' où :

=sum({1<Mois_num ={"<=$(=V_Dernier_mois)"}>} if( Année = OBJ_Année_référence , MSV_Mt_coût_total) )

View solution in original post

9 Replies
yvesqlik
Partner - Contributor III
Partner - Contributor III

Essaie: Année={$(=only({1} OBJ_Année_référence))}

almamy_diaby
Creator
Creator

applique la fonction num() à OBJ_Année_référence.

num(OBJ_Année_référence)

Anonymous
Not applicable
Author

Non ce n'est pas ça. Je ne peux pas utiliser Only({1} OBJ_Année_référence) car j'ai 2 valeurs d'année différentes, liées à des valeurs du champ Activité différentes.

Ce n'est pas non plus un problème de prise en compte du format numérique.

almamy_diaby
Creator
Creator

Puisque vous 2 valeurs différentes d'années,fixez l'année sur l'année en cours : max(OBJ_Année_référence)

=sum({1<Année ={$(=Max(OBJ_Année_référence))}, Mois_num ={"<=$(=V_Dernier_mois)"}>}

rlp
Creator
Creator

La Set Analysis est très ptarique mais dès lors que l'on veut exprimer une condition d'égalité entre deux champs, il vaut mieux utiliser un if d' où :

=sum({1<Mois_num ={"<=$(=V_Dernier_mois)"}>} if( Année = OBJ_Année_référence , MSV_Mt_coût_total) )

Anonymous
Not applicable
Author

Non, ce que je veux c'est :

sur la ligne Activité = ANP, considérer OBJ_Année_référence = 2011 pour prendre le montant MSV_Mt_coût_total de 2011,

et sur les autres lignes, considérer OBJ_Année_référence = 2012 pour prendre le montant MSV_Mt_coût_total de 2012.

almamy_diaby
Creator
Creator

if(Activité=ANP ,sum({$<Année ={$(=Max(OBJ_Année_référence -1))}>}  MSV_Mt_coût_total ) ,

sum({$<Année ={$(=Max(OBJ_Année_référence ))}>}  MSV_Mt_coût_total ) )

rlp
Creator
Creator

J'avais bien compris et c'est là que la SA montre ses limites car la valeur que vous voulez sélectionner dans le champ année est dépendante de la valeur d'autres champs. Vous avez alors deux possibilités:

1°) soit vous passez par un aggr() qui vous permet d'agréger plus finement, par exemple par Activité, de sorte à figer la valeur de OBJ_année_référence pour que Only() vous renvoie bien une valeur. il ne faut alors pas oublier la fonction d'agrégation externe au aggr() , ce qui donnerait

sum( aggr(

          sum({1<Année={$(=Only(OBJ_année_référence))}>} ...)

          ,

          Activité

     ))

2°) Soit vous utiliser l'associativité de QV. En effet, lorsque QV calcule la somme, il parcourt la table enregistrement par enregistrement et la valeur de Activité impose la valeur de OBJ_année_référence (sauf pb dans le modèle de données) de sorte que le if( Année=OBJ...) ne gardera que les enregistrements pour lesquels le champ année servant à calculer la mesure est égal au champ OBS... imposé par Activité.

En espérant ne pas avoir été trop elliptique.

Anonymous
Not applicable
Author

Merci pour votre aide, je pense que ce que vous proposez permet de résoudre le problème :

=sum({1<Mois_num ={"<=$(=V_Dernier_mois)"}>} if( Année = OBJ_Année_référence , MSV_Mt_coût_total) )

en reprenant un peu le modèle de données (car actuellement je n'ai pas de lien direct entre Année et OBJ_Année_référence)