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

Requêtes et SQL. Discussion :

Affichage des 0 sur un graphique très lent


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Affichage des 0 sur un graphique très lent
    Bonjour à tous,

    Je travaille en Access sur un graph qui représente "l'âge" de chaque enregistrement. En ordonnées, j'ai le nombre d'ordres (d'entregistrements) et en abcisse, j'ai les années et les mois. La difficulté est que je dois également afficher les valeurs nulles sur l'axe des abcisses. Donc, si par exemple il n'y a pas de données pendant un mois, je dois malgré tout voir ce mois sur mon axe. (cfr screenshot)

    Dès lors j'ai pensé à plusieurs requêtes:
    - Age_tableau : toutes les valeurs possibles pour chaque semaine
    - Age_comptage: requête qui compte et regroupe toutes les valeurs non nulles de chaque semaine
    - Age_ToInsert: requête qui est la jointure entre les deux (LEFT JOIN) et qui est ajouté dans la table qui sert de source pour le graphique

    SQL de Age_ToInsert:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT Age_tableau.*, Age_Comptage.Nombre
    FROM Age_tableau LEFT JOIN Age_Comptage ON (Age_tableau.[Type de MNT] = Age_Comptage.[Type de MNT]);
    Au niveau du code, j'utilise 2 boucles imbriquées pour "remplir" ma table Age_STATS:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
        While YearMin <= YearMax
            While MonthMin <= MonthMax
            
                'paramétrisation de la requete            
                strsql = "SELECT [Type de MNT], Count([Ordre de travail]) AS Nombre"
                strsql = strsql & " FROM Affichage WHERE Year(DateRef) = " & YearMin & " AND Month(DateRef) =" & MonthMin & ""
                strsql = strsql & " GROUP BY [Type de MNT]"
                CurrentDb.QueryDefs("Age_Comptage").SQL = strsql
                
                'ajout dans la table Age_Stats            
                strsql = "INSERT INTO Age_STATS SELECT Age_ToInsert.* FROM Age_ToInsert"
                CurrentDb.Execute (strsql)
                
                'update du mois et de l'année            
                strsql = "UPDATE Age_STATS SET Annee = " & YearMin & " WHERE Isnull(Annee)"
                CurrentDb.Execute (strsql)
                strsql = "UPDATE Age_STATS SET Mois = " & MonthMin & " WHERE Isnull(Mois)"
                CurrentDb.Execute (strsql)
                
                MonthMin = MonthMin + 1
            Wend
    
            MonthMin = 1
            YearMin = YearMin + 1
            If YearMin = Year(Now) Then
                MonthMax = Month(Now)
            Else
                MonthMax = 12
            End If
    
        Wend

    Le problème est que lorsque je veux afficher ce graphe sur le serveur (qui est très très lent), il faut patienter plus de 2 minutes...!
    J'imagine donc que cette lenteur vient des 2 boucles imbriquées.

    Est-ce que quelqu'un a une solution plus efficace pour afficher les valeurs nulles sur un graphe Access?

    Merci à tous !
    Images attachées Images attachées  

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Any idea??

  3. #3
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Je ne suis pas certain de comprendre ce que tu veux faire : il s'agit dans une table "tableau" de compter les enregistrements par date au format ANNEE/MOIS, mais en renvoyant 0 pour les mois vides ?

    Il faut dans ce cas faire une jointure entre 2 requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select count(*) as nb, format(tableau.dateEnregistrement, "MM/YYYY") as ANNEEMOIS from tableau 
    GROUP BY format(tableau, "MM/YYYY") 
    ORDER BY format(tableau, "YYYY/MM")
    qui te donne le regroupement par année et mois
    et une requête qui définit les années/mois possibles dans ton intervalle. Pour ça, tu peux utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT Format(DateSerial(1901+[ID1],[ID2]+1,[ID3]+1),"MM/YYYY") AS LADATE
    FROM [SELECT TOP 10 (SELECT Count(ID) as a FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID1 FROM MSysObjects TA1 ORDER BY ID]. AS T1, [SELECT TOP 12 (SELECT Count(ID)  FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID2 FROM MSysObjects TA1 ORDER BY ID]. AS T2, [SELECT TOP 1 (SELECT Count(ID)  FROM MSysObjects TA WHERE TA.ID<TA1.ID) AS ID3 FROM MSysObjects TA1 ORDER BY ID]. AS T3
    WHERE (((DateSerial(1901+[ID1],[ID2]+1,[ID3]+1))<=Date()))
    ORDER BY Format(DateSerial(1901+[ID1],[ID2]+1,[ID3]+1),"MM/YYYY");
    et ajouter un critère sur le min(dateEnregistrement) de tableau.
    Ta requête finale ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select r2.ladate, r1.nb from r2 left join r1 on r2.ladate = r1.ANNEEMOIS

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2011
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse!

    Après avoir essayé, j'ai toujours une requête aussi lente... C'est dû au serveur et je ne peux malheureusement rien faire...!

    Donc j'ai pris le problème autrement: je vais réaliser tous ces calculs directement au chargement hebdomadaire des données, comme ca les "statistiques" seront prêtes pour affichage avec un simple SELECT selon les critères présélectionnés par l'utilisateur dans un autre formulaire

    Encore merci!

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

Discussions similaires

  1. Format d'affichage des dates sur les graphiques
    Par marjo69 dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 05/05/2008, 21h21
  2. Réponses: 3
    Dernier message: 05/03/2007, 13h54
  3. ordre d'affichage des données sur un formulaire
    Par puppusse79 dans le forum Access
    Réponses: 5
    Dernier message: 20/09/2006, 16h07
  4. [VB.Net] Comment effacer des traits sur un graphique ?
    Par bert24 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/09/2005, 15h20

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