IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SSIS Discussion :

[2K5] Data Flow boucle


Sujet :

SSIS

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 57
    Points
    57
    Par défaut [2K5] Data Flow boucle
    Bonjour.

    J'ai une petite question.
    Dans un data Flow, j'ai une OLEDB Source qui pointe sur une table produit défini comme ceci:

    id;libelle;min;max
    1;test;1;3
    2;test2;1;1
    3;test3;1;5

    Et je voudrais charger une table SQL produit comme ceci:

    id;libelle;duree
    1;test - 1;1
    1;test - 2;2
    1;test - 3;3
    2;test2 - 1;1
    3;test3 - 1;1
    3;test3 - 2;2
    3;test3 - 3;3
    3;test3 - 4;4
    3;test3 - 5;5

    Mais je ne vois pas comment faire cela!

    Pouvez-vous m'aider?

    Merci.
    Stef.

  2. #2
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Points : 2 883
    Points
    2 883
    Par défaut
    Ca peut se faire de manière rigolote avec une CTE récursive:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    WITH 
    TaTableDenormalisee(id,libelle,duree)
    AS
    (
    	SELECT TaTable.id,TaTable.libelle, 1
    	FROM TaTable
    	UNION ALL
    	SELECT TaTable.id,TaTable.libelle, duree+1
    	FROM TaTable
    	JOIN TaTableDenormalisee
    	ON TaTable.id = TaTableDenormalisee.id
    	AND TaTable.libelle = TaTableDenormalisee.libelle
    	AND TaTableDenormalisee.duree+1 <= TaTable.max
    )
    SELECT *
    FROM TaTableDenormalisee
    ORDER BY id,libelle,duree
    Sinon avec un script asynchrone (ie qui renvoit plus de lignes en sortie qu'en entrée) dans SSIS, comme ici: http://fjehl.blogspot.com/2008/04/le...ones-dans.html.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 57
    Points
    57
    Par défaut
    Merci beaucoup pour votre réponse, cela me semble nickel
    J'ai juste omis un détail, la source est un fichier mdb (Access), je ne crois pas que la CTE soit possible?

    Je fouille donc du coté du script asynchrone.

    Cordialement.

  4. #4
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Points : 2 883
    Points
    2 883
    Par défaut
    J'ai juste omis un détail, la source est un fichier mdb (Access), je ne crois pas que la CTE soit possible?
    Ah ça non La seule manière de faire de la récursivité dans Access c'est de combiner avec du... VBA .
    Mais le script asynchrone c'est très bien pour ce genre de cas et même prévu pour.

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Points : 57
    Points
    57
    Par défaut
    Bonjour.

    La solution script a très bien fonctionné, merci.
    Pour info voici mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Dim MinAs Integer
            Dim Max As Integer
            Dim id As String
            Dim Libelle As String
            Dim Duree As Integer
            Min = Row.Min
            Max = Row.Max
            Id= Row.id
            Libelle = Row.Libelle       
     
            Dim i As Integer
            For i = Min To Max
                Output1Buffer.AddRow()
                Output1Buffer.id= id
                If Max = Min Then
                    Output1Buffer.libelle = Libelle
                Else
                    Output1Buffer.libelle = Libelle & " - " & i
                End If
                Output1Buffer.duree = i
            Next i

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2005] Data Flow dans boucle Foreach
    Par JB_paris dans le forum SSIS
    Réponses: 4
    Dernier message: 23/01/2009, 08h23
  2. [SSIS][2k5] Rollback dans un data flow
    Par ced62 dans le forum SSIS
    Réponses: 2
    Dernier message: 28/10/2008, 17h04
  3. Réponses: 1
    Dernier message: 26/10/2008, 21h52
  4. Réponses: 0
    Dernier message: 20/10/2008, 17h56
  5. [SSIS][2k5]Data Flow Ordre de traitement
    Par maxo dans le forum SSIS
    Réponses: 5
    Dernier message: 16/03/2008, 15h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo