IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

QlikView Discussion :

Utilisation autonumber pour résoudre la problème de Clé synthétique


Sujet :

QlikView

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 112
    Points : 72
    Points
    72
    Par défaut Utilisation autonumber pour résoudre la problème de Clé synthétique
    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 .
    Images attachées Images attachées  

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    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
    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 ...
    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.
    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 ...

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 112
    Points : 72
    Points
    72
    Par défaut
    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
    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;
    table orders
    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;

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    On peut utiliser Load avec un chargement SQL :
    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;
    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 ...

    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;

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 112
    Points : 72
    Points
    72
    Par défaut
    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
    3
    SQL SELECT 
      CustomerID ,
      EmployeeID , .....
    .
    vous trouverez ci-joint une image de visionneur de tables.
    Images attachées Images attachées  

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    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 !

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 112
    Points : 72
    Points
    72
    Par défaut
    Merci beaucoup , tout est claire

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 112
    Points : 72
    Points
    72
    Par défaut
    Cette méthode peut être un peu dangereux non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AUTONUMBER(CustomerID & ShipperID & EmployeeID)
    Exemple :
    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

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    Exact !
    Tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AUTONUMBER(CustomerID & '-' & ShipperID & '-' & EmployeeID)

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 112
    Points : 72
    Points
    72
    Par défaut
    Super

  11. #11
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par karnass Voir le message
    Cette méthode peut être un peu dangereux non ?
    [...]

    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 :
    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
    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 2 :
    On load les données de la première table.
    On load les données de la seconde dans la première.
    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.


    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 :
    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 ...
    La table "Shipments" :
    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.
    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;
    Aini, vos 3 tables sont liées par 1 seul champ.
    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.


    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;
    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.

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 112
    Points : 72
    Points
    72
    Par défaut
    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.

  13. #13
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par karnass Voir le message
    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).
    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.

  14. #14
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 112
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par PhunkyBob Voir le message
    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.

  15. #15
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par karnass Voir le message
    ou bien lé désir d'avoir une réponse d'un expert en QlikView
    Sympa...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. De précieux conseils pour résoudre vos problèmes
    Par Laurent Dardenne dans le forum Débuter
    Réponses: 2
    Dernier message: 08/09/2014, 20h56
  2. Réponses: 2
    Dernier message: 07/08/2010, 22h34
  3. Recherche algo pour pour résoudre un problème à 4 inconnues
    Par alain57 dans le forum Algorithmes et structures de données
    Réponses: 17
    Dernier message: 02/07/2010, 18h29
  4. [Oracle] Que dois-je faire pour résoudre ce problème ?
    Par soumia1988 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/03/2007, 11h29
  5. Comment utiliser Developpez.com pour résoudre votre problème
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 08/01/2005, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo