Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
Isabelle974
Contributor II
Contributor II

Comment traiter les données d'un tableau avec des données manquantes

Bonjour

Je débute dans Qlikview. J'ai un load sur des données qui me donne un tableau qui ressemble à ci-dessous :

Société    Date    Lot    NoFacture    Montant1    Montant2    Montant3

ABC                                                                                0                        0                       0

                010819                                                         0                        0                       0

                                  123                                               0                        0                       0

                                             0022345                         0                         0                      0

                                                                                 32,40                       0                      0

                                                                                        0                         45,78             0

                                                                                        0                         23,45             0

                                          0022346                            0                          0                    0

                                                                                        0                        78,34             0

etc ...

Je ne vois pas du tout comment traiter les données avec autant de trous dans la table.

J'aimerais pour voir avoir un tableau croisé dynamique qui me permettrait d'avoir les lots, les factures et le montant correspondant (calculé si plusieurs montants1 ou montant2).

Merci de votre aide

1 Solution

Accepted Solutions
brunobertels
Master
Master

Bonjour 

En partant de l'idée que tu arrives a avoir un fichier excel comme ceci 

SociétéDateLotNoFactureMontant1Montant2Montant3
ABC000000
01081900000
001230000
0000022345000
000032,400
0000045,780
0000023,450
0000022346000
0000078,340

 

alors il est possible de charger les données et d'avoir une table comme ceci 

Capture5.PNG

A partir de là tu peux faire un tableau croisé sous Qlik sense :Capture4.PNG

 

Est ce que cela correspond à ton besoin ? 

 

Si oui voici le script que j'ai utilisé et l'exemple qvf si çà peut t'aider 

[temp]:

LOAD * INLINE
[
Société;Date;Lot;NoFacture;Montant1;Montant2;Montant3
ABC;0;0;0;0;0;0
0;10819;0;0;0;0;0
0;0;123;0;0;0;0
0;0;0;0022345;0;0;0
0;0;0;0;32,4;0;0
0;0;0;0;0;45,78;0
0;0;0;0;0;23,45;0
0;0;0;0022346;0;0;0
0;0;0;0;0;78,34;0
](delimiter is ';');

 

noconcatenate

final:
Load

if(len(trim(Société))>1,Société,peek([Société])) as [Société],

if(len(trim(Date))>1,Date,peek([Date])) as [Date],

if(len(trim(Lot))>1,Lot,peek([Lot])) as [Lot],

if(len(trim(NoFacture))>1,NoFacture,peek([NoFacture])) as [NoFacture],

[Montant1],
[Montant2],
[Montant3]


resident temp;
drop table temp;

Bruno

View solution in original post

13 Replies
Seyko
Partner - Creator
Partner - Creator

Bonjour,

Pour être certain d'avoir compris la structure de ta table, le lot 123 par exemple n'a donc ni société, ni facture associée?

cordialement

Excuse my english, i'm french!
Isabelle974
Contributor II
Contributor II
Author

Bonjour

En fait, si. Les différents lots et factures sont rattachés à la société ABC pour la date du 01/08/2019.

C'est une structure en escalier parce qu'à l'origine, les données sont issus d'un fichier texte pas du tout formaté où il n'y a qu'une ligne et toutes les données sont collées ensemble. En transposant et en bidouillant, j'ai les bonnes données mais sous la configuration actuelle.

En vrai, la société ABC est concernée par tous les lots et factures dans les colonnes qui suivent. Il faudrait répéter les informations sur les lignes en dessous (ABC sur toute la colonne jusqu'à un changement, la date sur toute la colonne jusqu'à un changement etc ...).

Je sais pas si je suis claire dans mes explications

Seyko
Partner - Creator
Partner - Creator

Merci pour ces détails, c'est plus clair. Qlikview n'est absolument pas fait pour effectuer ce type de transformation. Il te faudra structurer en amont les données (avec un outil de data preparation, dont le plus basique connu Excel).

Si possible attache le fichier texte source, je regarderai.

cordialement.

Excuse my english, i'm french!
simonaubert
Partner - Specialist II
Partner - Specialist II

un coup d'Alteryx (à télécharger, installer sans même être admin... et avec une période d'évaluation gratuite pendant 14 jours) si c'est du one-shot.

S'il s'agit de récurrent, il faudrait peut-être s'axer plus sur la génération du fichier.

Bi Consultant (Dataviz & Dataprep) @ Business & Decision
Isabelle974
Contributor II
Contributor II
Author

Merci pour les réponses. Je me disais aussi.

Je vais essayer de faire une macro excel pour réagencer les données comme il faut.

