Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2011, 05h22   #1
Invité de passage
 
Homme
Inscription : novembre 2011
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : novembre 2011
Messages : 1
Points : 0
Points : 0
Par défaut Requête avec filtre récursif

Bonjour à tous,

J'espère que le titre s'approche de la demande.

Le fichier ci-joint comprend deux onglets:

(1) Données fictives complètes
(2) Données filtrées manuellement après rassemblement intra-condition

Mon but est de lancer une requête après importation de ces donnée sous Access.

Je n'ai pas énormément d'expérience sous Access ni SQL mais je pense que c'est faisable.

L'idée est de pouvoir trier ces données à partir de la variable indépendante (condition) et d'avoir en output la moyenne de la variable dépendante.

Jusqu'ici je suis parvenu à faire cette requête, tableau croisé assez simple.

Cela se corse lorsque j'aimerais n'intégrer dans cette moyenne (output) que les événements dont la variable dépendante n'excède pas une borne inférieure ou supérieure. Ces bornes (inf. et sup.) se calculent à partir de ce même output (moyenne). Ainsi, les données excédant -3 à +3 écart types autour de la moyenne ne doivent plus entrer en considération pour le calcul de la moyenne.

Donc, critère récursif avec itération jusqu'à ce qu'au sein de chaque catégorie, toutes les données soient inclues dans une distribution déterminée par le paramètre X*écart type.

[borne supérieure - 'valeur maximum de l'échantillon intra-catégorie' >= 0]


L'idée est d'exclure des outliers au sein de chaque catégorie (var. indépendante).

Est-ce possible? Utiliser un output d'une requête pour réactualiser ce même output? Dois-je envisager une suite de requête?


D'avance, merci pour vos idées et vos suggestions, vous ne réalisez pas le nombre d'heures de travail robotisé que cela m'économiserait.
Fichiers attachés
Type de fichier : xlsx exemple données.xlsx (11,9 Ko, 3 affichages)
biggg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 10h35   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
Bonjour Biggg,

Intéressant problème... bien que je n'ai pas tout compris .

Citation:
Envoyé par Biggg
Dois-je envisager une suite de requête?
==> en tout état de cause, oui. Tu fais intervenir plusieurs fonctions de groupage intégrées dans Access.

Je te suggère d'importer ton fichier Excel dans Access et de fonctionner par tâtonnements. Utilises l'assistant "création de requête sélection", il est très clair.

Le bouton ∑ permet de passer ta requête en mode "regroupement" :
  • il est fondamental de ne pas se planter sur la liste des champs de regroupement (ligne "opération" = "Regroupement").
  • la ligne "opération" te proposera les fonctions dont tu sembles avoir besoin (Somme(), Min(), Max(), EcartType(), etc...), pour la liste des champs de regroupement.
Découpes ton besoin par fonction nécessaire et vérifies les résultats à chaque étape et n'hésites pas à reposter si tu éprouves des difficultés.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 17h58   #3
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
Bonjour,

Le calcul nécessite de passer par une fonction VBA car il faut réaliser des boucles de calculs ce que n'autorise pas le sql d'Access.

Sauf erreur, La fonction suivante détermine les données extrêmes qui entres dans le nombre d'écart-types autorisés :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
Public Function getMaxMinValeur(ByVal bMaxValeur As Boolean, ByVal Domaine As String, ByVal VarIndepNom As String, ByVal VarIndepValeur As String, _
                                ByVal VarDepNom As String, ByVal NbEcartType As Double, ByVal bEchantillon As Boolean) As Double
   Dim dMoyenne As Double, dET As Double, dRange As Double
   Dim sBaseFiltre As String, sRangeFiltre As String
   sBaseFiltre = VarIndepNom & "=""" & VarIndepValeur & """"
   Do
      dMoyenne = DAvg(VarDepNom, Domaine, sBaseFiltre & sRangeFiltre)
      If bEchantillon Then
         dET = DStDev(VarDepNom, Domaine, sBaseFiltre & sRangeFiltre)
      Else
         dET = DStDevP(VarDepNom, Domaine, sBaseFiltre & sRangeFiltre)
      End If
      dRange = NbEcartType * dET
      sRangeFiltre = " AND " & VarDepNom & " Between " & Str(dMoyenne - dRange) & " AND " & Str(dMoyenne + dRange)
   Loop While DAvg(VarDepNom, Domaine, sBaseFiltre & sRangeFiltre) <> dMoyenne
   If bMaxValeur Then
      getMaxMinValeur = dMax(VarDepNom, Domaine, sBaseFiltre & " AND " & VarDepNom & "<=" & Str(dMoyenne + dRange))
   Else
      getMaxMinValeur = dMin(VarDepNom, Domaine, sBaseFiltre & " AND " & VarDepNom & ">=" & Str(dMoyenne - dRange))
   End If
End Function
Les paramètres :
------------------
bMaxValeur : retourne la valeur maxi (True) ou la valeur mini (False)
Domaine : Nom de la table ou de la requête contenant les données
VarIndepNom : Nom de la colonne de la variable indépendante
VarIndepValeur : Valeur de la variable indépendante pour filtrer les données (exemple : "R", "L")
VarDepNom : Nom de la colonne de la variable dépendante
NbEcartType : Nombre d'écart-types autorisé (3, 2.5,2)
bEchantillon : Utilise la formule adéquat de calcul de l'écart-type (Echantillon : True, Population : False)

Utilisation :
------------
Je pense qu'elle est utilisable dans une requête pour filtrer les valeurs et afficher la moyenne et l'écart-type, mais non testée.

Dans le code VBA et affichage du résultat dans la fenêtre éxecution :
Code :
1
2
3
4
5
 
Public Function testmv()
   Debug.Print getMaxMinValeur(False, "db", "[Var indépendante]", "R", "[Var dépendante]", 3, True)
   Debug.Print getMaxMinValeur(True, "db", "[Var indépendante]", "R", "[Var dépendante]", 3, True)
End Function
Résultats :
-----------
Pour "R", en utilisant 3 écart-types de population : Min : 100 - Max : 140
Pour "R", en utilisant 3 écart-types d'échantillon : Min : 100 - Max : 109

Pour "L", en utilisant 3 écart-types de population : Min : 1000 - Max : 1000

@+

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h37.


 
 
 
 
Partenaires

Hébergement Web