SSIS DATAFLOW TRAITEMENT D'UN FICHIER SÉQUENTIEL

Le
Christian Verville
CAS:
Je dois traiter un fichier séquentiel ayant trois niveaux d'information.
Header, DETAILS et, FOOTER. Je dois insérer le niveau HEADER dans une table
et mettre en relation l'enregistrement avec le détail.

SOLUTION:
J'utilise le Designer de Visual Studio SSIS.

J'ai intégré un DATAFLOW au model et dans le dataflow j'utilise une
connexion Flat File Source, pour lire le fichier, qui est reliée à un
Conditional SPLITER. Présentement, les données en sortie sont dirigé vers un
script pour être insérées dans une table SQL. LEConditional Splitter m'offre
trois sortie pour identifier l'endroit de dépôt.

PROBLÈME:
Je n'arrive pas à relier les trois sorties de données en provenance du
Conditional SPLITER. EN fait, après avoir inséré le HEADER dans une table,
je peux récupérer ma clé interne(généré par SQL) mais je ne sais comment la
faire suivre au deux autre sortie de données du COnditional SPLITER.

J'attend votre aide avec grand besoin.

Merci,

Christian
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Pierre Riehl
Le #11852021
Bonjour,

Pouvez-vous nous fournir un exemple de lignes qui se trouvent dans le
fichier plat ? Y'a t-il un identifiant qui permette de lier le header avec
les lignes de détail ?


--
Jean-Pierre Riehl
http://blog.djeepy1.net
http://www.bewise.fr


"Christian Verville" message news:
CAS:
Je dois traiter un fichier séquentiel ayant trois niveaux d'information.
Header, DETAILS et, FOOTER. Je dois insérer le niveau HEADER dans une
table
et mettre en relation l'enregistrement avec le détail.

SOLUTION:
J'utilise le Designer de Visual Studio SSIS.

J'ai intégré un DATAFLOW au model et dans le dataflow j'utilise une
connexion Flat File Source, pour lire le fichier, qui est reliée à un
Conditional SPLITER. Présentement, les données en sortie sont dirigé vers
un
script pour être insérées dans une table SQL. LEConditional Splitter
m'offre
trois sortie pour identifier l'endroit de dépôt.

PROBLÈME:
Je n'arrive pas à relier les trois sorties de données en provenance du
Conditional SPLITER. EN fait, après avoir inséré le HEADER dans une
table,
je peux récupérer ma clé interne(généré par SQL) mais je ne sais comment
la
faire suivre au deux autre sortie de données du COnditional SPLITER.

J'attend votre aide avec grand besoin.

Merci,

Christian



Christian Verville
Le #11852011
Non, la seule façon de relier l'en-tête au détails est la structure du
fichier. La clé qui lie l'information provient de SQL (@@identity).

Le problème réside au fait de passer un paramètre (variable) d'un résultat
à l'intérieur d'un même dataflow.

D'après ce que j'ai lu, il ne semble pas être possible de faire voyage
l'information d'un enregistrement vers un autre traitement. La seule
solution que j'ai fini par trouver (et qui ressemble plus à une patch) est de
faire un premier traitement, déposer le résultat dans un fichier séquentiel
puis de faire un second dataflow qui effectu une lecture du nouveau fichier
séquentiel. Solution peu performante et qui n'est pas très élégante.

"Jean-Pierre Riehl" a écrit :

Bonjour,

Pouvez-vous nous fournir un exemple de lignes qui se trouvent dans le
fichier plat ? Y'a t-il un identifiant qui permette de lier le header avec
les lignes de détail ?


--
Jean-Pierre Riehl
http://blog.djeepy1.net
http://www.bewise.fr


"Christian Verville" message news:
> CAS:
> Je dois traiter un fichier séquentiel ayant trois niveaux d'information.
> Header, DETAILS et, FOOTER. Je dois insérer le niveau HEADER dans une
> table
> et mettre en relation l'enregistrement avec le détail.
>
> SOLUTION:
> J'utilise le Designer de Visual Studio SSIS.
>
> J'ai intégré un DATAFLOW au model et dans le dataflow j'utilise une
> connexion Flat File Source, pour lire le fichier, qui est reliée à un
> Conditional SPLITER. Présentement, les données en sortie sont dirigé vers
> un
> script pour être insérées dans une table SQL. LEConditional Splitter
> m'offre
> trois sortie pour identifier l'endroit de dépôt.
>
> PROBLÈME:
> Je n'arrive pas à relier les trois sorties de données en provenance du
> Conditional SPLITER. EN fait, après avoir inséré le HEADER dans une
> table,
> je peux récupérer ma clé interne(généré par SQL) mais je ne sais comment
> la
> faire suivre au deux autre sortie de données du COnditional SPLITER.
>
> J'attend votre aide avec grand besoin.
>
> Merci,
>
> Christian
>