Je n'ai malheureusement pas la main pour intervenir sur les fichiers texte de départ. Ils me sont renvoyés par un organisme particulier. Ils sont bien intégrés dans notre logiciel métier. Brut, ils sont un peu compliqués à lire et on voulait voir si ce qui est intégré correspond bien à ce qui arrive.

J'ai joint un extrait du fichier texte originel et je vous donne le script de ce que j'ai fait pour avoir mon tableau avec les données manquantes (il y a sûrement moyen de faire autrement mais je débute sur Qlikview):

Script Qlikview

Fichier_Brut :
LOAD @1
FROM
[C:\QLIKVIEW\test.txt]
(txt, codepage is 28591, no labels, delimiter is '@', msq, filters(
Replace(1, bottom, StrCnd(start, '080')),
Transpose()
));

Donnees_Extraites :
LOAD
if (@1 like '000CP*',Right(@1,9),'') as Mandataire,
if (@1 like '070*',Right(@1,6),'') as DateComptable,
if (@1 like '080*',Right(@1,3),'') as Lot,
if (@1 like '100*',Right(@1,7),'') as NoFacture,
if (@1 like '212*',Num#(Mid(@1,(FindOneOf(@1,'P')-5),5)/100),'0') as MontantActe,
if (@1 like '220*',Num#(Mid(@1,(FindOneOf(@1,'P')-5),5)/100),'0') as MontantFrais,
if (@1 like '250*',
if (Mid(@1,(FindOneOf(@1,'P',3)<>0)),
Num#(Mid(@1,(FindOneOf(@1,'P',3)-8),8)/100),
Num#(Mid(@1,(FindOneOf(@1,'N')-7),7)/100)
),'0') as MontantTotal
RESIDENT Fichier_Brut;

Isabelle974
Contributor II
Contributor II
Author

Malgré tout, il y a moyen de faire afficher le tableau tel quel  dans une zone table par exemple ?

J'ai essayé de trier suivant l'ordre original mais il affiche suivant un tri croissant ou alphabétique sur les n° de facture ou lots.

Je voudrais juste le tableau tel quel issu depuis la table.

Merci

brunobertels
Master
Master

Bonjour 

En partant de l'idée que tu arrives a avoir un fichier excel comme ceci 

SociétéDateLotNoFactureMontant1Montant2Montant3
ABC000000
01081900000
001230000
0000022345000
000032,400
0000045,780
0000023,450
0000022346000
0000078,340

 

alors il est possible de charger les données et d'avoir une table comme ceci 

Capture5.PNG

A partir de là tu peux faire un tableau croisé sous Qlik sense :Capture4.PNG

 

Est ce que cela correspond à ton besoin ? 

 

Si oui voici le script que j'ai utilisé et l'exemple qvf si çà peut t'aider 

[temp]:

LOAD * INLINE
[
Société;Date;Lot;NoFacture;Montant1;Montant2;Montant3
ABC;0;0;0;0;0;0
0;10819;0;0;0;0;0
0;0;123;0;0;0;0
0;0;0;0022345;0;0;0
0;0;0;0;32,4;0;0
0;0;0;0;0;45,78;0
0;0;0;0;0;23,45;0
0;0;0;0022346;0;0;0
0;0;0;0;0;78,34;0
](delimiter is ';');

 

noconcatenate

final:
Load

if(len(trim(Société))>1,Société,peek([Société])) as [Société],

if(len(trim(Date))>1,Date,peek([Date])) as [Date],

if(len(trim(Lot))>1,Lot,peek([Lot])) as [Lot],

if(len(trim(NoFacture))>1,NoFacture,peek([NoFacture])) as [NoFacture],

[Montant1],
[Montant2],
[Montant3]


resident temp;
drop table temp;

Bruno

Isabelle974
Contributor II
Contributor II
Author

Bonjour

Nickel ... MERCII !!!! Exactement ce que je voulais sauf que je ne savais pas du tout comment faire.

Si je peux me permettre une dernière question ... étant donné que j'ai plusieurs fichiers du même acabit, le script fonctionne bien mais j'aurais aimé avoir le nom du fichier texte aussi dans le tableau. Histoire de repérer plus facilement.

Je pourrais avoir un

LOAD

xxxx as NomFichier dans la table.

Comment récupérer le nom du fichier ?

Isabelle974
Contributor II
Contributor II
Author

Je fait donc un

LOAD @1
FROM
[C:\QLIKVIEW\test_*.txt]
(txt, codepage is 28591, no labels, delimiter is '@', msq, filters(
Replace(1, bottom, StrCnd(start, '080')),
Transpose()
));

Pour avoir les données des fichiers txt. Comment avoir le nom du fichier ?