Skip to main content
Announcements
Introducing Qlik Answers: A plug-and-play, Generative AI powered RAG solution. READ ALL ABOUT IT!
cancel
Showing results for 
Search instead for 
Did you mean: 
adr
Contributor II
Contributor II

Above

Bonjour, 

J'ai besoin de calculer une colonne disponible lors du chargement. 

à ce stade j'ai Les colonnes suivantes  : Case Number,DATE,PAIEMENT , COST , REVERSE

La colonne Balance    = PAIEMENT  - COST  - REVERSE 

Je coince pour calculer la colonne Disponible qui devrait correspondre au calcul suivant :

Balance du jour  + Disponible de la veille (le Disponible de la veille peut être négative). 

Voici le résultat que je voudrais obtenir  : 

Si je prend l'exemple de la ligne du 30/01/2018, je veux faire le calcul suivant  : 9,96 + -261.60  = 254,64

quelqu'un aurait une idée ?? 

Case NumberDATE PAIEMENT  COST  REVERSE Balance  Disponible 
123404829/12/2017    201,60 € - 201,60 €-       201,60 €
123404827/01/2018      60,00 € -   60,00 €-       261,60 €
123404830/01/2018         10,00 €       3,04 €        6,96 €-       254,64 €
123404823/02/2018         10,00 €       3,04 €        6,96 €-       247,68 €
123404829/03/2018         10,00 €       3,04 €        6,96 €-       240,72 €
123404809/05/2018         10,00 €       3,04 €        6,96 €-       233,76 €
123404802/06/2018         10,00 €       3,04 €        6,96 €-       226,80 €
123404828/06/2018         10,00 €       3,04 €        6,96 €-       219,84 €
123404825/07/2018         10,00 €       3,04 €        6,96 €-       212,88 €
123404828/08/2018         10,00 €       3,04 €        6,96 €-       205,92 €
123404828/09/2018         10,00 €       3,04 €        6,96 €-       198,96 €
123404801/11/2018         10,00 €       3,04 €        6,96 €-       192,00 €
123404818/12/2018         20,00 €       3,04 €      16,96 €-       175,04 €
123404821/01/2019         10,00 €       3,11 €        6,89 €-       168,15 €
123404823/02/2019         10,00 €       3,11 €        6,89 €-       161,26 €
123404822/03/2019         10,00 €       3,11 €        6,89 €-       154,37 €
123404820/04/2019         10,00 €       3,11 €        6,89 €-       147,48 €
123404822/05/2019         10,00 €       3,11 €        6,89 €-       140,59 €
123404824/05/2019        5,25 € -      5,25 €-       145,84 €
123404817/06/2019      150,00 €       8,60 €    141,40 €-            4,44 €
123404824/07/2019      23,56 € -   23,56 €-         28,00 €
123404826/07/2019      150,00 €     10,00 €    140,00 €         112,00 €
123404801/09/2019     101,75 €- 101,75 €           10,25 €
123404810/09/2019      150,00 €       8,60 €    141,40 €         151,65 €
123404801/10/2019       50,00 €-   50,00 €         101,65 €
123404816/10/2019      150,00 €       8,60 €    141,40 €         243,05 €
123404805/11/2019     139,72 €- 139,72 €         103,33 €
123404827/11/2019      23,56 € -   23,56 €           79,77 €
123404802/12/2019      150,00 €       8,60 €    141,40 €         221,17 €
123404803/12/2019     116,42 €- 116,42 €         104,75 €
123404808/01/2020      23,73 € -   23,73 €           81,02 €
123404813/01/2020      150,00 €       8,66 €    141,34 €         222,36 €
123404816/01/2020     116,21 €- 116,21 €         106,15 €
123404804/03/2020      23,74 € -   23,74 €           82,41 €
123404809/04/2020             -   €             -   €           82,41 €
 Grand Total   1.070,00 €   463,49 €   524,10 €     82,41 €           82,41 €
1 Solution

Accepted Solutions
brunobertels
Master
Master

Bonjour 

 

La fonction Above n'est pas une fonction de script mais de graphique. 

pour calculer ta colonne "Disponble" lors du chargement il te faut les fonction previous()  et peek() se sont un peu les même mais elle ont des paramètres et un comportement différents. 

1 - Assures toi que tes données soient bien au format Numérique lors du chargement 

au besoin utilise la foncitn purgechar() pour enlever les € si présents au chargement. 

Et ajoute cette ligne a ton script : 

if(isnull(previous(Balance)),Balance, Balance+peek('Disponible')) as Disponible 

1 on vérifie la première ligne de la table : if(isnull(previous(Balance)),

si Vrai  = Balance = correspond a la première ligne de ta table

si Faux = Balance+peek('Disponible') (ici on va créer le champ Disponible à partir de Balance de la première ligne puis en prenant la valeur au dessus pour les lignes situées en dessous 

 

Cordialement, 

 

Bruno

 

View solution in original post

5 Replies
brunobertels
Master
Master

Bonjour 

 

La fonction Above n'est pas une fonction de script mais de graphique. 

pour calculer ta colonne "Disponble" lors du chargement il te faut les fonction previous()  et peek() se sont un peu les même mais elle ont des paramètres et un comportement différents. 

1 - Assures toi que tes données soient bien au format Numérique lors du chargement 

au besoin utilise la foncitn purgechar() pour enlever les € si présents au chargement. 

Et ajoute cette ligne a ton script : 

if(isnull(previous(Balance)),Balance, Balance+peek('Disponible')) as Disponible 

1 on vérifie la première ligne de la table : if(isnull(previous(Balance)),

si Vrai  = Balance = correspond a la première ligne de ta table

si Faux = Balance+peek('Disponible') (ici on va créer le champ Disponible à partir de Balance de la première ligne puis en prenant la valeur au dessus pour les lignes situées en dessous 

 

Cordialement, 

 

Bruno

 

adr
Contributor II
Contributor II
Author

Bonjour Bruno, 

 

C'est exactement ce dont j'avais besoin, un tout grand merci ! 

Maintenant, je cherche encore le maillon de chaîne qui me manquait pour trouver le résultat comme un grand.

Ce que je ne savait pas c'est qu'il était possible de faire référence à un champs en cours de création dans la même instruction load: 

if(isnull(previous(Balance)),Balance, Balance+peek('Disponible')) as Disponible 

Je dormirai moins bête ce soit, encore merci !

Marwen

 

brunobertels
Master
Master

Bonjour 

Attention çà ne marche que pour la fonction peek() qui sert spécifiquement à çà 

peek évalue pour la table EN COURS de chargement previous évalue pur une Table DEJA Chargée

 

un peu comme rowno et Recno 

adr
Contributor II
Contributor II
Author

Bon, cela explique peut être le nouveau problème que je rencontre: 

En fait j'essaies d'appliquer la solution dans une boucle pour ce même calcul dans tous les dossiers, cela fonctionne correctement pour la première exécution mais donne un résultat incorrect pour la suite . J'ai essayé d'adapter mais toujours sans succès. Quelque chose m'échappe ?

Set Vcount  = 0 ;

For each a in FieldValueList('CaseNumber')

Load 

CaseNumber, 

if(isnull(previous(Balance)),Balance, Balance+ if($(Vcoun) = 0,peek('Disponible'), previous(Disponible)) as Disponible 

Resident PAIEMENTS where CaseNumber  = $(a) ;

Let Vcount  = $(Vcount) +1 ;

next  a ;

Voici le résultat que j'obtient : 

dossier Date Balance Dispo Résultat attendu 
11484708/10/2004-  34,20 €-  34,20 €-  34,20 €
11484728/10/2004    75,24 €    41,04 €   41,04 €
11484716/02/2005-   41,04 €   0  €      0   €
11455708/10/2004-  32,08 €- 32,08 €-       32,08 €
11455723/11/2004    64,11 €  0   €        32,03 €
11455716/02/2005-   32,03 €   0   €         0 €
brunobertels
Master
Master

Bonjour

Si j'ai bien compris tu souhaites qu'à chaque changement de nu de dossier la formule reparte à zéro en prenant la valeur de balance et non la valeur de disponible précédente.

Dans ce cas il faut faire la vérification if sur le numéro de dossier :

If(dossier=previous(dossier),balance +peek(disponible),balance) as disponible 

À tester car je n'ai pas pu le faire encore pas eu le temps

Cordialement