Skip to main content
Announcements
See what Drew Clarke has to say about the Qlik Talend Cloud launch! READ THE BLOG
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Utiliser la fonction aggr ou sum

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.

1 Solution

Accepted Solutions
agilos_mla
Partner - Creator III
Partner - Creator III

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

View solution in original post

5 Replies
Aurelien_Martinez
Partner - Specialist II
Partner - Specialist II

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

Help users find answers! Don't forget to mark a solution that worked for you!
agilos_mla
Partner - Creator III
Partner - Creator III

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

Not applicable
Author

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,

puttemans
Specialist
Specialist

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,


Not applicable
Author

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,