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

Développement de jobs Discussion :

Calcul de KPI à partir d'une BDD oracle avec Talend


Sujet :

Développement de jobs

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Calcul de KPI à partir d'une BDD oracle avec Talend
    Bonjour à tous,

    j'utilise une base données oracle, ma table 'MGW1' est remplie avec des données brutes que je voudrais exploiter pour faire du calcul de KPI et insérer les résultats dans d'autres tables. Le problème c'est que les formules sont très complexes et qui demande plusieurs cmd Select. voici un exemple d'une seule formule:

    Résultat= (1- (select1 + select2 + select3) / (select4 + select5 + select6))*100

    select1= select AVG(valeur)from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsRej';
    select2= select AVG(valeur)from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsRej';
    select3= select AVG(valeur) from MGW1 where indicateur like '%TdmTermGrp%' and compteur = 'pmNrOfTdmTermsRej';
    select4= select AVG(valeur)from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsReq';
    select5= select AVG(valeur)from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsReq';
    select6= select AVG(valeur) from MGW1 where indicateur like '%TdmTermGrp%' and compteur = 'pmNrOfTdmTermsReq';

    J'ai essayé de faire cette manip avec plusieurs tOracleInput pour faire les select mais je ne sais pas comment faire par la suite pour faire le calcul mathématique et insérer le résultat avec tOracleOutput.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je pense qu'il est plus simple de construire une requête SQL qui va s'occuper de faire le travail.
    On peut par exemple partir d'une sous-requête qui calcule les différentes valeur, sous-requête qui est ensuite utilisée dans la formule:
    Code sql : 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
     
     
    select (1- (s1 + s2 + s3) / (s4 + s5 + s6))*100
    from
    (
    select sum(v1) as s1 ,sum(v2) as s2,sum(v3) as s3,sum(v4) as s4,sum(v5) as s5,sum(v6) as s6
    from (
    select AVG(valeur)as v1,0 as v2,0 as v3,0 as v4,0 as v5,0 as v6 from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsRej'
    union
    select 0,AVG(valeur),0,0,0,0 from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsRej'
    union
    select 0,0,AVG(valeur),0,0,0 from MGW1 where indicateur like '%TdmTermGrp%' and compteur = 'pmNrOfTdmTermsRej'
    union
    select 0,0,0,AVG(valeur),0,0 from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsReq'
    union
    select 0,0,0,0,AVG(valeur),0 from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsReq'
    union
    select 0,0,0,0,0,AVG(valeur) from MGW1 where indicateur like '%TdmTermGrp%' and compteur = 'pmNrOfTdmTermsReq'
    ))
    On peut même faire l'insertion directement dans la requête, si besoin.

    Tatayo.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    merci pour la réponse.
    mais quand j'execute j'ai une erreur:

    SQL> select sum(v1) ,sum(v2),sum(v3),sum(v4),sum(v5),sum(v6)
    2 from (
    3 select AVG(valeur)as v1,0 as v2,0 as v3,0 as v4,0 as v5,0 as v6 from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsRej'
    4 union
    5 select 0,AVG(valeur),0,0,0,0 from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsRej'
    6 union
    7 select 0,0,AVG(valeur),0,0,0 from MGW1 where indicateur like '%TdmTermGrp%' and compteur = 'pmNrOfTdmTermsRej'
    8 union
    9 select 0,0,0,AVG(valeur),0,0 from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsReq'
    10 union
    11 select 0,0,0,0,AVG(valeur),0 from MGW1 where indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsReq'
    12 union
    13 select 0,0,0,0,0,AVG(valeur) from MGW1 where indicateur like '%TdmTermGrp%' and compteur = 'pmNrOfTdmTermsReq'
    14 ) as r1;
    ) as r1
    *
    ERROR at line 14:
    ORA-00933: SQL command not properly ended


    SQL>

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Re-Bonjour,

    Merci beaucoup pour la réponse, la cmd SQL complète est parfaite
    J'ai pu maintenant l'exécuter avec succès, et ça m'a retourné le bon résultat.

    Mais si je veux un résultat par date, comment je pourrai le faire?

    Je m'explique: Dans ma table 'MGW1', j'ai une colonne 'Startdate', et moi je voudrais calculer la valeur du KPI pour chacune de ces startdate.
    Donc si j'ajoute group by startdate à la fin de la cmd précédente, ça marche pas

    Merci d'avance.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Il faut ajouter la date dans chaque requête qui calcule une moyenne, puis la faire "remonter" jusqu'au premier SELECT.
    Il doit aussi être possible de simplifier cette requête, de cette façon:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select avg(case when indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsRej' then valeur else null end) as v1,
    avg(case when indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsRej' then valeur else null end) as v2,
    ...
    StartDate
    from MGW1
    group by StartDate

    C'est un peu plus propre, mais j'ai un doute sur le NULL dans le AVG. A tester
    Tatayo.

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour Tatayo,

    Merci encore pour la réponse mais je n'ai pas compris comment l'intégrer avec la première cmd
    Je suis débutante en SQL et tout ça a l'air compliqué pour moi.
    J'ai essayé la cmd comme indiqué ci-dessous, mais je ne suis pas sûre de l'endroit exacte où dois-je fermer les parenthèses.
    Pouvez-vous me corriger ce code:


    select (1- (s1 + s2 + s3) / (s4 + s5 + s6))*100
    from
    (
    select sum(v1) as s1 ,sum(v2) as s2,sum(v3) as s3,sum(v4) as s4,sum(v5) as s5,sum(v6) as s6
    from (
    select avg(case when indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsRej' then valeur else null end) as v1,
    avg(case when indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsRej' then valeur else null end) as v2,
    avg(case when indicateur like '%TdmTermGrp%' and compteur = 'pmNrOfTdmTermsRej' then valeur else null end) as v3,
    avg(case when indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsReq' then valeur else null end) as v4,
    avg(case when indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsReq' then valeur else null end) as v5,
    avg(case when indicateur like '%TdmTermGrp%' and compteur = 'pmNrOfTdmTermsReq' then valeur else null end) as v6,
    startdate
    from MGW1))
    group by startdate


    Merci beaucoup.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Il faut l'ajouter dans la sous-requête:
    Code sql : 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
     
    select (1- (s1 + s2 + s3) / (s4 + s5 + s6))*100,startdate
     from
     (
     select sum(v1) as s1 ,sum(v2) as s2,sum(v3) as s3,sum(v4) as s4,sum(v5) as s5,sum(v6) as s6,startdate 
     from (
     select avg(case when indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsRej' then valeur else null end) as v1,
     avg(case when indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsRej' then valeur else null end) as v2,
     avg(case when indicateur like '%TdmTermGrp%' and compteur = 'pmNrOfTdmTermsRej' then valeur else null end) as v3,
     avg(case when indicateur like '%Vmgw%' and compteur = 'pmNrOfAal2TermsReq' then valeur else null end) as v4,
     avg(case when indicateur like '%Vmgw%' and compteur = 'pmNrOfIpTermsReq' then valeur else null end) as v5,
     avg(case when indicateur like '%TdmTermGrp%' and compteur = 'pmNrOfTdmTermsReq' then valeur else null end) as v6,
     startdate
     from MGW1
    group by startdate)
    group by startdate
    )

    Le GROUP BY dans la requête "finale" ne sert à rien car il n'y a pas d'agrégation (sum,avg,max...).

    Si tu veux bien comprendre le fonctionnement de cette requête, l'idéal est de lancer le premier SELECT (celui avec les avg), de voir le résultat, puis de lancer le niveau au dessus, etc.. jusqu'à la requête finale.

    Tu peux aussi faire un tour dans la partie SQL de ce forum avec cette requête, tu devrais avoir d'autres réponses et sûrement une version plus optimisée. Ma requête, quoique correcte, est tout de même un peu "bourrine".

    Tatayo.

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Salut Tatayo,


    Merci beaucoup pour la réponse 100% efficace
    J'ai testé comme tu as suggéré et là j'ai bien compris le fonctionnement.
    C'est super !!

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

Discussions similaires

  1. Connexion distante à une BDD oracle a partir d'un PC vista sans oracle
    Par flyper21 dans le forum Connexions aux bases de données
    Réponses: 4
    Dernier message: 06/08/2008, 09h45
  2. Insertion de données dans une BDD Oracle avec VB.NET
    Par DashRendar dans le forum Accès aux données
    Réponses: 7
    Dernier message: 23/01/2008, 08h47
  3. Obtenir le MCD a partir d'une BDD Oracle, possible?
    Par dipajero dans le forum Designer
    Réponses: 7
    Dernier message: 06/01/2006, 20h48
  4. [Listview] Remplissage à partir d'une bdd mysql
    Par Cybher dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/07/2005, 09h32
  5. Créer une BDD Oracle sur windows
    Par calimero82 dans le forum Administration
    Réponses: 7
    Dernier message: 25/10/2004, 15h30

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