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

Access Discussion :

Requête beaucoup de calcul très très très longue


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 30
    Points : 17
    Points
    17
    Par défaut Requête beaucoup de calcul très très très longue
    Bonjour,

    J'ai conçu une BDD access 2010 ou l'objectif est que chaque collaboraeur indiqué son avancement prévu et son avancement réalisé
    Table avancement avec les champs suivants :
    CodeAvancement
    CodeProjet
    CodeIR
    CodeDateSuivi
    CodeADG
    CodeOutil
    Prév Exécuté_RFP
    Prév Validé_RFP
    Réalisé Exécuté_RFP
    Réalisé Validé_RFP
    Réalisé Bloqué_RFP

    Ma requette détermine pour chaque IR (CodeIR) l'avancement cumulé (en pourcentage) prévu et l'avancement cumulé réalisé pour chaque semaine (CodeDateSuivi)
    La requete contient 1 colonne pour chaque CodeDateSuivi (sachachant qu'il y a 15 CodeDateSuivi) multiplié par le nomvre de Prév Exécuté_RFP ; Prév Validé_RFP ; Réalisé Exécuté_RFP ; Réalisé Validé_RFP ; Réalisé Bloqué_RFP
    La requete tourne en 1 minute alors qu'il n'y a que 7000 ligne dans la table T_Avancement

    La voici en PJ

    est il possible de la simplifier de facon à ce qu'elle soit plus rapide ?
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonsoir,

    Utilisez tout simplement la fonction "Somme" sur la ligne opération, avec regroupement sur le champ CodeIR, à la place des fonctions de domaine SomDom qui sont affreusement lentes.

    Cdt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Je plussoie ce que dit "User" pour accélérer votre requête. Il y a "trop" de fonctions de domaines qui ralentit son exécution.
    Moi je verrai :
    1- une première requête de regroupement R_RegroupPar_IR qui va regrouper les total par IR qui va servir de test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT T_Avancement.CodeIR, Sum(T_Avancement.[Prév Exécuté_RFP]) AS Tot_Prev_Exec, Sum(T_Avancement.[Prév Validé_RFP]) AS Tot_Prev_Valid
    FROM T_Avancement
    GROUP BY T_Avancement.CodeIR;
    2- 4 requêtes analyses croisées : R_Prev_Exec_Croise - R_Prev_Valid_Croise - R_Real_Exec_Croise - R_Real_Valid_Croise qui vont faire le total par IR selon les CodeDateSuivi par valeurs avec comme exemple de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TRANSFORM Sum(T_Avancement.[Prév Exécuté_RFP]) AS [SommeDePrév Exécuté_RFP]
    SELECT T_Avancement.CodeIR
    FROM T_Avancement INNER JOIN T_DateSuivi ON T_Avancement.CodeDateSuivi = T_DateSuivi.CodeDateSuivi
    WHERE (((T_DateSuivi.CodeDateSuivi_RFP) Is Not Null))
    GROUP BY T_Avancement.CodeIR
    PIVOT T_DateSuivi.CodeDateSuivi_RFP;
    3- Et la requête finale "R_StatParIR_RFP_Bis" avec une liaison entre la première et les 4 autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT R_RegroupPar_IR.CodeIR, Round(IIf([Tot_Prev_Exec]<>0,[R_Prev_Exec_Croise].[1]/[Tot_Prev_Exec],0),2) AS Ex_P_S0, Round(IIf([Tot_Prev_Exec]<>0,[R_Prev_Exec_Croise].[2]/[Tot_Prev_Exec],0),2) AS Ex_P_S1, Round(IIf([Tot_Prev_Exec]<>0,[R_Prev_Exec_Croise].[3]/[Tot_Prev_Exec],0),2) AS Ex_P_S2, Round(IIf([Tot_Prev_Exec]<>0,[R_Prev_Exec_Croise].[4]/[Tot_Prev_Exec],0),2) AS Ex_P_S3, Round(IIf([Tot_Prev_Exec]<>0,[R_Prev_Exec_Croise].[5]/[Tot_Prev_Exec],0),2) AS Ex_P_S4, Round(IIf([Tot_Prev_Exec]<>0,[R_Real_Exec_Croise].[1]/[Tot_Prev_Exec],0),2) AS Ex_R_S0, Round(IIf([Tot_Prev_Exec]<>0,[R_Real_Exec_Croise].[2]/[Tot_Prev_Exec],0),2) AS Ex_R_S1, Round(IIf([Tot_Prev_Exec]<>0,[R_Real_Exec_Croise].[3]/[Tot_Prev_Exec],0),2) AS Ex_R_S2, Round(IIf([Tot_Prev_Exec]<>0,[R_Real_Exec_Croise].[4]/[Tot_Prev_Exec],0),2) AS Ex_R_S3, Round(IIf([Tot_Prev_Exec]<>0,[R_Real_Exec_Croise].[5]/[Tot_Prev_Exec],0),2) AS Ex_R_S4, Round(IIf([Tot_Prev_Valid]<>0,[R_Real_Valid_Croise].[1]/[Tot_Prev_Valid],0),2) AS Val_R_S0, Round(IIf([Tot_Prev_Valid]<>0,[R_Real_Valid_Croise].[2]/[Tot_Prev_Valid],0),2) AS Val_R_S1, Round(IIf([Tot_Prev_Valid]<>0,[R_Real_Valid_Croise].[3]/[Tot_Prev_Valid],0),2) AS Val_R_S2, Round(IIf([Tot_Prev_Valid]<>0,[R_Real_Valid_Croise].[4]/[Tot_Prev_Valid],0),2) AS Val_R_S3, Round(IIf([Tot_Prev_Valid]<>0,[R_Real_Valid_Croise].[5]/[Tot_Prev_Valid],0),2) AS Val_R_S4, Round(IIf([Tot_Prev_Valid]<>0,[R_Prev_Valid_Croise].[1]/[Tot_Prev_Valid],0),2) AS Val_P_S0, Round(IIf([Tot_Prev_Valid]<>0,[R_Prev_Valid_Croise].[2]/[Tot_Prev_Valid],0),2) AS Val_P_S1, Round(IIf([Tot_Prev_Valid]<>0,[R_Prev_Valid_Croise].[3]/[Tot_Prev_Valid],0),2) AS Val_P_S2, Round(IIf([Tot_Prev_Valid]<>0,[R_Prev_Valid_Croise].[4]/[Tot_Prev_Valid],0),2) AS Val_P_S3, Round(IIf([Tot_Prev_Valid]<>0,[R_Prev_Valid_Croise].[5]/[Tot_Prev_Valid],0),2) AS Val_P_S4
    FROM (((R_RegroupPar_IR INNER JOIN R_Prev_Exec_Croise ON R_RegroupPar_IR.CodeIR = R_Prev_Exec_Croise.CodeIR) INNER JOIN R_Real_Exec_Croise ON R_RegroupPar_IR.CodeIR = R_Real_Exec_Croise.CodeIR) INNER JOIN R_Real_Valid_Croise ON R_RegroupPar_IR.CodeIR = R_Real_Valid_Croise.CodeIR) INNER JOIN R_Prev_Valid_Croise ON R_RegroupPar_IR.CodeIR = R_Prev_Valid_Croise.CodeIR;
    Je me suis arrêté à la 5ème code date, mais la suite est la même.

    Requête presque instantanée et la base exemple est jointe.

    Cordialement.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

Discussions similaires

  1. [MySQL] Requête multi-critère dans une table très simple
    Par flashnet dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/05/2013, 20h56
  2. Calculs sur de très petits nombres (0-255)
    Par Kaluza dans le forum Langage
    Réponses: 11
    Dernier message: 06/04/2011, 15h13
  3. Requête rapide après une 1ere execution / très lente avant
    Par nc_dvlp dans le forum Administration
    Réponses: 5
    Dernier message: 03/06/2008, 18h29
  4. Beaucoup de div imbriqués => rendu très lent
    Par vivine10 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/10/2005, 17h00

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