Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Calcul en qlikview

Bonjour,

J'ai un soucis pour traduire une requete sous forme de formule en qlikview.

ma requete est la suivante:

select sum(valeur) from (
select sum(value)/count(distinct codart) as valeur from tz_week_month_split tz

where tz.type = 'WEEK'

and tz.idaction = '00000000000SYSREP161010252345'

and tz.codmeasure = 'QTYESTIMATEDDISPLAY'

group by coddisplay)


et voici la traduction que j'en fait avec une formule qlikview

SUM(

    Aggr(

        Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>,<FORECAST_F.TYPE ={'WEEK'}>,<FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}> }     

               FORECAST_F.QTYESTIMATEDDISPLAY )/COUNT(DISTINCT FORECAST_F.CODART),

        FORECAST_F.IDACTION,FORECAST_F.CODDISPLAY

    )

)

la formule ne me donne pas la même réponse avec la requete,

Ma requete me retoure 840 ce qui n'est pas le cas de ma formule


Pouvez vous m'aider si le problème se trouve au niveau de la syntaxe de ma formule. Depuis des heures je ne trouve pas la solution.


Merci d'avance

1 Solution

Accepted Solutions
sfatoux72
Partner - Specialist
Partner - Specialist

Le mieux, ce serait de résoudre tes problèmes de doublon.

Si j'ai bien compris, QTYESTIMATEDDISPLAY est unique par CODDISPLAY et par semaine.

Si cela est bien le cas, tu peux utiliser simplement l'expression ci-dessous.

=Sum(
     
Aggr(
          
Only( {$<IDACTION={'00000000000SYSREP161010252345'}>}  QTYESTIMATEDDISPLAY ),
          
CODDISPLAY, semaine
      )
)

Tu peux utiliser soit Only, soit Avg. Si pour une semaine et un CODDISPLAY le postulat de départ n'est pas respecté:

  • Only retournera Null pour cette combinaison
  • Avg retournera la moyenne des QTYESTIMATEDDISPLAY pour cette combinaison

View solution in original post

12 Replies
sfatoux72
Partner - Specialist
Partner - Specialist

Bonjour,

le set analysis doit être défini dans la fonction sum, mais également dans la fonction Count. Sinon, ces 2 fonctions ne sont pas executé sur le même set de données:

SUM(

    Aggr(

        Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>,<FORECAST_F.TYPE ={'WEEK'}>,<FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}> }     

              FORECAST_F.QTYESTIMATEDDISPLAY )/COUNT({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>,<FORECAST_F.TYPE ={'WEEK'}>,<FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}> } DISTINCT FORECAST_F.CODART),

        FORECAST_F.IDACTION,FORECAST_F.CODDISPLAY

    )

)

Anonymous
Not applicable
Author

Bonjour,

J'ai apporté la correction dans le count également et quand je l'exécute le resultat est 0. Je n'ai toujours pas la même réponse que la requete, je ne comprend plus rien ce cette formule. Je voudrais savoir si c'est la bonne interpretation que j'ai fait de la requete?

Merci

sfatoux72
Partner - Specialist
Partner - Specialist

En regardant mieux votre requête, j'ai remarqué que le group by ne se fait que sur CODDISPLAY, alors que dans l'expression vous le faisiez également sur  IDACTION

SUM(

    Aggr(

        Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>,<FORECAST_F.TYPE ={'WEEK'}>,<FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}> }     

              FORECAST_F.QTYESTIMATEDDISPLAY )/COUNT({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>,<FORECAST_F.TYPE ={'WEEK'}>,<FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}> } DISTINCT FORECAST_F.CODART),

        FORECAST_F.CODDISPLAY

    )

)

C'est par contre étrange que vous ayez 0

sfatoux72
Partner - Specialist
Partner - Specialist

Je crois que j'ai trouvé le problème, il y avait des "<", ">" un peu partout dans le set analysis :

SUM(

    Aggr(

        Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}, FORECAST_F.TYPE ={'WEEK'}, FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}>} FORECAST_F.QTYESTIMATEDDISPLAY )  /  COUNT( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}, FORECAST_F.TYPE ={'WEEK'}, FORECAST.CODEMEASURE={'QTYESTIMATEDDISPLAY'}>} DISTINCT FORECAST_F.CODART),

        FORECAST_F.CODDISPLAY

    )

)

