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 :

Problème d'agrégation MAX dans script avec variable DATE Set Analysis


Sujet :

QlikView

  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Problème d'agrégation MAX dans script avec variable DATE Set Analysis
    Bonjour a tous,

    et merci d'avance pour votre aide (j’espère pouvoir vous aider a mon tour sur le forum prochainement )

    Je suis un novice dans le monde de la B.I est donc sur Qlikview mais j'ai commencer a faire des reportings intéressant pour ma société sauf que la je trouve pas la solution a mon problème et je tourne au rond le problème est le suivant :

    Au début j'ai quelques choses qui marche plutôt bien sauf qu'il faut a chaque fois recharger les données pour que le set analysis soit prit en compte dans le script (donc les valeur dans le tableau) :

    LOYERPALIERMAX:
    SQL SELECT
    ID_CLEBAIL,
    Max(LOYERPALIER_MANNUEL) as DernierLoyerProgressif
    FROM "dwh".dbo."LOYERPALIER"
    where LOYERPALIER_DFIN >= $(vDATEANALYSE)
    GROUP BY ID_CLEBAIL;


    Dans mon tableau j'ai juste a faire la somme de ce montant dans l'expression de la colonne :

    Sum(DernierLoyerProgressif)

    Le problème avec cette méthode, c'est que lorsque un utilisateur modifie la date pour voir les données changer dynamiquement via l'objet calendrier alors il se passe rien tant qu'on recharge par les données ce qui est pas possible via l'accès web de Qlikview ...donc pour que la date qui est modifier par l’utilisateur soit prise en compte, j'ai comprit qui fallait mettre la variable set analysis non pas dans le script mais dans l'expression du tableau de cette manière :

    Sum(if((LOYERPALIER_DFIN >= $(vDATEANALYSE)),DernierLoyerProgressif)),

    le problème est que pour ajouter la valeur de date (LOYERPALIER_DFIN) dans mon expression je suis obligé de l'indiquer dans le script. Donc, lorsque j’essaye de rajouter la valeur date LOUYERPALIER_DFIN est que je lance le chargement Qlikview m'indique que c'est pas possible parce qu’il y a pas d’agrégation ou de GROUP BY pour LOYERPALIER_DFIN et quand je l'ajoute dans le GROUP BY j'ai des montants incohérent dans mon tableau donc je sais pas comment l'ajouter :


    LOYERPALIERMAX:
    SQL SELECT
    LOYERPALIER_DFIN, // rajout de la valeur de date
    ID_CLEBAIL,
    Max(LOYERPALIER_MANNUEL) as DernierLoyerProgressif
    FROM "dwh".dbo."LOYERPALIER"
    GROUP BY ID_CLEBAIL;



    message d'erreur :

    SQL##f - SqlState: 37000, ErrorCode: 8120, ErrorMsg: [Microsoft][ODBC SQL Server Driver][SQL Server]La colonne 'dwh.dbo.LOYERPALIER.LOYERPALIER_DFIN' n'est pas valide dans la liste de sélection parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause GROUP BY.
    LOYERPALIERMAX:
    SQL SELECT
    ID_CLEBAIL,
    LOYERPALIER_DFIN,
    Max(LOYERPALIER_MANNUEL) as DernierLoyerProgressif
    FROM "dwh".dbo."LOYERPALIER"
    GROUP BY ID_CLEBAIL


    Lorsque j’essaye de contourner le problème pour faire dans le script avec la commande LOAD j ‘ai un autre message d’erreur :

    LOAD "LOYERPALIER_DDEBUT",
    "LOYERPALIER_DFIN",
    Max (LOYERPALIER_MANNUEL) as DernierLoyerProgressif,
    "ID_CLEBAIL";
    SQL SELECT *
    FROM "dwh".dbo."LOYERPALIER";

    Message d'erreur :

    Échec de lecture ODBC
    SQL SELECT *
    FROM "dwh".dbo."LOYERPALIER"


    Pourtant, j'ai un autre colonne dans mon tableau mais sans l'agrégation max dans le script et ça marche très bien dans mon tableau des que je modifie la date dans le calendrier les valeurs sont modifier de manière dynamique :

    LOAD "LOYERFRANCHISE_DDEBUT", // date de debut de loyer
    "LOYERFRANCHISE_DFIN", // date de fin de loyer
    "LOYERFRANCHISE_MANNUEL", // montant du loyer de franchise
    "ID_CLEBAIL"; // clé pour la jointure avec un autre table
    SQL SELECT *
    FROM "dwh".dbo."LOYERFRANCHISE";


    et dans l'expression du tableau, je met ceci :

    Sum(if(LOYERFRANCHISE_DDEBUT<=$(vDATEANALYSE) and (LOYERFRANCHISE_DFIN >= $(vDATEANALYSE)),LOYERFRANCHISE_MANNUEL))


    Donc effectivement je pense que la solution est dans le chargement du script et trouver une solution pour charger à la fois l’agrégation MAX sur LOYERPALIER_MANNUEL et la date LOYERPALIER_FIN, pour permettre que cette variable soit par la suite dynamique via ceci : Sum(if((LOYERPALIER_DFIN >= $(vDATEANALYSE)),DernierLoyerProgressif)),

    J’espère qu'une solution a mon problème et je vous remercie d'avance pour vos réponses

    @+

  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
    Les données du script ne sont mises à jour qu'au rechargement suivant des données. Le fait de sélectionner une autre date d'analyse ne change rien aux données lues.
    Ce qu'il faut, c'est utiliser un script de chargement qui charge le détail données :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DetailLoyer:
    SQL Select ID_CleBail,LoyerPalier_DDEBUT,LoyerPalier_DFIN,LoyerPalier_MAnnuel
    from dwh.dbo.loyerPalier;
    Il faut ensuite utiliser le "set analysis" ou "analyse d'ensemble" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max( {1<LoyerPalier_DFin >= {$(vDateAnalyse)} >} LoyerPalier_MAnnuel )
    utilisé dans l'expression d'un graphique ou tableau va retourner la valeur maxi de LoyerPalier_MAnnuel pour les lignes où la date de fin est supérieure ou égale à la variable vDateAnalyse, indépendamment de la sélection en cours.

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre retour,

    Ok, pour la 1er étape dans le script (même plutot logique) de tout charger :

    LOAD
    "LOYERPALIER_DDEBUT", // date de debut de loyer
    "LOYERPALIER_DFIN", // date de fin de loyer
    "LOYERPALIER_MANNUEL", // montant du loyer de franchise
    "ID_CLEBAIL"; // clé pour la jointure avec un autre table
    SQL SELECT *
    FROM "dwh".dbo."LOYERFRANCHISE";

    Mais pour la 2ème étape mon objectif et uniquement retourner la valeur maxi de LoyerPalier_MAnnuel pour les lignes où la date de fin est supérieure ou égale à la variable vDATEANALYSE par rapport à la date de fin (exemple qui marche pas mais dans le principe c'est ce que je souhaite faire :Sum (if(LOYERPALIER_DFIN >= $(vDATEANALYSE),Max(LOYERPALIER_MANNUEL))). La varible vDATEANALYSE est une date qui varie selon la sélection venant d'un objet calendrier de Qlikview , (voila le lien une impression ecran de mon tableau http://dl.free.fr/jo20UVWtd ainsi que le fichier .qvw au cas ou http://dl.free.fr/evvppfU1w )

    Car j'ai essayé l'expression suivante mais ca marche pas (problème de syntaxe ?):

    Max( {1<LOYERPALIER_DFIN >= {$(vDATEANALYSE)} >} LOYERPALIER_MANNUEL )

    Merci d'avance pour votre aide

  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
    Effectivement, dans la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Max( {1<LOYERPALIER_DFIN >= {$(vDATEANALYSE)} >} LOYERPALIER_MANNUEL )
    le >= est mal placé

    Essayez avec la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Max( {1<LOYERPALIER_DFIN = {">=$(vDATEANALYSE)"} >} LOYERPALIER_MANNUEL )
    Faire aussi attention à l'orthographe des variables. Dans certains endroits, QlikView ne fait pas la distinction majuscules/minuscules, dans d'autres il la fait !
    Le 1 indique de ne pas tenir compte des autres sélections. Remplacez le par un $ pour en tenir compte.

    PS : J'utilise qlikview Personal Edition, ce qui m'empêche d'ouvrir votre QVW

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Mince ca marche toujours pas et j'ai fait tres attention a la syntaxe partout (script et expression)

    dans le script SQL :

    LOAD "LOYERPALIER_DDEBUT",
    "LOYERPALIER_DFIN",
    "LOYERPALIER_MANNUEL",
    // "ID_BAIL",
    // "ID_PROPRIETE",
    "ID_CLEBAIL";
    SQL SELECT *
    FROM "dwh_proudreed".dbo."LOYERPALIER_F_PREMIANCE";


    La variable date dans le script sql :

    SET vDATEANALYSE= $(vDATEANALYSE);

    Puis l'expression dans le tableau ( la preuve http://dl.free.fr/getfile.pl?file=/teL5VbJP ) :

    Max( { 1 <LOYERPALIER_DFIN = {">= $(vDATEANALYSE)"} >} LOYERPALIER_MANNUEL)

    je vous remercie beaucoup pour toute votre aide, et j'espere que vous arriverez encore a m'aider car la je retourne l'expression dans tous les sens sans résultats.

    Merci d'avance

  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
    J'ai fait un QVW de test et ça marche !

    Quand je passe le curseur sur la formule, une info-bulle s'affiche avec l'expression complète.
    Vérifiez que votre variable est bien remplacée par la date sérialisée (40835 pour le 19/10/2011) et que la valeur change si vous modifiez votre date dans l'objet calendrier.

    Vérifiez aussi que votre champ LOYERPALIER_DFIN est bien pris comme une date dans votre table (c'est con, mais bon ...)

    Je ne sais pas si vous saurez l'ouvrir mais je vous joints mon QVW au cas où.

    Essayez aussi d'élargir votre tableau, pour vérifier la largeur de vos colonnes.
    Fichiers attachés Fichiers attachés

  7. #7
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    J'ai malheureusement, beaucoup de valeur possible pour la même date

    Donc, est-ce pour cette raison que les expressions du type ne fonctionne pas ? :

    Max({$<LOYERPALIER_DFIN={"$(vDATEANALYSE)"}>} LOYERPALIER_MANNUEL)

    Max( { 1 <LOYERPALIER_DFIN = {">= $(vDATEANALYSE)"} >} LOYERPALIER_MANNUEL)


    En plus ce qui est dommage c'est que l'expression comme celle-ci fonctionne mais c'est pas ce que je veux (au point de vue des valeurs) :

    Sum (if(LOYERPALIER_DFIN >= $(vDATEANALYSE),LOYERPALIER_MANNUEL))

    => dommage que celle ci fonctionne pas Sum (if(LOYERPALIER_DFIN >= $(vDATEANALYSE),Max(LOYERPALIER_MANNUEL)))

    Par contre si je fais l'agrégation Max au niveau du script ça marche (les valeurs sont correctes) mais sa veux aussi dire que les données ne sont plus dynamique avec la variable date du calendrier tant que je recharge pas les données et c'est justement pas ce que on me demande :silly: :

    Script =>

    LOYERPALIERMAX:
    SQL SELECT
    ID_CLEBAIL,
    Max(LOYERPALIER_MANNUEL) as DernierLoyerProgressif
    FROM "dwh_proudreed".dbo."LOYERPALIER_F_PREMIANCE"
    where LOYERPALIER_DFIN >= $(vDATEANALYSE)
    GROUP BY ID_PROPRIETE, ID_BAIL,ID_PROPRIETE,ID_CLEBAIL;


    Expression => Sum(DernierLoyerProgressif)

    Bref, je suis totalement entrain de m'arracher les cheveux , d’ailleurs pour être un un peu plus clair dans mon explication j'ai fait une petit vidéo (avec le fichier .qvw) en lien => TELECHARGER ICI donc si vous avez le temps de me donner vos conseils sur ma problématique , je vous serez éternellement redevable

    Merci d'avance.

  8. #8
    Candidat au Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 2
    Points
    2
    Par défaut RESOLU
    Bonsoir,

    Effectivement vous aviez raison il fallait bien utiliser la fonction max ainsi que Aggr() :

    sum(aggr(max(if(LOYERPALIER_DFIN>=vDATEANALYSE,LOYERPALIER_MANNUEL)),"ID_CLEBAIL"))

    Merci beaucoup pour votre aide.

    @+

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

Discussions similaires

  1. Éxecution dynamique de script avec variables
    Par StripMat dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/06/2014, 10h17
  2. Réponses: 8
    Dernier message: 15/02/2014, 15h10
  3. IMPORTER TEXTE dans formulaire avec variables
    Par Castafiore dans le forum 4D
    Réponses: 2
    Dernier message: 28/07/2011, 11h02
  4. Script avec variables SQL ?
    Par chrislav dans le forum Langage SQL
    Réponses: 9
    Dernier message: 10/06/2008, 09h57
  5. URL dans Label avec variable contenant un blanc
    Par davelop dans le forum ASP.NET
    Réponses: 5
    Dernier message: 19/03/2008, 16h28

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