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 :

Lier un calendrier à mes tables


Sujet :

QlikView

  1. #1
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut Lier un calendrier à mes tables
    Hello,

    J'ai fait un calendrier avec un script que j'ai vu un peu partout sur le net:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Let varMinDate = Num('5/10/2013');
     
    Let varMaxDate = Num('31/12/2013');
     
    TempCalendar:
     
    LOAD
     
    $(varMinDate) + Iterno()-1 As Num,
     
    Date($(varMinDate) + IterNo() - 1) as TempDate
     
    AutoGenerate 1 While $(varMinDate) + IterNo() -1 <= $(varMaxDate);
     
    calendar:
     
    LOAD
     
    YearName(TempDate) as Tempyearname,
     
    MonthName(TempDate) as TempMonthname,
     
    Month(TempDate) as TempMonths
     
    Resident TempCalendar
     
    Order By TempDate ASC;
    Comment je peux lier TempDate à une autre table de ma base de données Date qui a un champ date?

    Merci!

  2. #2
    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
    Comme pour toutes les autres tables dans QlikView : la liaison se fait sur le nom de champ.

    Renommez le champ pour qu'il ait le même nom dans vos 2 tables et elles seront liées.

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    Merci pour la réponse PhunkyBob.
    Au fait, j'ai 3 tables: consommateur, date_debut_consommation et date_fin_consommation. Ce que je souhaite, c'est que quand je clique sur une date du calendrier, il m'affiche les consommateurs qui ne consomment pas à la date sélectionnée. Je ne vois pas du tout comment m'y prendre

  4. #4
    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
    Vous avez 3 tables ou 3 champs dans une table ?


    Vous voulez la liste des consommateurs sous quelle forme (tableau, zone de texte, ...) ?

    Vous pouvez :
    - utiliser une expression contenant un "if"
    - faire un chargement qui associe chaque jour de la période avec le consommateur, et lier ce jour sur le calendrier


    Sans explications précises, c'est difficile de dire qu'elle est la meilleure façon de faire.

  5. #5
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    J'ai 3 tables, et je veux afficher le résultat dans une table.

    Je suis débutante dans QlikView, je ne sais pas où trop mettre la condition if...

  6. #6
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    Je vais essayer de m'expliquer plus clairement:
    J'affiche 4 tables en tout: consommateur, date_debut_consommation, date_fin_consommation et un calendrier indépendant des autres tables.
    Ce que je veux, c'est que quand je clique sur une date de ce calendrier, j'affiche les consommateurs qui ne consomment pas à la date sélectionnée.
    J'ai essayé d'afficher une table avec les noms des consommateurs en utilisant l'expression suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (TempDate<<[date complete fin] and TempDate>>[date complete debut], nom)
    Mais ça ne marche pas...

  7. #7
    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
    Je ne suis pas sur qu'on appelle "table" la même chose.

    En lisant votre message, j'ai l'impression que vous parlez de liste de sélection.

    Ce que je veux savoir, c'est comment est fait votre modèle de données (les tables au sens "script de chargement").

  8. #8
    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
    Supposons que vous ayez ces données :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Data:
    LOAD * INLINE [
    consommateur, date_debut_consommation, date_fin_consommation
    AAA, 01/01/2013, 31/01/2013
    BBB, 01/01/2013, 01/01/2013
    CCC, 02/01/2013, 05/01/2013
    ];
     
     
     
     
    Let varMinDate = Num('01/01/2013');
    Let varMaxDate = Num('28/02/2013');
     
    TempCalendar:
    LOAD
    $(varMinDate) + Iterno()-1 AS Num,
    Date($(varMinDate) + IterNo() - 1) AS TempDate
    AutoGenerate 1 While $(varMinDate) + IterNo() -1 <= $(varMaxDate);
     
    calendar:
    LOAD
    TempDate,
    YearName(TempDate) AS Tempyearname,
    MonthName(TempDate) AS TempMonthname,
    Month(TempDate) AS TempMonths
    Resident TempCalendar
    ORDER BY TempDate ASC;
     
    DROP TABLE TempCalendar;

    Créez un objet de type "tableau droit" (un graphique) et mettre comme dimension "consommateur" et comme expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(min(TempDate) > date_fin_consommation or max(TempDate) < date_debut_consommation, 1, 0)

    Mettez une liste de sélection "TempDate".
    Le tableau affichera les consommateurs qui n'ont pas consommé à la date (ou aux dates) sélectionnées.

  9. #9
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    Effectivement ça marche, merci
    Mais tu peux m'expliquer l'expression, je ne comprends pas trop la condition... Pourquoi utiliser le min et max?

  10. #10
    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
    Sans mettre "min" et "max", l'expression ne marche que si 1 seule valeur est sélectionnée.

    Le fait de mettre des "min" et "max" permet de faire en sorte que si une période est sélectionnée (par exemple, au lieu de mettre un liste de sélection "TempDate" on utilise une liste de sélection "TempMonth"), l'expression fonctionne toujours.

    Je sélectionne "janvier 2013" et j'obtiens la liste de tous les consommateurs qui n'ont pas consommé pendant tout janvier 2013.



    L'expression dit :
    - si la date sélectionnée n'est pas dans la période, alors on met 1
    - sinon on met 0

    Or par défaut, dans QlikView, les lignes dont l'expression retourne 0 (ou null ou vide) ne sont pas affichées. Cela permet donc de n'afficher que les consommateurs qui correspondent à notre condition.

  11. #11
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    Ok merci beaucoup

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    J'ai un probleme assez similaire. J'utilise egalement un script pour me génerer une table calendrier:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    LET vDateMin = Num(MakeDate(2000,1,1));
    LET vDateMax = Floor(YearEnd(AddMonths(Today(), 12)));
    LET vDateToday = Num(Today());
     
    TempCalendar:
    LOAD
      $(vDateMin) + RowNo() - 1 AS DateNumber,
      Date($(vDateMin) + RowNo() - 1) AS TempDate
    AUTOGENERATE 1
    WHILE $(vDateMin)+IterNo()-1<= $(vDateMax);
     
    MasterCalendar:
    LOAD
        TempDate AS Date,
        Day(TempDate) AS Jour,
        WeekDay(TempDate) AS SemaineJour,
        Week(TempDate) AS Semaine,
        Month(TempDate) AS Mois,
        Year(TempDate) AS Année,
        'Q' & Ceil(Month(TempDate)/3) AS Trimestre,
        WeekDay(TempDate) & '-' & Year(TempDate) AS SemaineAnnée,
        Month(TempDate) & '-' & Year(TempDate) AS MoisAnnée
    RESIDENT TempCalendar ORDER BY TempDate ASC;
     
    DROP TABLE TempCalendar;
     
    LET vDateMin = Num(MakeDate(2000,1,1));
    LET vDateMax = Floor(YearEnd(AddMonths(Today(), 12)));
    LET vDateToday = Num(Today());
    Je voudrais pouvoir lier les champs de ma table calendrier avec les champs date de mes autres tables pour pouvoir faire des présentation graphique avec en dimension le mois, l'année etc

    J'ai donc une table calendrier avec en champ: Date, Mois, Année etc
    Et notamment une seconde table que nous appelerons Projet avec en champ: Id_Projet, NomProjet, DateProjet, TypeProjet etc.

    J'aimerai pouvoir réaliser des présentations graphiques du style: Nombre de projets par type, par mois et par année
    En dimension je mettrai TypeProjet et Mois/Année dans un groupe.

    J'ai essayé de renomer mon champ DateProjet en Mois avec une fonction Month dans le SELECT mais ce n'est pas aussi simple j'ai l'impression.

  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
    J'ai essayé de renomer mon champ DateProjet en Mois avec une fonction Month dans le SELECT mais ce n'est pas aussi simple j'ai l'impression.
    "Mois", ça veut dire "Janvier", "Février", "Mars", ... sans précision sur l'année.

    Que contient votre champ "DateProjet" une date complète (année, mois, jour) ou un mois (année, mois) ?

    Si c'est un date complète, il faut renommer "DateProjet" en "Date", tout simplement.

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Merci pour votre aide.

    Mon champ DateProjet contient une date au format base de donnée: 2000-09-08 00:00:00,000

    C'est une date complète mais une fois renommé en date comment faire des affichages par Mois et Année ?

  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
    A partir du moment où votre champ est renommé, vos 2 tables sont liées.
    Donc une sélection sur la table "Calendrier" implique une restriction sur la table de faits.


    Nombre de projets par type, par mois et par année
    Un graphique avec en dimension :
    - TypeProjet
    - Année
    - Mois

    et en expression :
    count(distinct ID_projet)


    Ou alors, vous créez un groupe hiérarchique "Année_Mois" qui contient "Année" et "MoisAnnée" et vous mettez comme dimension :
    - TypeProjet
    - Année_Mois (le groupe que vous venez de créer)

  16. #16
    Membre à l'essai
    Inscrit en
    Mai 2013
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 24
    Points : 14
    Points
    14
    Par défaut
    Effectivement ça marche

    Finalement c’était bien plus simple que je ne le pensais.

  17. #17
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    J'ai rechangé la présentation de mon calendrier, et maintenant la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IF(min(TempDate) > date_fin_consommation OR max(TempDate) < date_debut_consommation, 1, 0)
    marche plus...

    J'ai l'impression que ça affiche le contraire de ce que je veux faire, c'est-à-dire les consommateurs qui consomment bien à la date du calendrier sélectionnée, alors que moi je veux afficher les consommateurs qui ne consomment pas à la date sélectionnée...

    J'ai joint au message mon .qvw. Les consommateurs sont représentés par les collaborateurs...

    Merci!
    Fichiers attachés Fichiers attachés

  18. #18
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 593
    Points : 353
    Points
    353
    Par défaut
    Bon, en fait là ça marche avec le {1 -$}.

  19. #19
    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 daydream123 Voir le message
    Bon, en fait là ça marche avec le {1 -$}.
    "{1-$}" signifie "l'inverse de la sélection que je viens de faire".

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

Discussions similaires

  1. [10 - XP] Faire un "start" pour créer mes tables
    Par noixennoc dans le forum Oracle
    Réponses: 8
    Dernier message: 30/01/2006, 23h56
  2. Probleme : je ne peut pas acceder a mes tables
    Par luciemacherie dans le forum Oracle
    Réponses: 3
    Dernier message: 16/01/2006, 10h21
  3. Réponses: 15
    Dernier message: 30/06/2005, 16h35
  4. comment vider mes tables a la fin
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 9
    Dernier message: 14/05/2005, 11h33
  5. Problème avec mes tables de relation...
    Par mmike dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/06/2003, 15h16

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