Anonymous
Not applicable
Author

Oui c'est d'autre condition que j'ai ajouté dans la formule, mais cela ne change en rien la réponse que je trouve.

Pour ce fais j'ai donc decidé de faire des jeux de tests pour mieux comprendre ce qui se passe dans Qlikview et voila ce qui en ressort: j'ai donc fait une table pour voir mes valeurs recherchées test.png

avec ma requete j'ai bien les 840. Mais quand je fais une somme de mes valeurs, j'ai 6760.

J'ai n'est que faire

sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>}    

               FORECAST_F.QTYESTIMATEDDISPLAY)

De la je me suis dit que tout va mal. Je ne sais pas ce que Qlikview me calcul pour sortir 6760 au lieu de 840

Anonymous
Not applicable
Author

Pour moi c'est pas ça l'erreur, même en enlevant les <> cela ne change rien à ma réponse. Le problème ne vient pas de la, surement d'ailleur c'est pour quoi je suis entrain de faire des tests pour voir ou est l'erreur.

sfatoux72
Partner - Specialist
Partner - Specialist

Pas de panique 😉

Dans ton objet "Zone table", Qlikview n'affiche qu'une ligne par combinaison.

Pour confirmer cela, crée un objet de type "Graphique"."Tableau simple", sélectionne tes 3 champs comme dimension et ajoute l'expression Sum(1), Tu auras pour chaque combinaison le nombre de ligne chargée.

Si le nombre de ligne est trop important, c'est surement une erreur dans ton script de chargement.

Anonymous
Not applicable
Author

J'ai fait comme tu me l'as dit en créant une table simple et remit la formule dans expression. j'ai aussi rajouté le champ FORECASTART(pour les articles) pour voir les articles par semaine et j'obtiens ça(voir tableau):

exactement les mêmes données que la base de données ou j'ai appliqué la requete suivante:

select sum(valeur) from (
select sum(FORECAST_F.QTYESTIMATEDDISPLAY)/count(distinct FORECAST_F.CODART) as valeur from tz_week_month_split tz

where
tz.idaction = '00000000000SYSREP161010252345'
group by coddisplay,tz.idaction


Le resultat de cette requete me retournait 840

test2.png

et la sommeQT est calculé à partir de ça:

  Sum({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>} FORECAST_F.QTYESTIMATEDDISPLAY)  

             


et moi pour interprèter cette dans Qlikview j'ai donc procédé comme suit:


=SUM(

    Aggr(

        Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>}    

              FORECAST_F.QTYESTIMATEDDISPLAY )/COUNT({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>} DISTINCT FORECAST_F.CODART),

        FORECAST_F.IDACTION,FORECAST_F.CODDISPLAY

    )

) ma formule me donne une réponse très loin de la valeur attendu.

Dans un premier temps, j'ai donc fait ceci:

SUM(

    Aggr(

        Sum( {$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}>}    

              FORECAST_F.QTYESTIMATEDDISPLAY ),

        FORECAST_F.IDACTION,FORECAST_F.CODDISPLAY

    )

)   

                /

SUM(AGGR(COUNT({$<FORECAST_F.IDACTION={'00000000000SYSREP161010252345'}> } DISTINCT FORECAST_F.CODART),FORECAST_F.CODDISPLAY, FORECAST_F.IDACTION))

mais je trouve 751,11 au lieu de 840

j'ai vraiment besoin d'aide sur cette formule.

peut-on faire un group by sans aggrega? (une question que je me pose)

sfatoux72
Partner - Specialist
Partner - Specialist

Salut,

Je crois que je suis sur une piste, peux-tu :

  • Créé une table simple
    • Avec les dimensions suivantes :
      • FORECAST_F.IDACTION
      • FORECAST_F.TYPE
      • FORECAST.CODEMEASURE
      • FORECAST_F.QTYESTIMATEDDISPLAY
      • FORECAST_F.CODART)
      • FORECAST_F.CODDISPLAY
    • Avec l'expression suivante:
      • Sum(1)
  • Me transmettre le résultat sous forme de fichier Excel

Pour joindre un fichier, il faut utiliser l'éditeur avancé et cliquer sur Joindre en bas à droite