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 :

Transcrire Sql en Qv


Sujet :

QlikView

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2009
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 113
    Points : 82
    Points
    82
    Par défaut Transcrire Sql en Qv
    Bonjour,

    Décidément, beaucoup de questions ces temps ci.

    J'essaye de transcrire cette requête en formule Qview.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT COUNT(DISTINCT TB.NTI) AS VENUS 
    FROM   TBLCHB TB, TBL_RINVIT_JOURNAL TRJ
    WHERE  TO_CHAR(DATE_EXAMEN,'YYYYMMDD') >= TO_CHAR(trj.DATE_TRT,'YYYYMMDD')
    AND    TB.NTI = TRJ.NTI
    AND    TO_CHAR(trj.DATE_TRT,'YYYYMMDD') ='20141024'
    AND    TRJ.CODE_TYPE_APPEL is not null
    AND    TRJ.CODE_TRT NOT IN ( 'JJ','B1','B2','B3','B5','B6',
                                 '61','63','64','99','55','26',
                                  '41','42','43','44','45','15',
                                 '24','25','28','33')
    Etant donnée que d'autres requêtes du mm genre sont faites à partir de la jointure des deux tables TBLCHB et TBL_RINVIT_JOURNAL, j'ai, dans mon load, joint TBLCHB et TBL_RINVIT_JOURNAL et trié les enregistrements correspondant à CODE_TYPE_APPEL is not null.
    Il ne me reste plus qu'à calculer le count en y ajoutant les conditions marquée en rouge.
    J'ai donc fait ceci ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    =count(DISTINCT {<CODE_TRT={'*'}-{'JJ','B1','B2','B3','B5','B6','61','63','64','99','55','26',
                                      '41','42','43','44','45','15','24','25','28','33'}>}
           if(floor(DATE_EXAMEN) >= floor(MAX_DATE)
           ,RINVIT_NTI))
    La formule me renvoie un chiffre différent de la requête.
    La formule vous semble t elle correcte ?
    Cela peut-il venir de ma jointure ?
    Pourriez-vous m'aider ?

    Merci.

    Samuel.

  2. #2
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2009
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 113
    Points : 82
    Points
    82
    Par défaut OK, bon.
    A noter que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    =count(DISTINCT {<CODE_TRT-={'JJ','B1','B2','B3','B5','B6','61','63','64','99','55','26',
                                      '41','42','43','44','45','15','24','25','28','33'}>}
           if(floor(DATE_EXAMEN) >= floor(MAX_DATE)
           ,RINVIT_NTI))
    est préférable à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    =count(DISTINCT {<CODE_TRT={*}-{'JJ','B1','B2','B3','B5','B6','61','63','64','99','55','26',
                                      '41','42','43','44','45','15','24','25','28','33'}>}
           if(floor(DATE_EXAMEN) >= floor(MAX_DATE)
           ,RINVIT_NTI))
    car il laisse la possibilité à l'utilisateur de selectionner un CODE_TRT tout en excluant les {'JJ','B1','B2','B3','B5','B6','61','63','64','99','55','26','41','42','43','44','45','15','24','25','28','33'}>}

  3. #3
    Membre du Club
    Inscrit en
    Mai 2013
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 112
    Points : 54
    Points
    54
    Par défaut
    Personnellement quand je suis confronté à une requete SQL trop complexe pour laquelle je n'ai pas envie de consacrer trop de temps dans sa "traduction" vers QlikView, je me contente de la claquer dans mon script tout simplement. Je m'occupe juste de sélectionner les champs utiles et de renommer le champs nécessaire pour lier la requête avec mon modèle.

  4. #4
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2009
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 113
    Points : 82
    Points
    82
    Par défaut Oui on peut faire ça.
    Oui. On peut faire ça.

    J'insiste.
    La formule vous semble-t-elle bonne ?

  5. #5
    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
    Bonjour,

    SQL est fait pour retourner une liste d'enregistrements répondants à une condition. On a la possibilité de faire des jointures d'une table à l'autre selon les critères désirés.

    QlikView est fait pour agréger des données selon une expression : on décide des champs d'agrégation (dimension) et de l'agrégation à y appliquer (expression).
    On se base sur un modèle de données où les tables sont liées par des dimensions communes.


    Il est donc difficile de dire "cette expression QV est la traduction de cette requête SQL" étant donné que ce sont 2 choses différentes.
    Dans votre requête SQL, vous faites une jointure (et sans utiliser la fonction "JOIN"). Mais comment est votre modèle de données dans QlikView ?

    Votre expression QV semble similaire, mais est-ce que vous avez bien un lien sur "NTI" dans votre modèle de données ?
    Pourquoi avez-vous besoin d'une condition sur "CODE_TYPE_APPEL" en SQL et pas en QV ?
    Pourquoi avez-vous une condition sur "DATE_TRT" qui vaut une date précise en SQL et pas en QV ?
    Pourquoi avez-vous "DATE_TRT" en SQL et "MAX_DATE" en QV ? Comment sait-on que c'est la même chose ?


    Le mieux est de donner votre modèle de données en QV et de dire en français ce que vous attendez.

  6. #6
    Membre régulier
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mars 2009
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 113
    Points : 82
    Points
    82
    Par défaut Absence prolongée sans avis médical
    Merci pour vos réponses.
    Actuellement en mission loin de chez mois, je n'ai plus pensé à venir vérifier vos réponses.
    Shame on me.
    Dés que je rentre je t'envoie tout ça (Mars 2015).

    Merci !

Discussions similaires

  1. L'avenir du BDE et des SQL Links révélé ! <officiel>
    Par Merlin dans le forum Bases de données
    Réponses: 12
    Dernier message: 02/06/2006, 10h18
  2. Pb migration Access / SQL server
    Par yoyo dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/04/2005, 10h39
  3. Backup BD SQL Server
    Par Ethmane dans le forum Administration
    Réponses: 3
    Dernier message: 07/06/2002, 00h42
  4. Cours, tutoriels, logiciels, F.A.Q,... pour le langage SQL
    Par Marc Lussac dans le forum Langage SQL
    Réponses: 0
    Dernier message: 04/04/2002, 10h21

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