Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour à tous,
Je viens de commencer à utiliser Qlikview et je me pose des questions sur la fonction Aggr.
J'ai des données qui peuvent se présentent sous cette forme :
Event_Id EventDataDef_Id Value
712 500 12
712 501 1
712 502 0
823 500 18
823 501 1
823 502 1
469 500 34
469 501 1
469 502 0
Je souhaite obtenir la somme du champ Value lorsque l'EventDataDef_Id=500 mais selon la valeur des EventDataDef_Id 501 et 502.
Pour résumer si Value (de 501)=1 et que Value (de 502)=0 alors sommer la valeur (ici 12+34=46)
Je ne sais pas du tout comment faire cela, ni même si c'est possible.
Merci d'avance pour votre aide.
L' expression proposée par Aurélien me semble bien correcte mais fonctionne que si 501=1 et 502=0 et bonjour les dégâts si le volume de données est important.
Mon avis est qu'il y a un erreur de modélisation. La bonne patrique sera d'extraire les valeurs des paramètrs 501 et 502 commes attributs de la table et dès lors division du nombre de record par 3 ou plus si il y autres valeurs que 501,502 pour Event DataDef_ID.
Data:
LOAD
Event_ID,
Value
From Table_Origine
Where Event DataDef_ID = 500;
Left join (Data) LOAD Event_ID, Value AS Param1 where Event DataDef_ID = 501;
Left join (Data) LOAD Event_ID, Value AS Param2 where Event DataDef_ID = 502;
Drop Table_Origine;
Bàv,
Michael
Bonjour,
Je vous propose ceci:
Sum(
Aggr(
Sum({<EventDataDef_Id={500}>}Value) * fabs(Sum({<EventDataDef_Id={501}>} Value) - Sum({<EventDataDef_Id={502}>} Value) ), Event_Id
)
)
Cordialement,
Aurélien
L' expression proposée par Aurélien me semble bien correcte mais fonctionne que si 501=1 et 502=0 et bonjour les dégâts si le volume de données est important.
Mon avis est qu'il y a un erreur de modélisation. La bonne patrique sera d'extraire les valeurs des paramètrs 501 et 502 commes attributs de la table et dès lors division du nombre de record par 3 ou plus si il y autres valeurs que 501,502 pour Event DataDef_ID.
Data:
LOAD
Event_ID,
Value
From Table_Origine
Where Event DataDef_ID = 500;
Left join (Data) LOAD Event_ID, Value AS Param1 where Event DataDef_ID = 501;
Left join (Data) LOAD Event_ID, Value AS Param2 where Event DataDef_ID = 502;
Drop Table_Origine;
Bàv,
Michael
Tout d'abord, merci Aurélien ta formule marche parfaitement. Et effectivement j'avais cru comprendre aussi qu'elle ne marcherait que pour le couple (1,0).
Merci également Michaël pour ta réponse. Je vais essayer de revoir la modélisation de mes données comme tu l'as proposées (il y a d'autres valeurs que 501 et 502).
Cordialement,
Bonjour,
Bien que votre question a été résolu, elle m'a quand même intrigué hier. Sur base de la réponse de Michaël, j'ai fait une autre solution possible.
Peut-être elle vous sert encore.
MAP_code_501:
Mapping Load
Event_Id,
Value
FROM
Source.xls
(biff, embedded labels, table is [Sheet1$])
Where EventDataDef_Id = 501;
MAP_code_502:
Mapping Load
Event_Id,
Value
FROM
Source.xls
(biff, embedded labels, table is [Sheet1$])
Where EventDataDef_Id = 502;
Data:
LOAD
Event_Id,
Value,
Applymap('MAP_code_501', Event_Id) as Value501,
Applymap('MAP_code_502', Event_Id) as Value502
FROM
Source.xls
(biff, embedded labels, table is [Sheet1$])
Where EventDataDef_Id = 500;
Data2:
Load *,
If((Value501=1 and Value502=0),1) as Flag
Resident Data;
Drop table Data;
Dans le charting, il faut compter tous valeurs ou Flag=1. (expression: =IF ((Flag=1),Sum(Value)) )
Cdt,
Bonjour Johan,
Merci de votre réponse. Elle va m'être très utile pour la suite de mon projet.
Ca m'aide également à mieux comprendre les mécanismes à utiliser pour obtenir une solution robuste.
Cordialement,