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 :

Script : échec de lecture ODBC


Sujet :

QlikView

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Points : 66
    Points
    66
    Par défaut Script : échec de lecture ODBC
    Bonjour,

    Je rencontre un pb au chargement des données...

    Je cherche à définir directement dans le script un champ calculé de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    LOAD
    Salaires - Pourcentage * CA as "MONTANT",
    Annee_mois as "PERIODE";
    SQL SELECT
    Salaires,
    Pourcentage,
    CA,
    Annee_mois
    FROM table;
    Avec ce code, ça marchait, mais je n'obtenais pas le bon résultat.

    J'ai donc essayé le code suivant, car il me paraissait logique d'intégrer au calcul des fonctions d'agrégation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    LOAD
    Sum(Salaires) - Sum(Pourcentage) * Sum(CA) as "MONTANT",
    Annee_mois as "PERIODE";
    SQL SELECT
    Salaires,
    Pourcentage,
    CA,
    Annee_mois
    FROM table;
    Hormis le fait qu'il paraisse surprenant d'utiliser une somme sur un pourcentage (ce qui dans mon cas ne pose pas de pb, puisque le pourcentage est unique sur la période), j'ai avec ce code une erreur au chargement "Echec de lecteur ODBC".

    Manifestement il n'aime pas mon calcul.

    Je n'arrive pas à voir l'erreur...

  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
    A mon avis, il se mélange entre le SQL select qui retourne des lignes détaillées et le Load qui charge une aggrégation sans niveau de rupture.

    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL Select Sum(Salaires) - Sum(Pourcentage) * Sum(CA) AS "MONTANT", Annee_mois AS "PERIODE"
    FROM TABLE GROUP BY Annee_mois;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Points : 66
    Points
    66
    Par défaut
    Bonjour FORMULARY,

    Merci d'avoir répondu si rapidement.

    J'ai essayé ta solution, et j'ai un autre message d'erreur au chargement "une erreur s'est produite lors du traitement de la commande", et il pointe sur le calcul après SQL SELECT.

    J'ai un doute sur quoi mettre dans ma clause "LOAD". Dois-je la laisser telle qu'elle était avant?

    Pour être plus précis, ci-dessous mon "vrai" code :

    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
     
    LOAD "BSINUM_0" as "Clé_liste_chantiers",
        Hash128("BSINUM_0",Text(Date("ZPERIOD_0",'YYYYMMDD'))) as "Clé_salaires",
        Text(Date("ZPERIOD_0",'YYYYMMDD')) as "Clé_calendrier", 
        'SALAIRES BUDGET' as "TYPE_LIGNE",
        'SALAIRES CIBLE' as "CODE_LIGNE",
        Sum("ZSALMS_0")-Sum("ZSECUDG_0")*Sum("ZCAMS_0") as "MONTANT",
    //    "ZPERIOD_0",
        Text(Date("ZPERIOD_0",'YYYYMM')) as "PERIODE",
        '' as COMMENTAIRE,
        '' as SENS;
    SQL SELECT Sum("ZSALMS_0")-Sum("ZSECUDG_0")*Sum("ZCAMS_0") as "MONTANT",
        "FCY_0",
        "BSINUM_0",
        "ZPERIOD_0"
    FROM SISPRO.ZBUDGETCL
    GROUP BY "ZPERIOD_0"
    WHERE TO_CHAR(ZPERIOD_0,'YYYYMM')>='201201';
    Peut-être s'agit-il seulement d'une erreur de syntaxe?

  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
    Essaie de remplacer la ligne expression du montant dans le load par "MONTANT"

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    Désolé pour la réponse tardive, j'ai eu d'autres bugs urgents à traiter.. Bref!

    Effectivement, en toute logique, je dois laisser mon champ "MONTANT" tel quel dans le LOAD du script.

    Voici mon code :
    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
    LOAD "BSINUM_0" as "Clé_liste_chantiers",
        Hash128("BSINUM_0",Text(Date("ZPERIOD_0",'YYYYMMDD'))) as "Clé_salaires",
        Text(Date("ZPERIOD_0",'YYYYMMDD')) as "Clé_calendrier", 
        'SALAIRES BUDGET' as "TYPE_LIGNE",
        'SALAIRES CIBLE' as "CODE_LIGNE",
        "MONTANT",
        Text(Date("ZPERIOD_0",'YYYYMM')) as "PERIODE",
        '' as COMMENTAIRE,
        '' as SENS;
    SQL SELECT Sum("ZSALMS_0")-Sum("ZSECUDG_0")*Sum("ZCAMS_0") as "MONTANT",
        "FCY_0",
        "BSINUM_0",
        "ZPERIOD_0"
    FROM SISPRO.ZBUDGETCL
    GROUP BY "ZPERIOD_0"
    WHERE TO_CHAR(ZPERIOD_0,'YYYYMM')>='201201';
    Problème : au chargement, QlikView me dit tjrs "Une ou plusieurs erreurs se sont produites lors du traitement de la commande" en pointant vers cette partie du code.

    C'est quand même bizarre, je ne pensais pas que c'était si difficile de créer des champs calculés directement dans le script...

    En tout cas, je suis perdu!

  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
    C'est dans ton code SQL qu'il y a peut-être un problème.
    Je dis peut-être puisque l'ordre SQL est traité par le serveur SQL et non par Qlikview ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL SELECT Sum("ZSALMS_0")-Sum("ZSECUDG_0")*Sum("ZCAMS_0") AS "MONTANT",
        "FCY_0",
        "BSINUM_0",
        "ZPERIOD_0"
    FROM SISPRO.ZBUDGETCL
    GROUP BY "ZPERIOD_0"
    Tu récupères une aggrégation sous le nom "MONTANT", avec un regroupement sur "ZPERIOD_0".
    Mais "FCY_0" et "BSINUM_0" ne sont pas aggrégés et ne font pas partie du "GROUP BY".

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Points : 66
    Points
    66
    Par défaut
    Bonjour,

    A nouveau, merci pour ta réponse.

    J'ai essayé de rajouter mes champs FCY_0 et BSINUM_0 dans le GROUP BY, ça ne fonctionne tjrs pas.

    Déjà, je m'interroge sur la pertinence du GROUP BY par rapport à mon besoin...

    Si ma table est du type :

    FCY_0 BSINUM_0 ZPERIOD_0 ZSALMS_0 ZSECUDG_0 ZCAMS_0
    501 501000001 01/01/2012 2000 0.018 4500
    502 502000001 01/02/2012 5000 0.020 11000
    503 503000002 01/01/2012 3000 0.005 6200

    et que je veux rajouter le calcul du "MONTANT" sur chaque ligne, pourquoi devrais-je utiliser un GROUP BY?

    Mais, même en enlevant tout simplement le GROUP BY, ou en le remplaçant par "ORDER BY", j'ai tjrs le message d'erreur.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 100
    Points : 66
    Points
    66
    Par défaut
    Re,

    Un collègue m'a donné la solution.

    En effet, dès le moment où tu utilises des "SUM", il faut un GROUP BY.

    La solution ici était tout simplement d'enlever tous les "SUM" de ma requête.

    Je l'avais déjà fait avant, mais il y avait des incohérences entre le "LOAD" et le "SQL SELECT", donc j'avais un autre message d'erreur.

    Une fois ces incohérences résolues grâce à ta première réponse, FORMULARY, et les "SUM" supprimées, tout fonctionne bien!

    Merci pour tes réponses!

    Ciao!

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

Discussions similaires

  1. Echec de la lecture ODBC
    Par lozeba dans le forum QlikView
    Réponses: 3
    Dernier message: 17/09/2014, 13h44
  2. Probleme avec script - Concatenation et lecture de fichier
    Par Kassar dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 07/10/2012, 20h41
  3. Script bash - boucle lecture arguments
    Par jffskyx dans le forum Shell et commandes GNU
    Réponses: 11
    Dernier message: 16/09/2011, 08h13
  4. Script vbs pour lecture base de registre
    Par bilal78 dans le forum VBScript
    Réponses: 1
    Dernier message: 01/07/2009, 19h32
  5. Réponses: 3
    Dernier message: 31/01/2005, 23h24

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