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 :

Réstitution graphique


Sujet :

QlikView

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudes et contrôle de gestion
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudes et contrôle de gestion
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Par défaut Réstitution graphique
    Bonjour, je suis nouveau sur le forum et débutant sur Qlikview.

    J'ai encore beaucoup à apprendre et je rencontre un problème de restitution de graphique.

    J'ai un tableau qui me donne un taux de rotation glissant sur 12 mois :

    Je compte tous les logements dont l'année et le mois de sortie du locataire est compris entre le mois de la sélection et le mois - 12 (12 mois glissants)
    et pour avoir le taux je divise ce nombre par le nombre total de logements actif au moment de la sélection (12,89% sur décembre). Le format ID_TERME est aaaamm.

    La formule est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =count({$<Année_Mois_Sortie_Lot={">$(=ID_TERME-100)<=$(=ID_TERME)"}>}Année_Mois_Sortie_Lot)/Count(TOTAL<[Nature Lot]>{$<TYP_TERME={M},[Tranche Vacance]=,VF_ACTIF_LOT={1}>}ID_LOT)
    J'ai un graphique qui me donne l'évolution de ce taux sur l'année. Or, pour le graphique, le taux est dégressif sur les mois antérieurs. Je devrais avoir 9,80% sur janvier et j'obtiens 2,46%. (Cf. graphique)

    Nom : qlik1.png
Affichages : 281
Taille : 116,3 Ko

    La formule est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    =count({$<Année_Mois_Sortie_Lot={">$(=ID_TERME-100)<=$(=ID_TERME)"},ID_NAT_LOT={LGT},LibCourtMois_Lot=>}Année_Mois_Sortie_Lot)
    /Count(TOTAL<LibCourtMois_Lot>{$<TYP_TERME={M},[Tranche Vacance]=,VF_ACTIF_LOT={1},ID_NAT_LOT={LGT},LibCourtMois_Lot=>}ID_LOT)
    /Count(distinct {$<TYP_TERME={M},[Tranche Vacance]=,VF_ACTIF_LOT={1},ID_NAT_LOT={LGT},LibCourtMois_Lot=>}LibCourtMois_Lot)
    La dimension utilisée pour le graphique est la même que celle de la sélection en court "LibCourtMois_Lot"

    Est-ce un problème de cumul ou de total dans la formule ?

    Avez-vous une solution ? Merci

  2. #2
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Sans dire que ce sont des problèmes il y a quelques points particuliers

    ID_TERME-100 doit fonctionner mais c'est un cas particulier : si la règle change cette formule simple ne fonctionnera plus. Disons que si la règle de gestion est stable c'est suffisant. Mais si on choisit le mois de juin, dans ce cas les données à présenter seront à cheval sur 2 années. On va donc présenter seulement les mois de l'année en cours puisqu'il y a un filtre sur Année et qu'il n'est pas exclu dans les Set Analysis. C'est peut-être parfaitement en phase avec le besoin, je ne sais pas.
    Pour information, pour avoir un système plus flexible il faut calculer dans le script un champ ID_TERME_Counter qui vaut 1 pour la plus petite valeur de ID_TERME et qui augmente en accord avec les mois réel. Si vous n'avez pas de donnée sur un mois il faut donc "sauter" la valeur dans le compteur. Pour calculer les bornes min et max de ID_TERME, vous devrez probablement passer par des variables.

    Ensuite fonctionnellement la règle de calcul me semble étrange : diviser des mouvements sur 12 mois glissants par une valeur évaluée seulement sur le dernier mois est assez inhabituel, mais si c'est la règle donnée par le métier, pourquoi pas.

    Pour en revenir au problème, c'est un souci de set analysis je pense: vous appliquez un Set Analysis sur Année_Mois_Sortie_Lot dans le numérateur mais rien dans les diviseurs.

    Comme ça je dirais que:
    - le numérateur est filtré par les sélections sur le champ Année ET par du Set Analysis sur Année_Mois_Sortie_Lot (les filtres sont donc cumulatifs), les sélections par mois sont ignorées et le résultat est splitté par mois
    - le 1er diviseur est filtré par les sélections sur le champ Année, les sélections par mois sont ignorées et le résultat est agrégé par année
    - le 2e diviseur est filtré par les sélections sur le champ Année, les sélections par mois sont ignorées et le résultat est splitté par mois et devrait valoir toujours 0 ou 1

    Je ferais une copie du graphique en tant que tableau et je ferais 1 expression pour le numérateur, 1 pour le 1er diviseur et 1 pour le 2e diviseur et je regarderais si les valeurs se comportent bien comme je le pense. Vu les formules je dirais que les 2 diviseurs restent constants par mois et que c'est le numérateur qui varie, donc si erreur il y a c'est dans la formule du numérateur. Je pense qu'il y a quelque chose que vous n'avez pas précisé au niveau du modèle : par exemple que les champs sur lesquels sont appliqués la sélection ne sont pas les mêmes que ceux du Set Analysis ou la différence entre Année_Mois_Sortie_Lot et ID_TERME.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudes et contrôle de gestion
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudes et contrôle de gestion
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Par défaut
    Merci nuke_y d'avoir pris du temps sur le sujet.

    Je suis d'accord avec vous, la règle de gestion sur ID_TERME n'est pas la meilleure solution. Je n'ai pas encore assez de recul pour tenter de la modifier.

    Vous avez aussi raison pour le filtre sur Année, il doit figurer dans le Set Analysis du graphique.
    Par contre, le numérateur du graphique n'est plus le même que celui du tableau pour les mois de janvier ou mars quand ils sont sélectionnés (Cf. copie écran)
    Nom : qlik2.png
