Bonjour ,
j'ai une problème pour résoudre la problème de clé synthétique, je sais que je dois utiliser la fonction autonumber et j'ai fait quelques essaies mais toujours il y a des erreurs , vous trouverez ci-joint une image pour cette problème .
Bonjour ,
j'ai une problème pour résoudre la problème de clé synthétique, je sais que je dois utiliser la fonction autonumber et j'ai fait quelques essaies mais toujours il y a des erreurs , vous trouverez ci-joint une image pour cette problème .
Deux solutions :
Soit tu crée une zone clé simple pour lier tes deux tables,
soit tu joins tes données dans une seule table.
Vu le peu de données supplémentaires, je choisirais la seconde méthode
Méthode 1 :
On load les données dans une première table, avec un champ supplémentaire utilisant autonumber
On load la seconde table avec le même champ autonumber mais sans les données de la clé synthétique
Méthode 2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Orders: Load autonumber(CustomerID,ShipperID,EmployeeID), CustomerID,ShipperID,EmployeeID,Freight,Year,Month,Day,OrderID from ... Shipments: Load autonumber(CustomerID,ShipperID,EmployeeID), OrderLineKey,ShipmentDate from ...
On load les données de la première table.
On load les données de la seconde dans la première.
Il faut alors charger les champs clés de la première table et les données supplémentaires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Orders: Load CustomerID,ShipperID,EmployeeID,Freight,Year,Month,Day,OrderID from ... Join Load CustomerID,ShipperID,EmployeeID, OrderLineKey,ShipmentDate from ...
Merci pour votre réponse , Les données sont enregistrées dans une base de données access et non pas xls ou csv. Normalement je peux pas utiliser Load.
voila mon code :
table shipments
table orders
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Shipments: SQL SELECT CustomerID, EmployeeID, //LineNo, // OrderID, (LineNo&OrderID) as OrderLineKey, // ProductID, ShipmentDate, ShipperID FROM `D:\qlikview\Developer1_Exercises\Datasources\QWT.mdb`.Shipments;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Orders: SQL SELECT CustomerID, EmployeeID, Freight, OrderDate, OrderID, ShipperID FROM `D:\qlikview\Developer1_Exercises\Datasources\QWT.mdb`.Orders;
On peut utiliser Load avec un chargement SQL :
On ne peut pas utiliser la fonction autonumber dans la ligne SQL car ce serait alors Access qui traiterait la fonction, qu'il ne connait pas ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Shipments: LOAD AUTONUMBER(CustomerID & ShipperID & EmployeeID), *; SQL SELECT CustomerID, EmployeeID, (LineNo&OrderID) AS OrderLineKey, ShipmentDate, ShipperID FROM `D:\qlikview\Developer1_Exercises\Datasources\QWT.mdb`.Shipments;
PS :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Orders: LOAD AUTONUMBER(CustomerID & ShipperID & EmployeeID), Freight,OrderDate,OrderID; SQL SELECT CustomerID, EmployeeID, Freight, OrderDate, OrderID, ShipperID FROM `D:\qlikview\Developer1_Exercises\Datasources\QWT.mdb`.Orders;
Merci FORMULARY pour votre réponse,cela fonctionne parfaitement.
Mais sincèrement j'ai pas compris cette solution, pourquoi les trois colonnes CustomerID, EmployeeID et ShipperID s'affichent pas dans le table orders de visionneur de tables malgré il ya la code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3SQL SELECT CustomerID , EmployeeID , .....
vous trouverez ci-joint une image de visionneur de tables.
Les 3 champs ne s'affichent pas dans la table orders.
Dans la table orders on a un champ qui s'appelle autonumber(CustomerID&ShipperID&EmployeeID)
Utilisez as pour renommer le champ autonumber dans les 2 load, ce sera peut-être plus lisible ...
PS : Je viens de comprendre votre question, désolé.
Dans le select de la table orders, on charge les 3 champs afin de pouvoir les utiliser dans la fonction autonumber du load.
Par contre, ces champs ne figurant pas dans l'instruction load, ils ne sont pas repris dans la table orders !
Merci beaucoup , tout est claire
Cette méthode peut être un peu dangereux non ?
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part AUTONUMBER(CustomerID & ShipperID & EmployeeID)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CustomerID = 11 ShipperID = 22 EmployeeID = 33 CustomerID & ShipperID & EmployeeID --> 112233 CustomerID = 1 ShipperID = 1223 EmployeeID = 3 CustomerID & ShipperID & EmployeeID --> 112233
Exact !
Tu peux utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part AUTONUMBER(CustomerID & '-' & ShipperID & '-' & EmployeeID)
C'est marrant de retrouver ses remarques données sur un forum, sur un autre forum mais dans la bouche de quelqu'un d'autre
L'inconvénient de poster à 2 endroits, c'est qu'on ne lit que la moitié des réponses...
Pour compléter la réponse de FORMULARY :
Attention, avec cette méthode, si on a des données dans la 2em table qui n'existent pas dans la 1er table, on n'a aucun moyen d'y avoir accès pour la suite de l'analyse.Méthode 1 :
On load les données dans une première table, avec un champ supplémentaire utilisant autonumber
On load la seconde table avec le même champ autonumber mais sans les données de la clé synthétique
Dans votre exemple, vous faites un "JOIN". Or le JOIN pourra provoquer des doublements de ligne dans le cas où une table contient plusieurs éléments qui ont la même triplette.Méthode 2 :
On load les données de la première table.
On load les données de la seconde dans la première.
Je propose donc une méthode 3 :
Pour résoudre ce genre de problème, il faut faire en sorte de ne plus avoir qu'un seul champ en commun.
Ainsi, dans votre table "Orders", chargez les données comme ça :
La table "Shipments" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Orders: LOAD Customer AS Orders.Customer, Shipper AS Orders.Shipper, Employee AS Orders.Employee, Customer & '|' & Shipper & '|' & Employee AS Identifiant, ... FROM ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Shipments: LOAD Customer AS Shipments.Customer, Shipper AS Shipments.Shipper, Employee AS Shipments.Employee, Customer & '|' & Shipper & '|' & Employee AS Identifiant, ... FROM ...
Vos tables sont donc liées par 1 seul champ : "Identifiant".
Si vous avez besoin d'avoir des listes de sélection communes pour les 2 tables de faits, il suffit de faire un dictionnaire.
Aini, vos 3 tables sont liées par 1 seul champ.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Dico: LOAD DISTINCT Identifiant, Orders.Customer AS Customer, Orders.Shipper AS Shipper, Orders.Employee AS Employee RESIDENT Orders; CONCATENATE (Dico) LOAD DISTINCT Identifiant, Shipments.Customer AS Customer, Shipments.Shipper AS Shipper, Shipments.Employee AS Employee RESIDENT Shipments;
La sélection sur "Customer" filtrera automatiquement dans les 2 tables "Orders" et "Shipments".
Ainsi qu'une méthode 4, qui consiste à tout enregistrer dans 1 seule table, mais pas avec une jointure, mais une concaténation.
Ainsi, même si on a 2 lignes pour la même triplette dans la table 2, ça ne doublera pas les valeurs de la table 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Orders_Shipments: LOAD Customer, Shipper, Employee, ... // contient tous les champs de la table "Orders" ; SQL SELECT * FROM Orders; CONCATENATE (Orders_Shipments) LOAD Customer, Shipper, Employee, ... // contient tous les champs de la table "Shipments" ; SQL SELECT * FROM Shipments;
J'ai postulé dans plusieurs forums pour avoir le max de réponses,
et chaque fois lorsque je reçu une réponse pour la problème , je le mets dans l'autre forum pour que les autres savent la réponse exacte(diffusion d'information avec tout le monde).
de plus je n'ai pas le droit de nommer un autre forum dans votre forum ou bien le contraire car c'est une sorte de publicité et normalement c'est interdit dans vos chartes de site.
Merci.
Je suis d'accord avec ce point.
Ce qui me fait rire, c'est que vous trouvez ici l'utilisation de l'autonumber, que vous postez là-bas.
Là-bas, je vous répond "attention, ça peut être dangereux sans utiliser de séparateur (démonstration), donc utilisez des séparateurs comme ceci (exemple) et vous n'aurez plus de problème" et vous revenez ici pour dire "mais cela peut être dangereux, non ? (copier / coller de ma démonstration)".
Ce qui me donne l'impression que vous ne lisez les réponses qu'à moitié.
Le plus important, c'est que votre problème soit résolu.
non je te jure que j'ai lu tout les réponses mais peut être il y un manque de concentration ou bien le désir d'avoir une réponse d'un expert en QlikView car je suis débutant et j'ai été obligé de trouver une solution pour cette problème et au même temps je suis entrain de développer un site web (pression du temps).
l’essentiel comme vous avez dit mon problème est résolu.
Merci bien pour votre aide.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager