Ich versuche, eine schnellere Möglichkeit zu finden, meine Mediane in Access zu berechnen. Sie können den folgenden Code sehen, in dem jeweils ein Artikelcode abgefragt, sortiert und dann der Median berechnet wird. Manchmal gibt es 600 Artikelcodes und diese Artikel können jeweils über 1000 Basen zugeordnet werden. Die spezielle Tabelle, mit der ich arbeite, hat zum Beispiel 150.000 Datensätze und es geht wirklich langsam. Gibt es eine bessere Möglichkeit, den Median aller Datensätze gleichzeitig zu berechnen, im Gegensatz zu einem Artikelcode gleichzeitig?MS Access VBA: Berechnen Median ohne Iterieren durch Datensätze
Function FIncPercentile(ByVal posCode As Single, ByVal k As Single, ByVal tbl As String) As Variant
Dim rstRec As Recordset
Dim db As Database
Dim n As Integer
Dim i As Single
Dim res, d1, d2 As Currency
' Create recordset from query
Set db = CurrentDb
Set rstRec = db.OpenRecordset("SELECT Co, Base " & _
"FROM " & tbl & " " & _
"WHERE Code = " & pos & " " & _
"ORDER BY Base ASC;")
' Skip if there are no matches
If IsNull(rstRec!base) Or rstRec.RecordCount = 0 Then
FBasePercentile = Null
Exit Function
End If
' Count records
rstRec.MoveLast
n = rstRec.RecordCount
rstRec.MoveFirst
' Calculate the index where k is the percentile
i = n * k
' Test the decimal and find value accordingly
If i = Int(i) Then
rstRec.Move i - 1
d1 = rstRec!base
rstRec.MoveNext
d2 = rstRec!base
FIncPercentile = (d1 + d2)/2
Else
i = Round(i + 0.5, 0)
rstRec.Move i - 1
FIncPercentile = rstRec!base
End If
End Function
haben Sie versucht, eine Datensatzgruppe für jede Tabelle durch Co, Basis geordnete Öffnung und in einer äußeren Schleife durch jede Co Iterieren der Median mit Filtern in einer inneren Schleife die Berechnung? – Beth
Sie könnten wahrscheinlich die DMedian-Funktion und Beispiel von Microsofts Website https://msdn.microsoft.com/en-us/library/dd789431%28v=office.12%29.aspx anpassen - oder ist das, wo Sie Ihren Code haben? – dbmitch
Wie viele eindeutige Tabellen - wenn es nur eine gibt - ich würde denken, dass Sie eine sofortige Zunahme sehen würden, indem Sie eine Parameterabfrage auf der Tabelle erstellen, wo Code der Parameter ist. Verwenden Sie den Parameter querydef, um das Recordset zu erstellen - anstelle von dynamischem SQL - UND stellen Sie sicher, dass Sie einen Index für Code und Base haben. – dbmitch