Affichages : 238
Taille : 139,2 Ko

    J'ai copié le graphique en tableau et c'est bien le numérateur qui varie.
    J'ai repris le principe du diviseur 2 sur un autre Set Analysis de graphique mais je ne comprends pas son intérêt. Je l'ai supprimé.

    De plus, le premier terme ID_TERME historié est 201501, ce qui doit fausser le résultat même si il y a des lots dont le champ Année_Mois_Sortie_Lot prend des valeurs antérieures au terme 201501.

  4. #4
    Membre Expert Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Par défaut
    Mon conseil : repartir de la base: le modèle de données.

    Est-ce possible d'envoyer l'application ? Là je sens que c'est vraiment tout bête mais là je n'arrive pas à saisir le modèle de données.

    Au pire est-ce qu'on peut avoir une image du modèle de données ? Est-ce que vous pouvez préciser le lien entre ID_TERME et Année et Mois ? ID_TERME = Année+Mois ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudes et contrôle de gestion
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Etudes et contrôle de gestion
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Par défaut
    Bonjour,

    J'ai un extrait du script qui me donne le MCD suivant :

    Nom : qlik3.png
Affichages : 232
Taille : 23,8 Ko

    Script :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    //Onglet 1
     
    SET ThousandSep=' ';
    SET DecimalSep=',';
    SET MoneyThousandSep=' ';
    SET MoneyDecimalSep=',';
    SET MoneyFormat='# ##0,00 €;-# ##0,00 €';
    SET TimeFormat='hh:mm:ss';
    SET DateFormat='DD/MM/YYYY';
    SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';
    SET MonthNames='janv.;févr.;mars;avr.;mai;juin;juil.;août;sept.;oct.;nov.;déc.';
    SET DayNames='lun.;mar.;mer.;jeu.;ven.;sam.;dim.';
     
    //Onglet 2
     
    Cal_lot :
     
    LOAD distinct AnneeMois AS LIEN_CAL_LOT, 
    	AnneeMois AS AnneeMois_Lot,
     
    	  LibelleMois AS LibelleMois_Lot,
     
        LibCourtMois AS LibCourtMois_Lot;
    SQL SELECT *
    FROM "VM_CALENDRIER";
     
    //Onglet 3
     
    Lot :
    LOAD 
    	ID_TERME&'-'&ID_LOT AS LIEN_LOT_VAC,
    	ID_TERME&'-'&ID_LOT AS LIEN_LOT_ANN,
    	ID_TERME&'-'&ID_LOT AS LIEN_LOT_CL,
    	ID_TERME AS LIEN_CAL_LOT,
    	 "VF_ACTIF_LOT",
    	ID_UNIT&'-'&ID_COMCOM&'-'&ID_COM&'-'&ID_RESID AS LIEN_GM, 
    	left("ID_TERME",4) as Annee_Lot,
        right(left("ID_TERME",6),2) as Mois_Lot,
    	"ID_LOT",
    //     "ID_CONV",
        TYP_TERME,
    ID_NAT_LOT,
      	IF(ID_NAT_LOT='ANX','Annexe',
    		IF(ID_NAT_LOT='HEB','Hébergement',
    			IF(ID_NAT_LOT='LGT','Logement',
    				IF(ID_NAT_LOT='SPE','Local spécifique',
    					IF(ID_NAT_LOT='STA','Stationnement','Autre')))))as 'Nature Lot'; 
     
    SQL SELECT *
    FROM "VM_LOT";
     
     
     
     
    //Onglet 4
     
    Contrat_lot:
    LOAD 
    	 ID_TERME&'-'&ID_LOT AS LIEN_LOT_CL,
    	 ID_CONTRAT&'-'&ID_TERME as LIEN_CONT_CL, 
    	 ID_CONTRAT&'-'&ID_LOT&'-'&TYP_CONT&'-'&ID_TERME as LIEN_CONT_QUIT,
     
          "D_ENT_CNTLOT",
          left (D_ENT_CNTLOT,4) AS Année_entrée_lot,
    	IF(left(right (D_ENT_CNTLOT,5),2)='01',month(D_ENT_CNTLOT),
    		IF(left(right (D_ENT_CNTLOT,5),2)='02',month(D_ENT_CNTLOT),
    			IF(left(right (D_ENT_CNTLOT,5),2)='03',month(D_ENT_CNTLOT),
    				IF(left(right (D_ENT_CNTLOT,5),2)='04',month(D_ENT_CNTLOT),
    					IF(left(right (D_ENT_CNTLOT,5),2)='05',month(D_ENT_CNTLOT),
    						IF(left(right (D_ENT_CNTLOT,5),2)='06',month(D_ENT_CNTLOT),
    							IF(left(right (D_ENT_CNTLOT,5),2)='07',month(D_ENT_CNTLOT),
    								IF(left(right (D_ENT_CNTLOT,5),2)='08',month(D_ENT_CNTLOT),
    									IF(left(right (D_ENT_CNTLOT,5),2)='09',month(D_ENT_CNTLOT),
    										IF(left(right (D_ENT_CNTLOT,5),2)='10',month(D_ENT_CNTLOT),
    											IF(left(right (D_ENT_CNTLOT,5),2)='11',month(D_ENT_CNTLOT),
    													IF(left (right (D_ENT_CNTLOT,5),2)='12',month(D_ENT_CNTLOT),'Autre'))))))))))))as Mois_entrée_lot,	
    	left (D_ENT_CNTLOT,4) & left(right (D_ENT_CNTLOT,5),2) AS Année_Mois_Entrée_Lot,		
     
     
          "D_SOR_CNTLOT",
          left (D_SOR_CNTLOT,4) AS Année_sortie_lot,
    	IF(left(right (D_SOR_CNTLOT,5),2)='01',month(D_SOR_CNTLOT),
    		IF(left(right (D_SOR_CNTLOT,5),2)='02',month(D_SOR_CNTLOT),
    			IF(left(right (D_SOR_CNTLOT,5),2)='03',month(D_SOR_CNTLOT),
    				IF(left(right (D_SOR_CNTLOT,5),2)='04',month(D_SOR_CNTLOT),
    					IF(left(right (D_SOR_CNTLOT,5),2)='05',month(D_SOR_CNTLOT),
    						IF(left(right (D_SOR_CNTLOT,5),2)='06',month(D_SOR_CNTLOT),
    							IF(left(right (D_SOR_CNTLOT,5),2)='07',month(D_SOR_CNTLOT),
    								IF(left(right (D_SOR_CNTLOT,5),2)='08',month(D_SOR_CNTLOT),
    									IF(left(right (D_SOR_CNTLOT,5),2)='09',month(D_SOR_CNTLOT),
    										IF(left(right (D_SOR_CNTLOT,5),2)='10',month(D_SOR_CNTLOT),
    											IF(left(right (D_SOR_CNTLOT,5),2)='11',month(D_SOR_CNTLOT),
    													IF(left (right (D_SOR_CNTLOT,5),2)='12',month(D_SOR_CNTLOT),''))))))))))))as Mois_sortie_lot,	
    	left (D_SOR_CNTLOT,4) & left(right (D_SOR_CNTLOT,5),2) AS Année_Mois_Sortie_Lot				
     
        ;
    SQL SELECT *
    FROM "VM_CONTRAT_LOT";
    left Join
    LOAD
    	ID_CONTRAT&'-'&ID_LOT&'-'&TYP_CONT&'-'&if(right(ID_TERME,2)=12,ID_TERME+89,ID_TERME+1) as LIEN_CONT_QUIT,
        "D_ENT_CNTLOT";
    SQL SELECT *
    FROM "VM_CONTRAT_LOT"
    ;
     
     
    // Onglet 5
     
    Contrat :
    LOAD ID_CONTRAT&'-'&ID_TERME as LIEN_CONT_CL, 
    	ID_CONTRAT&'-'&ID_TERME as LIEN_CONT_CTX,
    	ID_CONTRAT&'-'&ID_TERME as LIEN_CONT_PA,
    	ID_TERME AS LIEN_CAL_CONT,
    	"ID_CONTRAT",
     
        ID_TERME as ID_TERME
     
    ;
    SQL SELECT *
    FROM "VM_CONTRAT";
     
     
    // Onglet 6
     
    Ref :
    LOAD distinct LIEN_CAL_LOT,
    	 Annee_Lot,
    	 Mois_Lot,
    	 TYP_TERME
    Resident Lot
    ORDER BY LIEN_CAL_LOT;
    inner join
    LOAD distinct LIEN_CAL_LOT,
    	 LibCourtMois_Lot
    Resident Cal_lot
    ORDER BY LIEN_CAL_LOT;
     
    NoConcatenate
     
    Ref_M :
    LOAD distinct LIEN_CAL_LOT,
    	 Annee_Lot,
    	 Mois_Lot,
    	 TYP_TERME,
    	 LibCourtMois_Lot
    Resident Ref
    WHERE TYP_TERME='M'
    ORDER BY LIEN_CAL_LOT;
     
     
     
    LET MaxAnneeM=Num(Peek('Annee_Lot',-1,'Ref_M'));
    LET MaxMoisM=Peek('LibCourtMois_Lot',-1,'Ref_M');
    LET MaxAnneeQ=Num(Peek('Annee_Lot',-1,'Ref'));
    LET MaxMoisQ=Peek('LibCourtMois_Lot',-1,'Ref');
     
    DROP Table Ref;
    DROP Table Ref_M;
    En espérant que cela soit assez lisible.

Discussions similaires

  1. Formalisation graphique des algorithmes
    Par David R. dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 08/12/2012, 10h21
  2. Développement de plug-in -> vue graphique!
    Par yassine_23 dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 01/04/2003, 18h04
  3. Réponses: 3
    Dernier message: 09/02/2003, 01h09
  4. [RAVE][DELPHI7] Comment faire un graphique ?
    Par DFANDOR dans le forum Rave
    Réponses: 7
    Dernier message: 06/02/2003, 20h25
  5. Réponses: 10
    Dernier message: 27/08/2002, 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