Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

alimenter une Table à la condition qu'une donnée existe dans une autre table (table de référence)

Bonjour à tous,

Je souhaite alimenter une nouvelle colonne (ici Cnew) avec une valeur (ici 1) à la condition que ‘’BP_T1’’  existe dans la table de référence  ‘’T_ref’’ (colonne BP)

Or j’ai toujours un message d’erreur qui stipule :

Invalid expression

T_1 :

load

Y a-t-il svp une subtilitée ? doit t on ne pas utiliser la fonction ‘’Exists’’ ?

Merci d’avance

Sebastien

--------------------

T_ref:

load

[Billing party] as BP

resident Tref_renego_FI;

T_1 :

load

BP_T1,

BP_T2,

if (Exists(BP, BP_T1), 1 ,0) as Cnew

resident T_alim

group by BP_T1, BP_T2;

8 Replies
Not applicable
Author

Bonjour,

Je ne pense pas que tu ai fourni le bon morceau de script pour corriger l'erreur. Peux-tu mettre un extrait (même vide) de ton application afin de visualiser l'enchainement de ton script ?

Amand

rlp
Creator
Creator

Le problème vient du GROUP BY qui impose l'usage d'une fonction d'aggrégation pour tous les champ autres que ceux définissant le GROUP BY.

Si vous voulez éviter d'éventuels doublons, utilisez plutôt LOAD DISTINCT.

Not applicable
Author

Je ne pense pas que cela vienne du GROUP BY, même si effectivement cela génèrera une erreur par la suite.

L'erreur semble venir d'un traitement réalisé avant.

Not applicable
Author

Bonjour, Merci

J'ai corrigé le post initial. ce devrait etre mieux maintenant.

Le script concernant la table de ref est le suivant :

Tref_renego :

LOAD [Billing party] as BP,
    
[Renegociation tarifaire]FROM

(
biff, embedded labels, header is 3 lines, table is Feuil1$)where [Renegociation tarifaire]='OUI';

concernant la Table T1, il y a uniquement de nombreuses colonnes en plus dans le load.

Le fait est que la mise en commentaire de   "   if (Exists(BP, BP_T1), 1 ,0) as Cnew    "   fait passer sans pbl le load. C'est manifestement uniquement cette partie qui pose pbl et renvoie ce message d'erreur.

merci encore

Sebastien

Not applicable
Author

Bonjour, Merci

J'ai corrigé le post initial. ce devrait etre mieux maintenant.

Le script concernant la table de ref est le suivant :

Tref_renego :

LOAD [Billing party] as BP,
    
[Renegociation tarifaire]FROM

(
biff, embedded labels, header is 3 lines, table is Feuil1$)where [Renegociation tarifaire]='OUI';

concernant la Table T1, il y a uniquement de nombreuses colonnes en plus dans le load.

Le fait est que la mise en commentaire de   "   if (Exists(BP, BP_T1), 1 ,0) as Cnew    "   fait passer sans pbl le load. C'est manifestement uniquement cette partie qui pose pbl et renvoie ce message d'erreur.

merci encore

Sebastien

Not applicable
Author

As-tu essayé de supprimer le GROUP BY, comme conseillé par Richard ?

Sur une V11, le fait de mettre un GROUP BY sans fonction d'aggrégation provoque l'erreur "Aggregation expressions required by GROUP BY clause". Sur une version antérieure, l'erreur est peut-être moins explicite. En quelle version es-tu ?

Not applicable
Author

Merci a tous

J'ai tenté sans le group by, ... ca ne marche pas..

je m'en sort en utilisant un autre table tres en amont (ca marche) , et en creant un coefficient.

Pour autant, je suis un peu frustré car je n'ai pas reussi avec cette table (directement)

Merci encore

pgrenier
Partner - Creator III
Partner - Creator III

Bonjour Sébastien,

Tu pourrais effectuer un chargement en deux étapes, tout en utilisant la même condition au niveau du Where clause:

T_1 :

LOAD Distinct BP_T1

   , BP_T2

   , 1 as Cnew

Resident T_alim

Where Exists(BP, BP_T1);

Concatenate (T_1)

LOAD Distinct BP_T1

   , BP_T2

   , 0 as Cnew

Resident T_alim

Where not Exists(BP, BP_T1);

Bonne soirée! 🙂

Philippe