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

Duplication d'une ligne

Bonjour! Je suis sur Qlik Sense et j'ai quelques difficultés à effectuer une transformation au niveau de mes données, j'aimerais pouvoir dupliquer une ligne en autant de ligne qu'il y a de champs dans ID_WEEK (chaque champ est séparé par un point virgule), un exemple simple:

START_DATE | END_DATE | ID_WEEK

14/03/2011 | 16/03/2011 | M105587L25725

14/03/2011 | 30/03/2011 | M100337L41098;M105579L25724;M104310L30703;

START_DATE | END_DATE | NB_WEEKS | ID_WEEK

14/03/2011 | 16/03/2011 | M105587L25725

14/03/2011 | 30/03/2011 | M100337L41098

14/03/2011 | 30/03/2011 | M105579L25724

14/03/2011 | 30/03/2011 | M104310L30703


Avez-vous une idée? D'avance merci.

1 Solution

Accepted Solutions
Anonymous
Not applicable
Author

Bonjour,

Essai avec la fonction SubField:

Référence: https://community.qlik.com/message/102200#102200

NewTable:

NoConcatenate

LOAD

     START_DATE

     ,END_DATE

     ,FLOOR((END_DATE - START_DATE) / 7) AS NB_WEEKS

     , SubField(ID_WEEK, ';') AS ID_WEEK

RESIDENT Data;

SubField - script and chart function:

https://help.qlik.com/en-US/sense/February2018/Subsystems/Hub/Content/Scripting/StringFunctions/SubF...

Si vous utilisez la fonction Subfield () dans une instruction LOAD avec le paramètre facultatif field_no omis, un enregistrement complet sera généré pour chaque sous-chaîne. Si plusieurs champs sont chargés à l'aide de Subfield (), les produits cartésiens de toutes les combinaisons sont créés.

S.v.p. marquer les réponses comme correctes ou utiles (https://community.qlik.com/docs/DOC-14806)

View solution in original post

4 Replies
lcloatre
Partner - Creator III
Partner - Creator III

Bonjour,

Il y a sans doute plus simple mais voici une solution qui fonctionne :

Data:

Load * inline

[

START_DATE,END_DATE,ID_WEEK

14/03/2011,16/03/2011,M105587L25725

14/03/2011,30/03/2011,M100337L41098;M105579L25724;M104310L30703;

];

Table:

NoConcatenate

LOAD *,

     len(ID_WEEK)-len(PurgeChar(ID_WEEK,';')) as NB_SEPARATEUR

Resident Data;

DROP Table Data;

TableTemp:

NoConcatenate

LOAD *

Resident Table

Order By NB_SEPARATEUR;

LET vMax = Num(peek('NB_SEPARATEUR',-1,'TableTemp'));

DROP Table Table;

// Traitement des enregistrements sans séparateur

Table:

NoConcatenate

LOAD START_DATE,

     END_DATE,

     ID_WEEK

Resident TableTemp

Where NB_SEPARATEUR = 0;

FOR a=1 to $(vMax)

Table:

Concatenate

LOAD START_DATE,

     END_DATE,

     Mid(ID_WEEK,1,Index(ID_WEEK,';')-1) as ID_WEEK

Resident TableTemp

Where NB_SEPARATEUR > 0

  and $(a)=1;

Table:

Concatenate

LOAD START_DATE,

     END_DATE,

     Mid(ID_WEEK,Index(ID_WEEK,';',($(a)-1))+1,(Index(ID_WEEK,';',$(a)-1)-1)) as ID_WEEK

Resident TableTemp

Where NB_SEPARATEUR > 0

  and $(a)>1

  and NB_SEPARATEUR > $(a);

Table:

Concatenate

LOAD START_DATE,

     END_DATE,

     PurgeChar(Mid(ID_WEEK,Index(ID_WEEK,';',$(a)-1)+1),';') as ID_WEEK

Resident TableTemp

Where NB_SEPARATEUR = $(a);

 

NEXT

TableFinale:

NoConcatenate

LOAD *

Resident Table

where ID_WEEK <> '';

DROP Table TableTemp;

DROP Table Table;

Anonymous
Not applicable
Author

Bonjour,

Essai avec la fonction SubField:

Référence: https://community.qlik.com/message/102200#102200

NewTable:

NoConcatenate

LOAD

     START_DATE

     ,END_DATE

     ,FLOOR((END_DATE - START_DATE) / 7) AS NB_WEEKS

     , SubField(ID_WEEK, ';') AS ID_WEEK

RESIDENT Data;

SubField - script and chart function:

https://help.qlik.com/en-US/sense/February2018/Subsystems/Hub/Content/Scripting/StringFunctions/SubF...

Si vous utilisez la fonction Subfield () dans une instruction LOAD avec le paramètre facultatif field_no omis, un enregistrement complet sera généré pour chaque sous-chaîne. Si plusieurs champs sont chargés à l'aide de Subfield (), les produits cartésiens de toutes les combinaisons sont créés.

S.v.p. marquer les réponses comme correctes ou utiles (https://community.qlik.com/docs/DOC-14806)

lcloatre
Partner - Creator III
Partner - Creator III

C'est vrai que c'est plus simple ainsi !

Anonymous
Not applicable
Author

C'est exactement ce qu'il me fallait, merci à vous deux pour votre aide! Bel effort Laurent .