Qlik Community

QlikView Scripting

Discussion Board for collaboration on QlikView Scripting.

Not applicable

Concaténation partielle

Bonjour à tous,


J'ai 2 fichiers excel, possédant tous les mêmes champs.

2013.xlsx :                    2014.xlsx

ID     NOM                    ID     NOM

1          a                        

2          b                         2          bb

3          c                         3          c

                                      4          d


En 2014, l'ID 1 a disparu, l'ID 2 a été renommé, et l'ID 4 a été créé.

Je souhaite monter les 2 fichiers excel suivant les règles suivantes :

1 - le fichier 2014 est monté en premier (c'est le fichier qui évolue quotidiennement) ;

2 - le fichier 2013 est monté ensuite (c'est une archive, il peut y en avoir plusieurs) ;

3 - l'ID 1 de 2013 n'existe pas dans 2014, il faut le monter avec son nom ;

4 - l'ID 2 a été renommé, comme cette ID existe déjà dans 2014 il ne faut pas traiter celui de 2013 (et donc conserver uniquement le nom de 2014) ;

5 - l'ID 3 n'a pas évoluer, ne pas traiter (mais le conserver) ;

6 - l'ID 4 est nouveau, il doit rester.


La table que je souhaite obtenir est la suivante :

ID     NOM

1          a

2          bb

3          c

4          d


Je ne parviens pas à obtenir de bons résultats avec les jointures, l'instruction keep, ou même une concaténation. Je ne parviens pas non plus à créer une requête avec des conditions sur 2 tables différentes (utilisation de resident, qualify...). Il doit bien y avoir une astuce relativement simple, mais je ne la vois pas.


Merci d'avance,


QF

1 Solution

Accepted Solutions

Re: Re: Concaténation partielle

The not exists isn't going to work with a resident load.  Notice that I used it directly when loading from Excel.  If you feel the need to use a resident load, the code is longer:

onglet XL13

Directory;

NoConcatenate

XL13:

LOAD ID,

     NOM

FROM

Split_BDD_2013.xlsx

(ooxml, embedded labels, table is BDD_2013);

onglet XL12

Directory;

NoConcatenate

XL12:

LOAD ID as ID2,

     NOM

FROM

Split_BDD_2012.xlsx

(ooxml, embedded labels, table is BDD_2012);

onglet XL

NoConcatenate

tout_xl:

LOAD ID, NOM Resident XL13;

Concatenate(tout_xl)

LOAD ID2 as ID, NOM Resident XL12 Where not Exists(ID,ID2);

DROP Tables XL13, XL12;

6 Replies

Re: Concaténation partielle

Data:

LOAD ID,

    NOM

FROM 2014.xlsx (ooxml, embedded labels, table is Sheet1);

Concatenate(Data)

LOAD ID,

    NOM

FROM 2013.xlsx (ooxml, embedded labels, table is Sheet1)

WHERE not exists(ID);

Not applicable

Re: Concaténation partielle

Merci beaucoup !

Je pensais que Where était réservé au SQL...

À présent je souhaite aller un peu plus loin :

Dans le script j'ai 3 onglets

onglet XL13

Directory;

NoConcatenate

XL13:

LOAD ID,

     NOM

FROM

Split_BDD_2013.xlsx

(ooxml, embedded labels, table is BDD_2013);

onglet XL12

Directory;

NoConcatenate

XL12:

LOAD ID,

     NOM

FROM

Split_BDD_2012.xlsx

(ooxml, embedded labels, table is BDD_2012);

onglet XL

NoConcatenate

tout_xl:

LOAD ID, NOM Resident XL13;

Concatenate(tout_xl)

LOAD ID, NOM Resident XL12 Where not Exists(ID);

DROP Tables XL13, XL12;

J'obtiens comme résultat

Je ne comprends pas pourquoi.

Désolé, je ne sais pas comment envoyer des fichiers

Re: Re: Concaténation partielle

onglet XL13

Directory;

NoConcatenate

tout_xl:

LOAD ID,

    NOM

FROM

Split_BDD_2013.xlsx

(ooxml, embedded labels, table is BDD_2013);

onglet XL12

Directory;

Concatenate(tout_xl)

LOAD ID,

    NOM

FROM

Split_BDD_2012.xlsx

(ooxml, embedded labels, table is BDD_2012)

WHERE not exists(ID);

Not applicable

Re: Concaténation partielle

Je vais essayer de mettre ça en œuvre mais je ne suis  pas très optimiste... Je vous tiens au courant.

C'est bien ce que je craignais : lorsqu'il y a des jointures ça ne marche plus. Avec les fichiers excel c'était simple, mais en pratique, j'ai besoin de monter mes tables 2013 en faisant de nombreuses jointures, idem pour les tables 2012. Si je fais des concaténations directement, il les fait alors que toutes les jointures ne sont pas réalisées, et de plus il renomme mes tables. J'ai donc des tables incomplètes, renommées, et des clefs sybthétiques en pagailles.

C'est pour ça que je souhaite monter table_2013, puis table_2012, et enfin faire

table_total:

load * resident table_2013;

load * resident table_2012 where not exists (ID_ACTIVITE);

(onglet 13)

ODBC CONNECT TO [MS Access Database;DBQ=C:\Users\fong\Desktop\TBS\Casset_2013_type_modifié.mdb];

//-------- Start Multiple Select Statements ------

effectue:

LOAD `ID_TACHE`,

    `NB_HEURES`;

SQL SELECT `ID_TACHE`,

    `NB_HEURES`

FROM Effectue;

activité:

LOAD `ID_ACTIVITE`,

    `ID_TACHE`;

SQL SELECT `ID_ACTIVITE`,

    `ID_TACHE`

FROM Tache;

Join(activité)

LOAD `ID_ACTIVITE`,

    LIBELLE;

SQL SELECT `ID_ACTIVITE`,

    LIBELLE

FROM `Type activite`;

//-------- End Multiple Select Statements ------

(onglet 12)

ODBC CONNECT TO [MS Access Database;DBQ=C:\Users\fong\Desktop\TBS\Casset_2012.mdb];

//-------- Start Multiple Select Statements ------

Concatenate(effectue)

LOAD `ID_TACHE`,

    `NB_HEURES`

Where not Exists (ID_TACHE);

SQL SELECT `ID_TACHE`,

    `NB_HEURES`

FROM Effectue;

activité:

LOAD `ID_ACTIVITE`,

    `ID_TACHE`;

SQL SELECT `ID_ACTIVITE`,

    `ID_TACHE`

FROM Tache;

Join(activité)

LOAD `ID_ACTIVITE`,

    LIBELLE;

SQL SELECT `ID_ACTIVITE`,

    LIBELLE

FROM `Type activite`;

//-------- End Multiple Select Statements ------

Résultat :

Not applicable

Re: Concaténation partielle

Je vais essayer de faire d'abord la concaténation, puis la jointure.

Re: Re: Concaténation partielle

The not exists isn't going to work with a resident load.  Notice that I used it directly when loading from Excel.  If you feel the need to use a resident load, the code is longer:

onglet XL13

Directory;

NoConcatenate

XL13:

LOAD ID,

     NOM

FROM

Split_BDD_2013.xlsx

(ooxml, embedded labels, table is BDD_2013);

onglet XL12

Directory;

NoConcatenate

XL12:

LOAD ID as ID2,

     NOM

FROM

Split_BDD_2012.xlsx

(ooxml, embedded labels, table is BDD_2012);

onglet XL

NoConcatenate

tout_xl:

LOAD ID, NOM Resident XL13;

Concatenate(tout_xl)

LOAD ID2 as ID, NOM Resident XL12 Where not Exists(ID,ID2);

DROP Tables XL13, XL12;

Community Browser