Fonction Moy Calculer la moyenne arithmétique d'un ensemble de valeurs contenues dans un champ spécifié sur une requête. L'espace réservé expr représente une expression de chaîne identifiant le champ qui contient les données numériques que vous voulez faire la moyenne ou une expression qui effectue un calcul utilisant les données dans ce champ. Les opérandes dans expr peuvent inclure le nom d'un champ de table, d'une constante ou d'une fonction (qui peut être intrinsèque ou définie par l'utilisateur mais pas l'une des autres fonctions d'agrégation SQL). La moyenne calculée par Avg est la moyenne arithmétique (la somme des valeurs divisée par le nombre de valeurs). Vous pouvez utiliser Avg. Par exemple, pour calculer le coût moyen du fret. La fonction Avg n'inclut aucun champ Null dans le calcul. Vous pouvez utiliser Avg dans une expression de requête et dans la propriété SQL d'un objet QueryDef ou lors de la création d'un objet jeu d'enregistrements basé sur une requête SQL. Mouvement moyen Calcul Calcul de la moyenne mobile Calcul de la moyenne mobile J'essaie de calculer une moyenne mobile pour une série de données. Je veux générer la moyenne mobile pour chaque point dans les données, afin de montrer dans un graphique. Quoi qu'il en soit, ci-dessous est un exemple de MS Support. J'ai suivi à la lettre, mais la mienne ne donne pas une moyenne mobile. Il répète le même point de données à plusieurs reprises (le premier point de données). Donc, je ne crois pas que la fonction est de trouver le startdate dans la ligne MyRST. Seek, donc juste de retourner le premier point de données. Enfin (peut-être rendra cela vraiment facile) Je suis confus sur la façon dont les index de travail. Je pensais que vous ne pouviez avoir qu'une seule clé primaire, mais apparemment, vous pouvez créer plusieurs contraintes de champ. J'ai essayé de faire ceci avec la requête de définition de données suivante: ALTER TABLE Table1 AJOUTER CONSTRAINT NoDupes UNIQUE (CurrencyType, TransactionDate) Désolé pour la longueur de ce message. J'apprécie ton aide. La fonction d'exemple suivante calcule les moyennes mobiles sur la base d'une table avec une clé primaire de plusieurs champs. Les valeurs hebdomadaires des devises étrangères sont utilisées pour cet exemple. Pour créer la fonction exemple, procédez comme suit: Créez le tableau suivant et enregistrez-le comme Table1: Table: Table1 --------------------------- -------------- Nom du champ: CurrencyType Type de données de la clé primaire: Taille du champ texte: 25 Nom du champ: TransactionDate Primary Key Type de données: DateTime Format: Short Date Nom du champ: Rate Type de données: Currency Décimales: 4 Affichez le tableau en mode Feuille de données et saisissez les valeurs suivantes: Type de devise Taux de transactionDate ------------------------------- ------------- Yen 8693 0,0079 Yen 81393 0,0082 Yen 82093 0,0085 Yen 82793 0,0088 Yen 9393 0,0091 Mark 8693 0,5600 Mark 81393 0,5700 Mark 82093 0,5800 Mark 82793 0,5900 Mark 9393 0,6000 Ouvrez un nouveau module et tapez le Fonctions suivantes: Fonction MAvgs (Périodes comme Integer, StartDate, TypeName) Dim MyDB As DATABASE, MyRST Comme Recordset, MySum As Double Dim i, x Définir MyDB CurrentDb () Set MyRST MyDB. OpenRecordset (Table1) Sur erreur Resume Next MyRST. Index PrimaryKey x Périodes - 1 ReDim Store (x) MySum 0 Pour i 0 à x MyRST. MoveFirst MyRST. Seek, TypeName, StartDate Ces deux variables doivent être dans le même ordre que les champs de clé primaire de votre table. Store (i) MyRSTRate Si i lt x Then StartDate StartDate - 7 Le 7 ici suppose les données hebdomadaires 1 pour les données quotidiennes. Si StartDate lt 8693 MAvgs Null: Exit Function 8693 est remplacé par la date la plus ancienne des données dans votre table. MySum Store (i) MySum Suivant i MAvgs MySum Périodes MyRST. Close End Function Créez la requête suivante basée sur la table Table1: Requête: Query1 --------------------- ---------------------------------- Champ: CurrencyType Champ: TransactionDate Champ: Rate Champ: Expr1: MAvgs (3 , TransactionDate, CurrencyType) REMARQUE: cette requête générera une moyenne mobile de trois semaines des données de taux. Pour calculer une moyenne mobile plus longue ou plus courte, modifiez le nombre 3 dans la colonne Requêtes Expr1 à la valeur que vous souhaitez calculer. Exécutez la requête. Notez que vous voyez la moyenne mobile de trois semaines suivante pour chaque devise. Une valeur Null indique qu'il n'y avait pas assez de valeurs antérieures pour calculer la moyenne des semaines. CurrencyType TransactionDate Rate Expr1 Mark 080693 0,5600 Mark 081393 0,5700 Mark 082093 0,5800 0,57 Mark 082793 0,5900 0,58 Mark 090393 0.6000 0.59 Yen 080693 0.0079 Yen 081393 0.0082 Yen 082093 0.0085 0.0082 Yen 082793 0.0088 0.0085 Yen 090393 0.0091 0.0088 RE: Jun 10 21:15 Quel est l'âge de ce code Il doesnt utiliser explicitement DAO et ne mentionne pas que cela ne fonctionnera pas avec des tables liées. Dim MyDB comme DAO. Database, MyRST comme DAO. Recordset. Je voudrais utiliser une sous-requête plutôt qu'un jeu d'enregistrements. Il peut ressembler à quelque chose comme: SELECT CurrencyType, TransactionDate, Rate, (SELECT Moyenne (Rate) FROM Table1 B WHERE A. CurrencyType B. CurrencyType ET A. TransactionDate ENTRE B. TransactionDate - 14 ET B. TransactionDate) FROM Table1 A RE: Moving Calcul moyen C'est vraiment parfait. J'apprécie vraiment votre aide. Cependant, le code que vous avez donné est le calcul de la moyenne mobile de 14 jours (en plaçant la moyenne mobile dans le record pour le jour 1 de la moyenne, où je voulais que ce soit une moyenne à l'envers, placée dans l'enregistrement 14). J'ai changé juste légèrement à la suivante et il semble fonctionner SELECT A. CurrencyType, A. TransactionDate, A. Rate, (SELECT Avg (Rate) DE Table1 B WHERE A. CurrencyType B. CurrencyType ET B. TransactionDate ENTRE A. TransactionDate - 14 AND A. TransactionDate) AS Expr1 FROM Table1 AS A Vous pouvez voir, tout ce que j'ai fait était l'échange A pour B dans la clause where. C'est vraiment une grande aide pour moi et je l'apprécie vraiment. Je n'ai pas vu de codage comme ça avant, et honnêtement, je ne comprends pas vraiment. Je ne sais pas comment le SQL comprend ce que B et A sont. Je suppose qu'ils créent une sorte de référence alternative au tableau 1. Si vous pouvez donner des conseils, je l'apprécierais vraiment. Aussi, peut-être une référence au matériel que je pourrais regarder, je suis toujours très excité d'apprendre quelque chose de nouveau sur VBASQL, et j'apprécie vraiment votre aide RE: Moyenne mobile de calcul PHV (MIS) 29 Juin 12 12:22 comprend ce B et A Sont-ils sont alias es RE: Calcul moyenne mobile Merci, PHV. Il est de mieux en mieux déjà RE: Calcul de la moyenne mobile joshery420 (TechnicalUser) 6 Jul 10 15:06 Wow, jamais regardé SQL vue avant. Extrêmement serviable. Im essayant d'obtenir ce code pour fonctionner dans mon propre ensemble de données et Im bloqué sur un problème particulier. Pd2004, je ne sais pas si le nouveau code de sous-requête a fonctionné de la même façon que votre ancien code VBA ou non, mais avec mes données, il affiche toujours la moyenne mobile même s'il n'y a pas suffisamment de jours pour créer cette longueur d'une moyenne. par exemple. Si Im effectue une moyenne mobile de 7 jours, le jour 1 affiche les mêmes données dans la colonne 7DayAvg que dans la colonne de données quotidiennes. Jour 2 montrerait la moyenne des jours 1 et 2, etc Est-ce que l'un de vous les gars savent comment résoudre ce problème par hasard aussi, merci pour la grande pointe de code PHV. RE: Calcul de la moyenne mobile joshery420 (TechnicalUser) 6 Jul 10 15:08 Woops, destiné à remercier dhookom pour la pointe de code, pas PHV. Mais bon, merci à vous deux. XD RE: Calcul de la moyenne mobile Je vais laisser les meilleures solutions aux professionnels ici, mais vous pouvez voir dans mon message d'origine comment l'exemple d'Aide de Microsoft essaie de gérer cela. Voici le code: Si StartDate lt 8693 Then MAvgs Null: Exit La fonction 8693 est remplacée par la date la plus ancienne des données dans votre tableau. Ils sortent juste de la fonction si la date ne correspond pas aux critères. Je ne sais pas si vous pourriez incorporer quelque chose comme ça dans le code d'alias fourni par dhookem. Je n'aime pas leur façon de traiter cela, et je soupçonne que dhookem fournira une solution beaucoup plus élégante. À mes fins, la question que vous décrivez n'est pas une préoccupation, mais je serai intéressé à voir des solutions. RE: Calcul de la moyenne mobile dhookom (programmeur) 6 Jul 10 17:05 Vous pouvez essayer d'utiliser IIf () pour tester le nombre d'enregistrements. Attention: le code du bloc-notes non testé suit: SELECT A. CurrencyType, A. TransactionDate, A. Rate, IIF ((SELECT Count (Rate) FROM Tableau1 C WHERE A. CurrencyType C. CurrencyType ET C. TransactionDate ENTRE A. TransactionDate - 14 AND A. TransactionDate) 7, (SELECT Avg (Rate) FROM Tableau1 B WHERE A. CurrencyType B. CurrencyType ET B. TransactionDate BETWEEN A. TransactionDate - 14 AND A. TransactionDate), Null) AS Expr1 DE Table1 AS A RE: Moyenne mobile CalculAccès Calcul d'une moyenne mobile Vous pouvez utiliser une instruction SELECT comme celle-ci pour calculer une moyenne mobile: Cette instruction numérise une table contenant des valeurs quotidiennes et utilise une requête imbriquée pour calculer la moyenne des sept jours précédents. Vous pouvez facilement ajuster cette plage pour modifier la façon dont la moyenne mobile est calculée. Par exemple, vous pouvez utiliser une clause Where pour calculer la moyenne mobile sur une fenêtre de 14 jours, avec la date courante au milieu. Discussion Une moyenne mobile est utilisée pour lisser les données de séries chronologiques qui contiennent des sauts remarquables entre les observations. L'échelle de temps pour les observations peut être des jours (comme dans l'exemple précédent), des mois ou même des années. Vous pouvez également utiliser une colonne AutoNumber simple à la place d'un champ de date, car les valeurs de cette colonne augmenteront également au fil du temps. Plus la gamme utilisée pour calculer la moyenne mobile est grande, plus la courbe résultante sera lisse. Dans la figure 9-3. Vous pouvez voir comment une moyenne mobile lisse les observations individuelles d'un cours d'actions. Figure 9-3. Utilisation d'une moyenne mobile pour lisser un ensemble de valeurs
No comments:
Post a Comment