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

DataStage Discussion :

Transformer des lignes en colonne DataStage


Sujet :

DataStage

  1. #1
    Candidat au Club
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Transformer des lignes en colonne DataStage
    Bonjour a tous,

    Je suis débutant dans DataStage, et j'ai pleins de questions en suspens, mais celle qui me tracasse est la suivante:

    Je voulais savoir comment utiliser le Stage Pivot pour récupérer des lignes en colonnes.
    J'expose mon problème :

    Contrat (ID_contrat, Nom, Prénom, ID_Produit)
    Produit (ID_Produit, Libelle, Tarif)


    donc, je veux avoir comme résultat:

    ID_Contrat, Nom, Prénom, ID_P1 - ID_P2 ... etc
    (ID_Px représente tous les produits liés a l'ID_Contrat séparés par un "-" )

    J'ai entendu parler que le Pivot permet de le faire, mais je ne sais pas comment l'utiliser

    Merci pour vos sollicitations.

  2. #2
    Candidat au Club
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut DataStage Pivot
    Quelqu'un connait comment utiliser le Stage Pivot pour transformer des lignes en colonnes en DataStage.

    DataStage : 7x
    ODBC : SQL Server 2000

    Merci

  3. #3
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    Bonjour,

    Je dirais que le stage pivot n'est pas indiqué pour ce que tu veux faire.
    Il ne s'agit pas de "pivoter" des champs, mais juste de regrouper des informations de plusieurs lignes sur une seule ligne.
    (Tu pars d'une structure (Contrat, Produit) pour arriver à une structure (Contrat, Produits), donc même nombre de champs).

    Si j'ai bien compris, pour répondre à ta problématique, j'utiliserais un Transformer suivi d'un Agregator.

    1°) Dans le Transformer, tu définies 2 variables dans cet ordre et avec ces dérivations :
    - ListeProduit : If ID_Contrat = ContratPrec Then ListeProduitPrec ||' - '|| ID_Produit Else ID_Produit
    - ContratPrec : ID_Contrat
    - ListeProduitPrec : ListeProduit
    Tu as ainsi pour chaque ligne un champ avec la concaténation des produits précédents pour le même contrat.

    2°) Puis dans l'agrégator, tu définies comme clé de regroupement le champ ID_Contrat, et tu utilises 'Last' comme fonction d'agrégation sur le champ ListeProduit.
    Tu ne gardes ainsi pour chaque Contrat que la dernière ligne qui contient la concaténation de tous ses produits.


    Si tu as des problèmes de performances, d'autres solutions pourraient être mises en place, mais peut-être plus compliquées (faire l'opération directement en sql dans un OCI, utiliser un hashfile en sortie au lieu de l'agregator...).


    Voilà, j'espère que je ne me suis pas loupé, j'ai fait ça de tête.
    N'hésite pas s'il y a quelque chose qui n'est pas clair.

    Nicolas

  4. #4
    Candidat au Club
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Transformer des lignes en colonne DataStage (1 Solution)
    Bonjour

    effectivement le pivot n'a pas sa place dans ce pb.
    J'ai pu bidouiller un job qui par hasard, a les même caractéristique que les tiens.

    Ma solution est la suivante:

    1) Déclaration de variable

    ID_Contrat : Lien contrat
    ID_Produit : Lien Produit
    ContratPrec : ID_Contrat
    ProduitPrec : ID_Produit
    ListeProduitPrec : ListeProduit
    ListeProduit : If ID_Contrat <> ContratPrec Then ID_Produit Else Trim(ListeProduit):'-':ID_Produit

    2) Dans le fichier HashFile, il faut définir ID_Contrat comme clé de regroupement

    Rq: j'ai ajouté un enregistrement bidon dans en dérnière ligne afin que le test prenne toute les ligne de la table.

    Voila.

    Merci Nicolas pour ta réponse, sa ma permit de validée l'idée.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Architecte Décisionnel
    Inscrit en
    Février 2008
    Messages
    866
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte Décisionnel

    Informations forums :
    Inscription : Février 2008
    Messages : 866
    Points : 1 260
    Points
    1 260
    Par défaut
    Je dirais que ce n'est pas le hasard, mais peut-être juste la mise en œuvre la plus naturelle.

    Mais est-ce que ton traitement fonctionne ? Il y a quelques trucs bizarres dans ce que tu montres :

    - Par rapport à tes variables, est-ce que c'est l'ordre dans lequel elles sont dans ton transformer ?
    Parce qu'à mon avis, il faut que tu valorises la ListeProduit avant de mettre à jour les ContratPrec et ProduitPrec.

    - Et à priori, pour la dérivation de ListeProduit, il faut utiliser ListeProduitPrec.
    Et la concaténation avec la données précédente doit se faire lorsque l'ID_Contrat est le même, pas lorsqu'il est différent ?

    - Et je ne vois pas trop pourquoi il serait nécessaire d'ajouter une ligne bidon à la fin ?

    Pour le hashfile, je suis d'accord. Ça te permet de ne garder que la dernière ligne pour chaque ID_Contrat.

    Ou alors tu as trouvé une nouvelle façon de faire que je ne comprends pas.

Discussions similaires

  1. Transformer des lignes en colonnes
    Par mahis_ dans le forum kettle/PDI
    Réponses: 2
    Dernier message: 01/07/2013, 13h41
  2. Requête SQL, transformer des lignes en colonne
    Par gadget2 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/11/2010, 20h50
  3. [Datastage Server 7.5] Transformer des lignes en colonnes
    Par alpachico dans le forum DataStage
    Réponses: 1
    Dernier message: 10/07/2009, 16h25
  4. Transformer des lignes en colonnes
    Par Gomoz dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/02/2009, 17h55
  5. Transformer des lignes en colonnes
    Par ofinot dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 30/07/2008, 11h45

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