Qlik Community

Groupe des Utilisateurs Francophones

Announcements
Coming your way, the Qlik Data Revolution Virtual Summit. October 27-29. REGISTER
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Contributor II
Contributor II

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
Highlighted
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
Highlighted
Partner
Partner

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

Highlighted
Creator
Creator

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

num(OBJ_Année_référence)

Highlighted
Contributor II
Contributor II

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.

Highlighted
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)"}>}

Highlighted
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

Highlighted
Contributor II
Contributor II

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.

Highlighted
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 ) )

Highlighted
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.

Highlighted
Contributor II
Contributor II

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)