Friday, 17 February 2017

Durchschnittlicher Ms Zugriff

Ich habe eine Tabellenproduktion, die die folgende Struktur enthält: Ich habe Daten für jeden Repräsentanten von 112011 bis 812013. Was ich tun möchte, ist, einen 12 Monate gleitenden durchschnittlichen Anfang 112012 für jeden Repräsentanten wie folgt zu erstellen: wo jede Zeile darstellt Der zwölfmonatige gleitende Durchschnitt für den besagten Vertreter zur angegebenen Zeit. Ich fand einige Beispiele, die vage nahe waren und ich versuchte sie ohne Erfolg. Es scheint die Hinzufügung einer Gruppe durch rep-Komponente ist die große Abweichung von anderen Beispielen. Dies ist etwa so weit wie ich bekam: Diese Abfrage scheint einen Gesamtdurchschnitt oder Summe zu ziehen, da es keine Gruppierung in der korrelierten Unterabfrage gibt. Wenn ich versuche zu gruppieren, bekomme ich einen Fehler, dass es nur höchstens eine Zeile zurückkehren kann. Okt 10 13 am 14: 47Avg Funktion Berechnet das arithmetische Mittel einer Menge von Werten, die in einem bestimmten Feld in einer Abfrage enthalten sind. Der expr-Platzhalter repräsentiert einen Zeichenfolgenausdruck, der das Feld identifiziert, das die numerischen Daten enthält, die Sie durchschnittlich möchten, oder einen Ausdruck, der eine Berechnung unter Verwendung der Daten in diesem Feld ausführt. Operanden in expr können den Namen eines Tabellenfeldes, eine Konstante oder eine Funktion enthalten (die entweder intrinsisch oder benutzerdefiniert sein kann, aber nicht eine der anderen SQL-Aggregatfunktionen). Der durch Avg berechnete Durchschnitt ist das arithmetische Mittel (die Summe der Werte dividiert durch die Anzahl der Werte). Sie können die Verwendung von Avg. Um beispielsweise die durchschnittlichen Frachtkosten zu berechnen. Die Avg-Funktion enthält keine Null-Felder in der Berechnung. Sie können Avg in einem Abfrageausdruck und in der SQL-Eigenschaft eines QueryDef-Objekts oder beim Erstellen eines Recordset-Objekts basierend auf einer SQL-Abfrage. Moving Average Calculation Moving Average Berechnungen Moving Average Berechnung Ich versuche, einen gleitenden Durchschnitt für eine Reihe von berechnen Daten. Ich möchte den gleitenden Durchschnitt für jeden Punkt innerhalb der Daten generieren, um in einem Diagramm zu zeigen. Wie auch immer, unten ist ein Beispiel von MS Support. Ich habe den Brief gefolgt, aber mir gibt nicht einen gleitenden Durchschnitt. Es wiederholt den gleichen Datenpunkt über und über (der erste Datenpunkt). So glaube ich nicht, dass die Funktion das startdate in der MyRST. Seek Linie findet, also gerade die Rückgabe des ersten Datenpunktes. Schließlich (vielleicht macht dies wirklich einfach) Ich bin verwirrt darüber, wie die Indizes funktionieren. Ich dachte, Sie könnten nur einen Primärschlüssel haben, aber anscheinend können Sie mehrere Feldbeschränkungen erstellen. Ich habe versucht, dies mit der folgenden Datendefinitionsabfrage zu tun: ALTER TABLE Table1 ADD CONSTRAINT NoDupes UNIQUE (CurrencyType, TransactionDate) Sorry über die Länge dieses Beitrags. Ich schätze Ihre Hilfe. Die folgende Beispielfunktion berechnet Bewegungsdurchschnitte basierend auf einer Tabelle mit einem Mehrfachfeld-Primärschlüssel. Für dieses Beispiel werden die wöchentlichen Werte der Fremdwährungen verwendet. Gehen Sie folgendermaßen vor, um die Beispielfunktion zu erstellen: Erstellen Sie die folgende Tabelle, und speichern Sie es als Table1: Tabelle: Table1 --------------------------- -------------- Feldname: CurrencyType Primärschlüssel Datentyp: Text Feldgröße: 25 Feldname: TransactionDate Primärschlüssel Datentyp: DateTime Format: Kurzdatum Feldname: Datentyp: Währung Dezimalstellen: 4 Zeigen Sie die Tabelle in der Datenblattansicht an und geben Sie die folgenden Werte ein: CurrencyType TransactionDate Rate ------------------------------- ------------- 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 Öffnen Sie ein neues Modul und geben Sie die folgende Funktionen: Funktion MAvgs (Perioden As Integer, Startdatum, Type-Name) Dim MyDB Als DATABASE, MyRST Als Recordset, MySum As Double Dim i, Satz x MyDB CurrentDb () Set MyRST MyDB. OpenRecordset (Tabelle 1) On Error Resume Next MyRST. Index PrimaryKey x Periods - 1 ReDim Store (x) MySum 0 Für i 0 Zu x MyRST. MoveFirst MyRST. Seek, TypeName, StartDate Diese beiden Variablen sollten in der gleichen Reihenfolge sein wie die Primärschlüsselfelder in Ihrer Tabelle. Store (i) MyRSTRate If i lt x Then StartDate StartDate - 7 Die 7 hier nimmt wöchentliche Daten 1 für Tagesdaten an. Wenn StartDate lt 8693 Dann wird MAvgs Null: Exit Function 8693 durch das früheste Datum der Daten in Ihrer Tabelle ersetzt. MySum-Speicher (i) MySum Next i MAvgs MySum-Perioden MyRST. Close-Endfunktion Erstellen Sie die folgende Abfrage auf der Grundlage der Tabelle1-Tabelle: Query: Query1 --------------------- ---------------------------------- Feld: CurrencyType Feld: TransactionDate Feld: Ratenfeld: Expr1: MAvgs (3 , TransactionDate, CurrencyType) HINWEIS: Diese Abfrage erzeugt einen dreiwöchigen gleitenden Durchschnitt der Rate-Daten. Um einen längeren oder kürzeren gleitenden Durchschnitt zu berechnen, ändern Sie die Zahl 3 in der Spalte Ausdrücke 1 von Spalte auf den Wert, den Sie berechnen möchten. Führen Sie die Abfrage aus. Beachten Sie, dass Sie die folgenden drei Wochen gleitenden Durchschnitt für jede Währung sehen. Ein Null-Wert zeigt an, dass nicht genug frühere Werte vorhanden sind, um diesen Wochenmittelwert zu berechnen. CurrencyType Transaction Rate Expr1 Mark 080.693 0,5600 Mark 081.393 0,5700 Mark 082.093 0,5800 0,57 Mark 082.793 0,5900 0,58 Mark 090.393 0.6000 0.59 Yen 080.693 0,0079 Yen 081.393 0,0082 Yen 082.093 0,0085 0,0082 Yen 082.793 0,0088 0,0085 Yen 090.393 0,0091 0,0088 RE: Moving Average Berechnung dhookom (Programmierer) 28 Jun 10 21:15 Wie alt ist dieser Code Es doesnt explizit verwenden DAO und nicht erwähnen, dass dies nicht mit verknüpften Tabellen arbeiten. Dim MyDB als DAO. Database, MyRST als DAO. Recordset. Ich würde eine Unterabfrage anstatt ein Re-Cord-Set verwenden. Es könnte etwa so aussehen: SELECT CurrencyType, Transaction, Rate (SELECT Avg (Rate) FROM Tabelle1 B WHERE A. CurrencyType B. CurrencyType UND A. TransactionDate ZWISCHEN B. TransactionDate - 14 UND B. TransactionDate) FROM Tabelle1 A RE: Umzug Durchschnittliche Berechnung Das ist wirklich perfekt. Ich schätze deine Hilfe sehr. Allerdings ist der Code, den Sie gaben die Berechnung der vorwärts 14 Tage gleitenden Durchschnitt (Platzierung der gleitenden Durchschnitt in den Datensatz für Tag 1 des Durchschnitts, wo ich wollte, dass es ein rückwärts gerichteter Durchschnitt, platziert in Rekord 14). Ich änderte nur etwas zu den folgenden und es scheint zu funktionieren SELECT A. CurrencyType, A. TransactionDate, A. Rate, (SELECT Avg (Rate) FROM Tabelle1 B WHERE A. CurrencyType B. CurrencyType UND B. TransactionDate ZWISCHEN A. TransactionDate - 14 AND A. TransactionDate) AS Expr1 FROM Tabelle1 AS Wie Sie sehen können, war alles, was ich tat Austausch A für B in der where-Klausel. Dies ist eine wirklich große Hilfe für mich und ich schätze es wirklich. Ich habe nicht gesehen Codierung wie diese vor, und ehrlich, ich nicht wirklich verstehen. Ich weiß nicht, wie die SQL versteht, was B und A sind. Ich gehe davon aus, dass sie eine Art von alternativen Verweis auf Tabelle1 erstellen. Wenn Sie irgendeine Anleitung geben können, würde ich es wirklich schätzen. Auch, vielleicht ein Hinweis auf Material, das ich sehen konnte bin ich immer sehr aufgeregt, um etwas Neues über VBASQL lernen, und ich wirklich schätzen Ihre Hilfe RE: Moving Average Calculation PHV (MIS) 29 Jun 10 12:22 versteht, was B und A Sind sie alias es RE: Moving Average Calculation Vielen Dank, PHV. Es macht besser Sinn bereits RE: Moving Average Berechnung joshery420 (TechnicalUser) 6 Jul 10 15:06 Wow, nie sah SQL-Sicht vor. Äußerst hilfreich. Ich versuche, diesen Code zu bekommen, um in meinem eigenen Datensatz zu funktionieren und ich bin auf eine bestimmte Frage geheilt. Pd2004, nicht sicher, ob der neue Unterabfrage-Code arbeitete die gleiche wie Ihre alten VBA-Code oder nicht, aber mit meinen Daten zeigt es immer noch den gleitenden Durchschnitt, auch wenn es arent genug Tage, um die Länge eines durchschnittlichen erstellen. z. B. Wenn Im einen 7-Tage-Rolling-Durchschnitt durchführt, zeigt Tag 1 dieselben Daten in der Spalte 7DayAvg wie in der Tagesdatenspalte an. Tag 2 würde zeigen, den Durchschnitt der Tage 1 und 2, etc. Einer von euch Jungs wissen, wie man dies durch Zufall zu beheben Auch danke für die große Code-Tipp PHV. RE: Verschieben der Mittelwertberechnung joshery420 (TechnicalUser) 6 Jul 10 15:08 Woops, gemeint zum Dank dhookom für den Code-Tipp, nicht PHV. Aber hey, danke euch beiden. XD RE: Moving Average Calculation Ich werde die besten Lösungen für die Fachleute hier verlassen, aber Sie können in meinem ursprünglichen Post sehen, wie das Microsoft Help Beispiel versucht, das zu behandeln. Hier ist der Code: Wenn StartDate lt 8693 Dann MAvgs Null: Exit Function 8693 wird durch das früheste Datum der Daten in Ihrer Tabelle ersetzt. Sie sind nur verlassen die Funktion, wenn das Datum nicht die Kriterien passt. Ich weiß nicht, ob Sie so etwas in den Alias-Code von dhookem zur Verfügung stellen könnte. Ich dont wie ihre Art, dies zu behandeln, und ich vermute, dass dhookem wird eine viel elegantere Lösung. Für meine Zwecke die Frage, die Sie beschreiben, ist nicht ein Problem, aber ich werde daran interessiert, keine Lösungen zu sehen. RE: Moving Average Berechnung Dhookom (Programmer) 6 Jul 10 17:05 Sie könnten versuchen, mit IIf (), um für eine Zählung der Anzahl der Datensätze zu testen. Achtung: es wird ein nicht getestetes Notepad-Code folgen: SELECT A. CurrencyType, A. TransactionDate, A. Rate, IIF (SELECT Count (Rate) FROM Tabelle1 C WHERE A. CurrencyType C. CurrencyType UND C. TransactionDate ZWISCHEN A. TransactionDate - 14 AND A. TransactionDate), NULL) AS Expr1 FROM Tabelle1 AS A RE: Gleitende Durchschnittsberechnung


No comments:

Post a Comment