Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
Bonjour
En partant de l'idée que tu arrives a avoir un fichier excel comme ceci
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 |
alors il est possible de charger les données et d'avoir une table comme ceci
A partir de là tu peux faire un tableau croisé sous Qlik sense :
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
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
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
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.
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.
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;
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
Bonjour
En partant de l'idée que tu arrives a avoir un fichier excel comme ceci
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 |
alors il est possible de charger les données et d'avoir une table comme ceci
A partir de là tu peux faire un tableau croisé sous Qlik sense :
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
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 ?
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 ?