Jean-Pierre Riehl
Le #11852001
C'est ce que je craignais. Ce que j'avais en tête était de mettre un
"Derived Column" pour ajouter un champ et de le remplir avec un compteur via
un "Script Component Transformation" (en mettant un modulo 5).
Une fois chaque ligne numérotée, tu as le lien entre header, détail et
footer, tu peux faire des group by par ce numéro par exemple.

Attention, les sorties du Conditionnal Splitter s'exécutent en parallèle
(c'est d'ailleurs pour cela que tu ne peux pas envoyer l'ID d'une branche à
l'autre aussi facilement). Il faut peut-être penser à faire du staging.

--
Jean-Pierre Riehl
http://blog.djeepy1.net
http://www.bewise.fr


"Christian Verville" message news:
Non, la seule façon de relier l'en-tête au détails est la structure du
fichier. La clé qui lie l'information provient de SQL (@@identity).

Le problème réside au fait de passer un paramètre (variable) d'un
résultat
à l'intérieur d'un même dataflow.

D'après ce que j'ai lu, il ne semble pas être possible de faire voyage
l'information d'un enregistrement vers un autre traitement. La seule
solution que j'ai fini par trouver (et qui ressemble plus à une patch) est
de
faire un premier traitement, déposer le résultat dans un fichier
séquentiel
puis de faire un second dataflow qui effectu une lecture du nouveau
fichier
séquentiel. Solution peu performante et qui n'est pas très élégante.

"Jean-Pierre Riehl" a écrit :

Bonjour,

Pouvez-vous nous fournir un exemple de lignes qui se trouvent dans le
fichier plat ? Y'a t-il un identifiant qui permette de lier le header
avec
les lignes de détail ?


--
Jean-Pierre Riehl
http://blog.djeepy1.net
http://www.bewise.fr


"Christian Verville" in
message news:
> CAS:
> Je dois traiter un fichier séquentiel ayant trois niveaux
> d'information.
> Header, DETAILS et, FOOTER. Je dois insérer le niveau HEADER dans une
> table
> et mettre en relation l'enregistrement avec le détail.
>
> SOLUTION:
> J'utilise le Designer de Visual Studio SSIS.
>
> J'ai intégré un DATAFLOW au model et dans le dataflow j'utilise une
> connexion Flat File Source, pour lire le fichier, qui est reliée à un
> Conditional SPLITER. Présentement, les données en sortie sont dirigé
> vers
> un
> script pour être insérées dans une table SQL. LEConditional Splitter
> m'offre
> trois sortie pour identifier l'endroit de dépôt.
>
> PROBLÈME:
> Je n'arrive pas à relier les trois sorties de données en provenance du
> Conditional SPLITER. EN fait, après avoir inséré le HEADER dans une
> table,
> je peux récupérer ma clé interne(généré par SQL) mais je ne sais
> comment
> la
> faire suivre au deux autre sortie de données du COnditional SPLITER.
>
> J'attend votre aide avec grand besoin.
>
> Merci,
>
> Christian
>





Christian Verville
Le #11851901
Merci pour ton aide Jean-Pierre. Un peu décevant cet outils.

Peut être peux-tu m'aider également sous ce même problème. Lorsque le
processus du 'conditional Splitter' est terminé, il est possible de déposer
l'information dans un dataset mémoire. Comment est-il possible de traiter
l'information une seconde fois ? Et, est-t-il possible de faire sortir
l'information du dataflow sans être obligé de l'enregistrée dans un fichier
séquentiel ou dans une table de la base de données.

Merci de ton aide encore une fois.

Christian.

"Jean-Pierre Riehl" a écrit :

C'est ce que je craignais. Ce que j'avais en tête était de mettre un
"Derived Column" pour ajouter un champ et de le remplir avec un compteur via
un "Script Component Transformation" (en mettant un modulo 5).
Une fois chaque ligne numérotée, tu as le lien entre header, détail et
footer, tu peux faire des group by par ce numéro par exemple.

Attention, les sorties du Conditionnal Splitter s'exécutent en parallèle
(c'est d'ailleurs pour cela que tu ne peux pas envoyer l'ID d'une branche à
l'autre aussi facilement). Il faut peut-être penser à faire du staging.

--
Jean-Pierre Riehl
http://blog.djeepy1.net
http://www.bewise.fr


"Christian Verville" message news:
> Non, la seule façon de relier l'en-tête au détails est la structure du
> fichier. La clé qui lie l'information provient de SQL (@@identity).
>
> Le problème réside au fait de passer un paramètre (variable) d'un
> résultat
> à l'intérieur d'un même dataflow.
>
> D'après ce que j'ai lu, il ne semble pas être possible de faire voyage
> l'information d'un enregistrement vers un autre traitement. La seule
> solution que j'ai fini par trouver (et qui ressemble plus à une patch) est
> de
> faire un premier traitement, déposer le résultat dans un fichier
> séquentiel
> puis de faire un second dataflow qui effectu une lecture du nouveau
> fichier
> séquentiel. Solution peu performante et qui n'est pas très élégante.
>
> "Jean-Pierre Riehl" a écrit :
>
>> Bonjour,
>>
>> Pouvez-vous nous fournir un exemple de lignes qui se trouvent dans le
>> fichier plat ? Y'a t-il un identifiant qui permette de lier le header
>> avec
>> les lignes de détail ?
>>
>>
>> --
>> Jean-Pierre Riehl
>> http://blog.djeepy1.net
>> http://www.bewise.fr
>>
>>
>> "Christian Verville" >> in
>> message news:
>> > CAS:
>> > Je dois traiter un fichier séquentiel ayant trois niveaux
>> > d'information.
>> > Header, DETAILS et, FOOTER. Je dois insérer le niveau HEADER dans une
>> > table
>> > et mettre en relation l'enregistrement avec le détail.
>> >
>> > SOLUTION:
>> > J'utilise le Designer de Visual Studio SSIS.
>> >
>> > J'ai intégré un DATAFLOW au model et dans le dataflow j'utilise une
>> > connexion Flat File Source, pour lire le fichier, qui est reliée à un
>> > Conditional SPLITER. Présentement, les données en sortie sont dirigé
>> > vers
>> > un
>> > script pour être insérées dans une table SQL. LEConditional Splitter
>> > m'offre
>> > trois sortie pour identifier l'endroit de dépôt.
>> >
>> > PROBLÈME:
>> > Je n'arrive pas à relier les trois sorties de données en provenance du
>> > Conditional SPLITER. EN fait, après avoir inséré le HEADER dans une
>> > table,
>> > je peux récupérer ma clé interne(généré par SQL) mais je ne sais
>> > comment
>> > la
>> > faire suivre au deux autre sortie de données du COnditional SPLITER.
>> >
>> > J'attend votre aide avec grand besoin.
>> >
>> > Merci,
>> >
>> > Christian
>> >
>>



Jean-Pierre Riehl
Le #11851871
Tu peux utiliser des variables dans l'ensemble de ton package. Pour cela, il
faut faire un clic-droit dans le Control Flow et choisir "Variables". Veille
bien à ce que le scope de ta variable soit Package et que son type soit
Object.
Dans ton "Data flow", tu places un composant "Recordset Destination" et dans
sa configuration tu précises le nom de ta variable. Le dataset est
maintenant disponible dans tout ton package.

Concernant l'outil, il est plutôt bien côté par rapport à sa concurrence
mais comme tout outil de ce niveau, il nécessite un bon design et un peu
d'huile de coude pour satisfaire tous les besoins. D'ailleurs, tu pourrais
même développer ton propre composant de transformation pour prendre en
charge ta problématique.

--
Jean-Pierre Riehl
http://blog.djeepy1.net
http://www.bewise.fr


"Christian Verville" message news:
Merci pour ton aide Jean-Pierre. Un peu décevant cet outils.

Peut être peux-tu m'aider également sous ce même problème. Lorsque le
processus du 'conditional Splitter' est terminé, il est possible de
déposer
l'information dans un dataset mémoire. Comment est-il possible de traiter
l'information une seconde fois ? Et, est-t-il possible de faire sortir
l'information du dataflow sans être obligé de l'enregistrée dans un
fichier
séquentiel ou dans une table de la base de données.

Merci de ton aide encore une fois.

Christian.

"Jean-Pierre Riehl" a écrit :

C'est ce que je craignais. Ce que j'avais en tête était de mettre un
"Derived Column" pour ajouter un champ et de le remplir avec un compteur
via
un "Script Component Transformation" (en mettant un modulo 5).
Une fois chaque ligne numérotée, tu as le lien entre header, détail et
footer, tu peux faire des group by par ce numéro par exemple.

Attention, les sorties du Conditionnal Splitter s'exécutent en parallèle
(c'est d'ailleurs pour cela que tu ne peux pas envoyer l'ID d'une branche
à
l'autre aussi facilement). Il faut peut-être penser à faire du staging.

--
Jean-Pierre Riehl
http://blog.djeepy1.net
http://www.bewise.fr


"Christian Verville" in
message news:
> Non, la seule façon de relier l'en-tête au détails est la structure du
> fichier. La clé qui lie l'information provient de SQL (@@identity).
>
> Le problème réside au fait de passer un paramètre (variable) d'un
> résultat
> à l'intérieur d'un même dataflow.
>
> D'après ce que j'ai lu, il ne semble pas être possible de faire voyage
> l'information d'un enregistrement vers un autre traitement. La seule
> solution que j'ai fini par trouver (et qui ressemble plus à une patch)
> est
> de
> faire un premier traitement, déposer le résultat dans un fichier
> séquentiel
> puis de faire un second dataflow qui effectu une lecture du nouveau
> fichier
> séquentiel. Solution peu performante et qui n'est pas très élégante.
>
> "Jean-Pierre Riehl" a écrit :
>
>> Bonjour,
>>
>> Pouvez-vous nous fournir un exemple de lignes qui se trouvent dans le
>> fichier plat ? Y'a t-il un identifiant qui permette de lier le header
>> avec
>> les lignes de détail ?
>>
>>
>> --
>> Jean-Pierre Riehl
>> http://blog.djeepy1.net
>> http://www.bewise.fr
>>
>>
>> "Christian Verville" >> wrote
>> in
>> message news:
>> > CAS:
>> > Je dois traiter un fichier séquentiel ayant trois niveaux
>> > d'information.
>> > Header, DETAILS et, FOOTER. Je dois insérer le niveau HEADER dans
>> > une
>> > table
>> > et mettre en relation l'enregistrement avec le détail.
>> >
>> > SOLUTION:
>> > J'utilise le Designer de Visual Studio SSIS.
>> >
>> > J'ai intégré un DATAFLOW au model et dans le dataflow j'utilise une
>> > connexion Flat File Source, pour lire le fichier, qui est reliée à
>> > un
>> > Conditional SPLITER. Présentement, les données en sortie sont
>> > dirigé
>> > vers
>> > un
>> > script pour être insérées dans une table SQL. LEConditional
>> > Splitter
>> > m'offre
>> > trois sortie pour identifier l'endroit de dépôt.
>> >
>> > PROBLÈME:
>> > Je n'arrive pas à relier les trois sorties de données en provenance
>> > du
>> > Conditional SPLITER. EN fait, après avoir inséré le HEADER dans une
>> > table,
>> > je peux récupérer ma clé interne(généré par SQL) mais je ne sais
>> > comment
>> > la
>> > faire suivre au deux autre sortie de données du COnditional SPLITER.
>> >
>> > J'attend votre aide avec grand besoin.
>> >
>> > Merci,
>> >
>> > Christian
>> >
>>





Christian Verville
Le #11851771
J'ai suivi tes indications mais il demeure un petit pépin. Lorsque j'essaye
d'accéder au Recordset dans un second Dataflow, je ne sais pas comment
accéder à l'objet.

Encore une fois merci!

Christian

"Jean-Pierre Riehl" a écrit :

Tu peux utiliser des variables dans l'ensemble de ton package. Pour cela, il
faut faire un clic-droit dans le Control Flow et choisir "Variables". Veille
bien à ce que le scope de ta variable soit Package et que son type soit
Object.
Dans ton "Data flow", tu places un composant "Recordset Destination" et dans
sa configuration tu précises le nom de ta variable. Le dataset est
maintenant disponible dans tout ton package.

Concernant l'outil, il est plutôt bien côté par rapport à sa concurrence
mais comme tout outil de ce niveau, il nécessite un bon design et un peu
d'huile de coude pour satisfaire tous les besoins. D'ailleurs, tu pourrais
même développer ton propre composant de transformation pour prendre en
charge ta problématique.

--
Jean-Pierre Riehl
http://blog.djeepy1.net
http://www.bewise.fr




Publicité
Poster une réponse
Anonyme