Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
Salut,
Vous pouvez détecter la valeur du champ est numérique ou non en utilisant la fonction "isnum ()".
Cordialement,
Kaushik Solanki
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
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
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.
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
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.
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
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 ...
Essaie de mettre le IsNum(ClientFinal) après Resident Cde;
[HeaderParties]:
Load
ClientFinal //Attribute4
Resident Cde
Where IsNum(ClientFinal);
InnerJoin([HeaderParties])
...
Bien à toi,
Antoine