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 :

Une source Excel qui n'a pas un format standard


Sujet :

SSIS

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Points : 37
    Points
    37
    Par défaut Une source Excel qui n'a pas un format standard
    Bonjour,

    J'ai besoin d'alimenter des tables SQL Server à partir des fichiers Excel, mais j'ai des fichiers Excel qui ne respecte pas le format standard (la première ligne contient les colonnes), je veux savoir donc s'il est possible (dans SSIS 2K8) de travailler avec la position des cases, c'est à dire de préciser que l'info avec laquelle on doit alimenter la table se trouve dans la case de la ligne 9 et la colonne 3 (par exemple).

    Et merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2010
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 240
    Points : 359
    Points
    359
    Par défaut
    Dans ton composant Exel source tu as la possibilité de faire une requête qui te permettra de définir ta zone de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM [Sheet1$A7:C4]
    Tu peux aussi utiliser le query builder pour former ta requête également.

    Dans ton cas tu as plusieurs fichiers excel, si tes données sont tous dans la même zone tu devras boucler sur tout tes fichiers avec un composant ForEach Loop.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Points : 37
    Points
    37
    Par défaut
    Merci d'abord,

    Dans la source Excel je ne sais pas ou je dois mettre la requete, je ne sais pas aussi ou ça se trouve le query builder dans SSIS.

    Et merci d'avance.

  4. #4
    Membre confirmé Avatar de dream_rachid
    Homme Profil pro
    DBA & Responsable BI
    Inscrit en
    Mars 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : DBA & Responsable BI
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 278
    Points : 474
    Points
    474
    Par défaut
    Dans propriété Excel Source ==> Connection Manager ==> DataAccessmode Choisis SQLCOMMAND une zone de texte s'affiche , c'est là où tu peux écrire larequête

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Points : 37
    Points
    37
    Par défaut
    J'arrive à faire la requête dans "mode d'accès aux données" et ça marche pour une case, mais je veux extraire les infos de chaque 5 lignes (d'une colonnes);
    J8, J13, J18, J23, J28... Je ne sais pas s'il y a une requête qui permet de faire ça.

    Et merci d'avance.

  6. #6
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2010
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 240
    Points : 359
    Points
    359
    Par défaut
    Qu'est ce qu'il y a dans les 5 cases ?

    Si par exemple tu as des choses écrites dans ces 5 cases et que ça se répette, tu peux utiliser des vérifications avec une clause WHERE comme une requête SQL classique.

    Exemple :
    Val1
    Val2
    BlaBla
    BlaBla
    Blabla
    Val3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT        F1
    FROM            [Sheet1$]
    WHERE        (F1 <> 'BlaBla')

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Points : 37
    Points
    37
    Par défaut
    Merci d'abord,

    la requête m'a beaucoup aidé, il me reste un petit problème; j'ai besoin de fusionner deux tables ( les tables générée par SSIS à la sortie des sources Excel), tel que la ligne j de la première table soit concaténé avec la ligne j de la deuxième table, je ne sais pas s'il y a une transformation qui permet de faire ça, ou bien une succession de transformations, par exemple générer un index pour chaque table et puis faire une jointure sur cet index (mais je ne sais pas comment générer un index pour ces tables).

    Et merci d'avance.

  8. #8
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2010
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 240
    Points : 359
    Points
    359
    Par défaut
    Tu peux utiliser le composant Merge pour fusionner des colonnes.

    Il est nécessaire de Trier tes données avant donc il te faut utiliser un composant Sort à chaque sortie de tes Excel data Source avant de faire le merge.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Points : 37
    Points
    37
    Par défaut
    Merci d'abord,

    En fait si je trie les colonnes je vais perdre mon ordre initial duquel j'ai besoin pour fusionner les deux colonnes, pour mieux comprendre j'ai un fichier Excel qui contient les infos suivantes:

    Microsoft 0.5
    NULL 1.3
    NULL 2.6
    NULL 5
    DB/OS 1.7
    NULL 2
    NULL 0.33
    NULL 3
    Legacy 0.5
    NULL 5
    NULL 2
    NULL 2.3
    Java 2
    NULL 0.33
    NULL 6
    NULL 2.7
    .....


    Je veux extraire les infos en rouge pour chaque colonnes et avoir une table qui contient deux colonnes de ce genre

    Microsoft 5
    DB/OS 3
    Legacy 2.3
    Java 2.7
    ....

    Pour le moment j'arrive à extraire chaque colonne dans une table à part (deux sources Excel), donc si je fais un tri je vais perdre cet ordre initial.

    Si non je ne sais pas est ce que c'est possible de faire une requête qui permet, pour une colonne , de sauter 3 lignes et prendre la quatrième (4j).

    Et merci d'avance.

  10. #10
    Membre confirmé Avatar de dream_rachid
    Homme Profil pro
    DBA & Responsable BI
    Inscrit en
    Mars 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : DBA & Responsable BI
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 278
    Points : 474
    Points
    474
    Par défaut
    Selon les exemples que tu as mentionné je pense qu'il suffit de filtrer ta requête pour qu'elle ne prend pas les données Null (where F1 <> NULL)

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Points : 37
    Points
    37
    Par défaut
    (where F1 <> NULL) ne permet de prendre que les infos de la première colonne, pour la deuxième colonne je veux l'info associée à la dernière NULL pour chaque spécialité (l'info en rouge), je veux que cet info soit associée à la spécialité qui se trouve plus haut:

    Microsoft 5
    DB/OS 3
    Legacy 2.3
    Java 2.7
    ....

    Et merci d'avance.

  12. #12
    Membre confirmé Avatar de dream_rachid
    Homme Profil pro
    DBA & Responsable BI
    Inscrit en
    Mars 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : DBA & Responsable BI
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2006
    Messages : 278
    Points : 474
    Points
    474
    Par défaut
    c'est un cas très particulier ... bon je propose deux solutions :

    - voir la possibilité dans les fichiers sources d'ajouter un flag qui désigne les lignes à introduire dans le datawarehouse , par la suite tu pourra les récupérées facilement

    - si la première occurrence n'est pas faisable alors je propose que tu importe la totalité du fichier Excel dans une table temporaire et avec un Script T-SQL tu pourra récupérer la 3 ligne ou bien supprimer les lignes inutiles

  13. #13
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Points : 37
    Points
    37
    Par défaut
    Merci d'abord,

    La première solution n'est pas possible pour moi, pour la deuxième je ne sais pas s'il y a une requête qui permet d'extraire la valeur différente de NULL de la première colonne et de lui associer la valeur de la deuxième colonne qui se trouve dans la ligne i+3 (i=La ligne de la valeur différente de NULL de la première colonne) et réitérer pour chaque valeur différente de NULL de la première colonne.

    Si non j'arrive à récupérer les valeurs de la première colonne, en appliquant la requête suivante dans une source de données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  F1
    FROM [Tableau$]
    where  ( F1 <> 'Effectif total' );
    Et les valeurs de la deuxième colonne en appliquant la requete suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  F2
    FROM [Tableau$]
    where  ( F3 = '6 months)

    F3 est une colonne qui contient la durée (moi je veux récupérer celle de 6 months).

    Donc j'ai les deux colonnes bien faites et dans l'ordre souhaité, mais dans deux sources différentes, j'ai donc besoin d'une transformation qui permet de concaténer chaque ligne de la première colonne avec la ligne correspondante de la deuxième colonne.

    Et merci d'avance.

  14. #14
    Membre averti
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2010
    Messages
    240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2010
    Messages : 240
    Points : 359
    Points
    359
    Par défaut
    Tu peux utliser le composant Merge, puis tu les concatènes dans un composant Derived Column.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Points : 37
    Points
    37
    Par défaut
    Merci d'abord,

    Pour le composant Merge (Fusionner), il faut que les deux tables soient triées, or moi j'ai besoin de l'ordre initial, donc si je fais un tri je vais perdre cet ordre. La solution qui me vient à l'esprit est de générer une clé artificielle pour chaque table, et faire un Merge sur cette clé, mais je ne sais pas comment générer une clé artificielle pour une table dans SSIS.

    Et merci d'avance.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/03/2007, 19h34
  2. Réponses: 9
    Dernier message: 22/09/2006, 17h31
  3. Une fonction settimeout qui s'execute pas
    Par stepon dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/08/2006, 11h55
  4. [VB6]Connexion a une BD mysql qui n'est pas en local
    Par aude_1603 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 02/03/2006, 09h05
  5. Acceder a une base SQL qui n'est pas sur le meme serveur
    Par skyo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/01/2006, 10h58

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