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 :

Expression de total personnalisée


Sujet :

QlikView

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut Expression de total personnalisée
    Bonjour,

    Je souhaite personnaliser la ligne de total dans un tableau croisé dynamique afin d'obtenir le résultat de l'image ci-dessous.

    Nom : Capture.PNG
Affichages : 599
Taille : 5,9 Ko

    Comment faire ?

  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
    Bonjour,

    Dans un tableau droit, la fonction "dimensionality()" permet de savoir à quel niveau d’agrégation vous vous trouvez (0 = "total", 1 = "agrégé selon la première dim", ...).
    Dans une tableau croisé, il y a en plus la fonction "secondarydimensionality()" qui permet de savoir à quel niveau vous êtes sur les dimensions horizontales.

    Ainsi, une expression du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(Dimensionality() = 0,
    count(distinct Mois)
    ,
    sum(Valeur)
    )
    affichera dans la ligne "total" le nombre de mois concernés par la colonne, tandis que les lignes afficheront la somme des valeurs.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    En mettant le code ci-dessous, j'obtient bien le calcul désiré sur chaque ligne et le nombre 888 sur le total horizontal (tout en bas du tableau).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(	Dimensionality()=0
    	, 888
    	, (count(if(Dérogation = 'Avec Dérogation', 1)) + count(if(Statut = 'Refusé', 1))) / count(N°Echantillonage)
    )
    Je souhaite donc maintenant mettre à la place de ce 888, le count de toutes les valeurs de ligne qui sont supérieures à 0.25.
    Je fais donc le code ci-dessous mais plus rien ne s'affiche même sur les lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(	Dimensionality()=0
    	, count (if((count(if(Dérogation = 'Avec Dérogation', 1)) + count(if(Statut = 'Refusé', 1))) / count(N°Echantillonage) >= 0.25, 1))
    	, (count(if(Dérogation = 'Avec Dérogation', 1)) + count(if(Statut = 'Refusé', 1))) / count(N°Echantillonage)
    )
    Un conseil ?

  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
    On ne peut pas faire de "count(if(count(...".

    A chaque niveau, il faut agréger les données (fonction "aggr(expression, dim1, dim2, ...)")pour qu'il puisse savoir ce qu'il doit compter.


    Il faudrait mettre quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sum(
    aggr(
    if(sum(if(Dérogation = 'Avec Dérogation', 1)) + sum(if(Statut = 'Refusé', 1)) / count(N°Echantillonage) >= 0.25, 1)
    , MaDimension)
    )
    où "MaDimension" est la dimension utilisée dans le tableau.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Dans mon tableau, j'ai les dimensions suivantes : année, trimestre, mois, dépôt.
    Chaque ligne correspond à un dépôt.
    Je dois donc aggréger sur la dimension dépôt ?

    Je fais ça mais ça ne fonctionne toujours pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(	Dimensionality()=0
    	, sum(
    		aggr(
    		if(sum(if(Dérogation = 'Avec Dérogation', 1)) + sum(if(Statut = 'Refusé', 1)) / count(N°Echantillonage) >= 0.25, 1)
    		, depot)
    		)
    	, (count(if(Dérogation = 'Avec Dérogation', 1)) + count(if(Statut = 'Refusé', 1))) / count(N°Echantillonage)
    )
    Il affiche 0,0 sur le total horizontal en bas du tableau.

    J'ai aussi essayé d'aggréger selon les 4 dimensions en vain.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(	Dimensionality()=0
    	, sum(
    		aggr(
    		if(sum(if(Dérogation = 'Avec Dérogation', 1)) + sum(if(Statut = 'Refusé', 1)) / count(N°Echantillonage) >= 0.25, 1)
    		, Année, TrimDate, Mois_Ecrit_En_Entier, depot)
    		)
    	, (count(if(Dérogation = 'Avec Dérogation', 1)) + count(if(Statut = 'Refusé', 1))) / count(N°Echantillonage)
    )
    Nom : Untitled.png
Affichages : 575
Taille : 23,2 Ko

  6. #6
    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
    Avec les données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    data:
    LOAD * INLINE [
    date, depot, valeur
    1, Aaa, 10
    1, Aaa, 12
    1, Bbb, 12
    1, Ccc, 14
    1, Ccc, 8
    2, Aaa, 15
    2, Bbb, 16
    2, Bbb, 8
    2, Ccc, 11
    ];
    en faisant un tableau croisé avec "depot" et "date", et l'expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(Dimensionality() = 0,
     
    sum(
    aggr(
    if(sum(valeur) > 20, 1)
    , depot, date)
    )
     
    ,
    sum(valeur)
    )
    j'obtiens bien le résultat attendu :



    Je vous invite à décomposer vos calculs pour vérifier ce que vous avez à chaque étape.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    J'ai bien respecté votre synthaxe mais j'ai l'impression que votre tableau croisé dynamique ne se construit pas de la même manière que le mien.
    En effet, vos dimensions depot et date sont sur la même ligne contrairement à mon tableau.
    J'ai essayé de reproduire cette configuration pour essayer de comprendre, en vain.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(	Dimensionality()=0
    	, sum(
    		aggr(
    			if(sum(if(Dérogation = 'Avec Dérogation', 1)) + sum(if(Statut = 'Refusé', 1)) / count(N°Echantillonage) >= 0.25, 1)
    			, depot, Mois_Ecrit_En_Entier, TrimDate, Année
    		)
    	)
    	, (count(if(Dérogation = 'Avec Dérogation', 1)) + count(if(Statut = 'Refusé', 1))) / count(N°Echantillonage)
    )
    Nom : Untitled.png
Affichages : 535
Taille : 14,5 Ko

  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
    Si vous pouvez faire un mini jeu de données en "LOAD INLINE" avec uniquement les colonnes qui nous intéressent, ça serait plus simple pour vous aider.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Oui, j'aurais dû y penser dès le début.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    DATA:
    LOAD * INLINE [
    annee, trimestre, mois, depot, taux
    2017, 1, Janvier, depot1, 0.2
    2017, 1, Janvier, depot2, 0.3
    2017, 1, Janvier, depot3, 0.4
    2017, 1, Janvier, depot4, 0.1
    2017, 1, Janvier, depot5, 0.15
    2017, 1, Janvier, depot6, 0.8
    ];

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(Dimensionality() = 0,
     
    sum(
    aggr(
    if(sum(taux) > 0.2, 1)
    , depot, annee, trimestre, mois)
    )
     
    ,
    sum(taux)
    )

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Je suis tout à fait d'accord avec vous mais lorsqu'on ajoute une expression ça ne fonctionne plus.
    Qu'en pensez-vous ?

  12. #12
    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
    Quelle expression ?

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Dans mon tableau j'ai plusieurs expressions et lorsqu'il y en a plus d'une, j'ai l'impression que le tableau change de présentation et notamment pour la disposition des dimensions.
    Par exemple, si j'ajoute une expression et que je met à l'intérieur : =1 , le tableau change la disposition des dimensions et j'ai comme l'impression que c'est pour ça que ça ne fonctionne plus.

    En effet, si vous regardez mes posts d'hier, j'ai bien respecté la même synthaxe que vous et pourtant j'ai toujours ce 0,0 d'affiché dans le total.

  14. #14
    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
    Tout dépend de comment vous placez vos expressions / dimensions.
    Il est aussi possible qu'il y ait une erreur dans votre expression.

    C'est pour cela qu'il faudrait que vous nous donniez un LOAD INLINE avec quelques données ainsi que l'expression qui ne fonctionne pas.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Je ne peux pas mettre en ligne un load des données réelles car ce serait considéré comme une fuite de données.

    Je viens de faire un test avec une expression différente plus simple et ça fonctionne.
    Le problème ne vient donc pas de la présence de plusieurs expressions et de leur positionnement mais comme vous l'avez dit, de mon expression.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    =
    if(	Dimensionality()=0
    	, sum(
    		aggr(
    			// Ci-dessous je souhaite compter 1 à chaque fois que le morceau en rouge est >= 0.25.
                            if((sum(if(Dérogation = 'Avec Dérogation', 1)) + sum(if(Statut = 'Refusé', 1))) / count(N°Echantillonage)) >= 0.25, 1)
    			, depot, Année, TrimDate, Mois_Ecrit_En_Entier
    		)
    	)
            // Si je ne suis pas sur le total, je fais mon calcul normal :
    	, (count(if(Dérogation = 'Avec Dérogation', 1)) + count(if(Statut = 'Refusé', 1))) / count(N°Echantillonage)
    )
    Je ne comprends pas en quoi cette expression diffère de ce que nous avons fait dans l'exemple plus simple d'autant plus que j'obtient les bonnes valeurs sur les lignes, c'est simplement le total qui conserve la valeur 0,0.

  16. #16
    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
    L'expression est légèrement différente entre le total ("sum(if...") et l'expression de ligne ("count(if...".
    Peut-être que cela vient de là...

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    J'ai retravaillé sur l'expression, toujours en vain.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    =
    if(	Dimensionality()=0
    	, count(
    		aggr(
    			if((count(if(Dérogation = 'Avec Dérogation', 1)) + count(if(Statut = 'Refusé', 1))) / count(N°Echantillonage) >= 0.25, 1)
    			, depot, Année, TrimDate, Mois_Ecrit_En_Entier
    		)
    	)
    	, (count(if(Dérogation = 'Avec Dérogation', 1)) + count(if(Statut = 'Refusé', 1))) / count(N°Echantillonage)
    )

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    J'ai simplifié l'expression au maximum.
    Dans la colonne [TEST], je mets les valeurs de la colonne [Taux Non Conformes] et au total je compte ceux >= 0.25.

    Voici donc l'expression de [TEST] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    =
    if(	Dimensionality()=0
    	, count(
    			if([Taux Non Conformes] >= 0.25, 1)
    		)
    	, [Taux Non Conformes]
    )
    Le même problème est présent donc retour au point de départ, l'expression n'est pas responsable du problème.
    C'est un mystère complet.

    Nom : Untitled.png
Affichages : 553
Taille : 22,4 Ko

  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
    Dans votre dernière expression, vous n'utilisez pas de fonction "aggr". Cela ne peut pas fonctionner.

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 64
    Points : 37
    Points
    37
    Par défaut
    Chose très étonnante, si je met un nombre à la place de l'expression pour le total, ça fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    =
    if(	Dimensionality()=0
    	, 888
    	, [Taux Non Conformes]
    )
    Nom : Untitled.png
Affichages : 529
Taille : 14,3 Ko

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Map Totalement Personnalisée
    Par Kcinn4y dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 03/02/2015, 21h33
  2. site reseau social open source totalement personnalisable
    Par shaineu dans le forum APIs Réseaux sociaux
    Réponses: 0
    Dernier message: 09/10/2013, 23h24
  3. [vb express] Raccourcis clavier personnalisables
    Par pedro85 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 04/05/2008, 20h32
  4. nb pages total dans expression
    Par couetbis dans le forum iReport
    Réponses: 2
    Dernier message: 05/11/2007, 13h59

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