Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Condition If et jointure sur tables

Bonjour,

Je veux savoir comment peut-on faire une condition "if" dans un script de chargement en faisant la jointure de deux tables.

Je vous explique: J'ai deux tables HEADERS et PARTIES. La table Headers contient des informations sur des commandes, parmi les attributs, on trouve "Client Final" qui est renseigné en alphanumérique ... Ce champ peut aussi contenir des valeurs numériques.

Dans ce cas, on doit procéder de façon à ce qu'on change les camps numériques par une valeur numérique en faisant une jointure avec la table PARTIES sur le champ HEADERS.ClientFinal = PARTIES.PartyID

Je me demande comment je peux procéder, au niveau du script de chargement en premier lieu ... comment faire mes jointures ?

Comment je peux détecter que le champ est numérique ?

En pièce jointe, une image explicative ... Si je fais la commande sur Oracle:

select  *

from    headers h, lines l, parties p

where   h.header_id = l.header_id

and     h.clientfinal= p.party_id

and     h.attribute4='102488';

J'obtiens ClientFinal=Aéroport de Bangkok.

Est ce que quelqu'un aura des pistes qui m'aideront à faire ceci SVP ?

Merci.

9 Replies
kaushiknsolanki
Partner Ambassador/MVP
Partner Ambassador/MVP

Salut,

Vous pouvez détecter la valeur du champ est numérique ou non en utilisant la fonction "isnum ()".

Cordialement,

Kaushik Solanki

Please remember to hit the 'Like' button and for helpful answers and resolutions, click on the 'Accept As Solution' button. Cheers!
Not applicable
Author

J'ai ajouté un script pour récupérer que les party_names concernés mais qlikview semble ne pas reconnaitre isnum().

HeadersParties:

Load

ClientFinal //Attribute4

resident Cde;

inner join(HeadersParties) load

PARTY_ID,

PARTY_NAME;

select distinct

PArty_ID,

PARTY_NAME

from HZ_PARTIES

where isnum(ClientFinal);

Il est fort probable que mon script soit erroné, car je viens de débuter sur qlikview

kaushiknsolanki
Partner Ambassador/MVP
Partner Ambassador/MVP

Salut,

Isnum est une fonction QlikView pas le SQL.

vous avez utilisé dans le sql et donc il ne fonctionne pas.

essayer isnumeric () dans SQL.

Cordialement,

Kaushik Solanki

Please remember to hit the 'Like' button and for helpful answers and resolutions, click on the 'Accept As Solution' button. Cheers!
Not applicable
Author

Excusez moi, il se peut que je me suis mal exprimée, mais j'ai utilisé la fonction isnum() dans QlikView.

vous pouvez regarder le script dans la réponse précédente.

kaushiknsolanki
Partner Ambassador/MVP
Partner Ambassador/MVP

Salut,

Vous avez utilisé dans QlikView aucun doute à ce sujet, mais quand vous écrivez requête SQL comme "select", puis toutes les fonctions que vous avez utilisé dans ce qui devrait être acceptable par votre base de données, la cause la requête sera tiré sur base pas dans QlikView.

Si vous utilisez cette déclaration avec la charge et charger des données à partir d'Excel ou QVD puis il est dit pour être tiré sur QlikView.

J'espère que c'est clair.

Cordialement,

Kaushik Solanki

Please remember to hit the 'Like' button and for helpful answers and resolutions, click on the 'Accept As Solution' button. Cheers!
Not applicable
Author

J'essaie de comprendre

Merci pour votre réponse. Est ce que vous avez des pistes sur comment je peux procéder ? sachant que je suis sur Oracle et que la fonction isNumeric() n'existe pas sur Oracle.

Je suis vraiment novice sur l'outil donc, je trouve beaucoup de difficultés au niveau des l'établissement des scripts de chargement.

kaushiknsolanki
Partner Ambassador/MVP
Partner Ambassador/MVP

Salut,

Vous pouvez simplement charger toutes les données de base de données, puis en utilisant la charge résident, vous pouvez utiliser la fonction isnum () dans QlikView pour savoir si les valeurs sont numériques ou non.

quelque chose comme ci-dessous.

Data:
Sql Select * from abc;

Data1:
Noconcatenate
Load * resident Data where isnum(Field1);

Drop table Data;

Cordialement,

Kaushik Solanki

Please remember to hit the 'Like' button and for helpful answers and resolutions, click on the 'Accept As Solution' button. Cheers!
Not applicable
Author

J'ai toujours pas résolu ce problème,

J'ai écrit le script suivant dans l'objectif de remplacer les valeurs lors du chargement des données:

Cde:

select distinct

  t1.ORDER_NUMBER,

  t1.ATTRIBUTE4,

  t1.SOLD_TO_ORG_ID,

  t1.HEADER_ID,

  t1.ORDERED_DATE,

  t1.ATTRIBUTE1,

  t1.ATTRIBUTE13,

  t1.ATTRIBUTE14

from

OE_ORDER_HEADERS_ALL t1;

load

  text(ORDER_NUMBER) as [NuméroCde],

  if (isnum(t1.ATTRIBUTE4), PARTY_NAME, t1.ATTRIBUTE4) AS [ClientFinal],

  //ATTRIBUTE4 as [ClientFinal],

  SOLD_TO_ORG_ID AS [ID_CLIENT],

  HEADER_ID,

  year(ORDERED_DATE) as [AnnéeCréationCde],

  month(ORDERED_DATE) as [MoisCréationCde],

  week(ORDERED_DATE) as [SemMoisCréationCde],

  ORDERED_DATE as [DateCréationCdeOracle],

  Date(Date#(ATTRIBUTE1,'YYYY/MM/DD hh:mm:ss'),'YYYY/MM/DD') AS DateCdeClient,

  Date(Date#(ATTRIBUTE13,'YYYY/MM/DD hh:mm:ss'),'YYYY/MM/DD') As DateRéceptionCde,

  Date(Date#(ATTRIBUTE14,'YYYY/MM/DD hh:mm:ss'),'DD/MM/YYYY') As DateRéceptionFDTCdeADV;

outer join(Cde) load

PARTY_ID AS [ID_CLIENT],

PARTY_NAME AS [Client];

SELECT distinct

PARTY_ID,

PARTY_NAME

FROM hz_parties;

Le problème est que je ne vois pas trop comment il va faire la jointure sur le champ ID_CLIENT ...

Ce code ne marche pas ...

Anonymous
Not applicable
Author

Essaie de mettre le IsNum(ClientFinal) après Resident Cde;

[HeaderParties]:

Load

ClientFinal //Attribute4

Resident Cde

Where IsNum(ClientFinal);

InnerJoin([HeaderParties])

...

Bien à toi,
Antoine