Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Data Works for AI is here - Join the discussion and enter to win a pair of Qlik kicks: Join the Conversation!
cancel
Showing results for 
Search instead for 
Did you mean: 
frolland
Partner - Contributor II
Partner - Contributor II

Comment faire la somme qu'une seule fois d'une valeur qui est répétée plusieurs fois ?

Bonjour le communauté,

Je n'arrive pas à trouver une expression qui me permette de bien totaliser mes lignes et que le total de la colonne soit aussi correcte.

J'ai une commande (devis) et plusieurs facturations (situations 001, 008 et 009). Dans mon tableau je dois faire la somme des factures par commande et articles.

Dans mon jeu de données, pour chaque chrono (articles) j'ai le montant global de la commande qui correspond à l'article. Un article pouvant faire l'objet de plusieurs facturations pour la même commande.

Exemple 

Affaires%LSituat_Cle%LSituat_KeyLSituat_ActeurLSituat_Code_CommandeLSituat_ChronoLSituat_Code_SituationSum(Commande_HT)Facturé
toto0010|1001|10012409|0000000001|0001|001|00001|0080010|1001|10012409|0000000001|0001|00001|008000000000100010000100820021,0020021
toto0010|1001|10012409|0000000001|0001|001|00002|0080010|1001|10012409|0000000001|0001|00002|0080000000001000100002008158936,5015000
toto0010|1001|10012409|0000000001|0001|001|00002|0090010|1001|10012409|0000000001|0001|00002|0090000000001000100002009158936,508000
toto0010|1001|10012409|0000000001|0001|001|00004|0080010|1001|10012409|0000000001|0001|00004|00800000000010001000040087267,477000,00
toto0010|1001|10012409|0000000001|0001|001|00004|0090010|1001|10012409|0000000001|0001|00004|00900000000010001000040097267,47267,47
toto0010|1001|10012409|0000000002|0001|001|00005|0080010|1001|10012409|0000000002|0001|00005|00800000000020001000050082741,002741
toto0010|1001|10012409|0000000003|0001|001|00003|0010010|1001|10012409|0000000003|0001|00003|00100000000030001000030013843,003843

Il faut que j'arrive à ce résultat :

Affaires%LSituat_Cle%LSituat_KeyLSituat_ActeurLSituat_Code_CommandeLSituat_ChronoLSituat_Code_SituationSum(Commande_HT)Facturé
toto0010|1001|10012409|0000000001|0001|001|00002|0080010|1001|10012409|0000000001|0001|00002|0080000000001000100002008158936,50158000,00
toto0010|1001|10012409|0000000001|0001|001|00004|0080010|1001|10012409|0000000001|0001|00004|00800000000010001000040087267,477267,47
      TOTAL186224,97185288,47
toto0010|1001|10012409|0000000002|0001|001|00005|0080010|1001|10012409|0000000002|0001|00005|00800000000020001000050082741,002741,00
      TOTAL2741,002741,00
toto0010|1001|10012409|0000000003|0001|001|00003|0010010|1001|10012409|0000000003|0001|00003|00100000000030001000030013843,003843,00
      TOTAL3843,003843,00

 

Je n'arrive pas à calculer la colonne Commande HT à l'aide d'une expression  ! Pourriez vous m'aider ? Est-ce qu'il faut pour un cas comme celui là passer par le script de chargement ?

Merci par avance et bonne année à toutes et à tous 😉     

Labels (1)
1 Solution

Accepted Solutions
frolland
Partner - Contributor II
Partner - Contributor II
Author

Bonjour,

J'ai réglé mon problème en passant par le script de chargement. Déjà j'avais un souci au niveau des datas avec des lignes à blanc. J'ai donc commencé par faire du nettoyage.

// Suppression des lignes sans période
D_Situat_Situation_Ligne_4:
LOAD *,
      'toto' as toto    //J'ai ajouté ce champ pour que la table se crée, il y a surement mieux à faire mais pas trouvé !   
RESIDENT D_Situat_Situation_Ligne_3
WHERE num(LSituat_ExercicePeriode) >0 ;
DROP TABLE D_Situat_Situation_Ligne_3;

D_Situat_Situation_Ligne:
LOAD
    *,
    If(%LCommande_Chrono_Key <> Previous(%LCommande_Chrono_Key), 1, 0) AS LSituat_FirstValue
    RESIDENT D_Situat_Situation_Ligne_4
    ORDER BY %LCommande_Chrono_Key;

DROP TABLE D_Situat_Situation_Ligne_4;

// 5. Nettoyage
DROP FIELD toto;

Ici j'alimente une variable = 1 si je suis sur le premier chrono (article) de la facture. Au niveau du tableau je multiplie la Commande_ht par la variable qui est égale à 1. J'évite ainsi les doublons si j'ai plusieurs factures, faut juste que mon tri soit bon !! 

Merci pour vos retours cela m'a bien aidé dans mes recherches et ma solution. 

View solution in original post

4 Replies
g9uwy21zze
Contributor
Contributor

Hello, $Sum(Aggr(Min(Commande\_HT), LSituat\_Code\_Commande, LSituat\_Chrono))$ est la solution idéale : elle force Qlik à ne considérer qu'une seule valeur (le minimum) pour chaque couple Commande/Chrono, peu importe le nombre de lignes de facturation affichées. Cela permet de verve credit card payment  conserver le montant correct sur chaque ligne individuelle tout en affichant un total de colonne mathématiquement juste en bas de votre tableau.

Chanty4u
MVP
MVP

Try this 

Sum(

    Aggr(

        Max(Commande_HT),

        LSituat_Code_Commande,

        LSituat_Chrono

    )

)

frolland
Partner - Contributor II
Partner - Contributor II
Author

Merci g9uwy21zze et Chanty4u pour vos retours. Vos solutions fonctionnent, par contre elles marchent dans mon cas que si j'ai sélectionné une affaire, sinon ma colonne est vide. Je ne vois pas pourquoi 😞

frolland
Partner - Contributor II
Partner - Contributor II
Author

Bonjour,

J'ai réglé mon problème en passant par le script de chargement. Déjà j'avais un souci au niveau des datas avec des lignes à blanc. J'ai donc commencé par faire du nettoyage.

// Suppression des lignes sans période
D_Situat_Situation_Ligne_4:
LOAD *,
      'toto' as toto    //J'ai ajouté ce champ pour que la table se crée, il y a surement mieux à faire mais pas trouvé !   
RESIDENT D_Situat_Situation_Ligne_3
WHERE num(LSituat_ExercicePeriode) >0 ;
DROP TABLE D_Situat_Situation_Ligne_3;

D_Situat_Situation_Ligne:
LOAD
    *,
    If(%LCommande_Chrono_Key <> Previous(%LCommande_Chrono_Key), 1, 0) AS LSituat_FirstValue
    RESIDENT D_Situat_Situation_Ligne_4
    ORDER BY %LCommande_Chrono_Key;

DROP TABLE D_Situat_Situation_Ligne_4;

// 5. Nettoyage
DROP FIELD toto;

Ici j'alimente une variable = 1 si je suis sur le premier chrono (article) de la facture. Au niveau du tableau je multiplie la Commande_ht par la variable qui est égale à 1. J'évite ainsi les doublons si j'ai plusieurs factures, faut juste que mon tri soit bon !! 

Merci pour vos retours cela m'a bien aidé dans mes recherches et ma solution.