← Toutes les astuces

Exists() et Not Exists() : le piège du chargement en cours

Exists() ne regarde pas seulement une table précédente : il travaille sur les valeurs déjà présentes dans le symbole du champ, y compris celles chargées pendant le LOAD courant.

Le bon réflexe

Imaginez Exists() comme une question posée au dictionnaire des valeurs déjà connues par Qlik : « cette valeur a-t-elle déjà été rencontrée ? ». Pendant un LOAD, ce dictionnaire évolue au fur et à mesure des lignes chargées.

Le problème

Avec Not Exists(Client), la première occurrence d’un client peut être chargée puis rendre les occurrences suivantes non admissibles. Ce comportement est parfois voulu, parfois très surprenant.

À surveiller
Clients:
LOAD *
FROM [lib://Data/clients.qvd] (qvd)
WHERE NOT Exists(Client);
Écriture conseillée
ClientsDejaCharges:
LOAD DISTINCT
    Client AS Client_Existant
FROM [lib://Data/clients_reference.qvd] (qvd);

NouveauxClients:
LOAD *
FROM [lib://Data/clients.qvd] (qvd)
WHERE NOT Exists(Client_Existant, Client);