我这里有一个报表需求,需要用 access 算出中位数,不过 access 并没有原生提供 median 函数,所以我就找了一个用 VB 实现的自定义函数,出处是这里
Stack Overflow
Function fMedian(SQLOrTable, GroupFieldName, GroupFieldValue, MedianFieldName)
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs1 = db.OpenRecordset(SQLOrTable, dbOpenDynaset)
If IsDate(GroupFieldValue) Then
GroupFieldValue = "#" & GroupFieldValue & "#"
ElseIf Not IsNumeric(GroupFieldValue) Then
GroupFieldValue = "'" & Replace(GroupFieldValue, "'", "''") & "'"
End If
rs1.Filter = GroupFieldName & "=" & GroupFieldValue
rs1.Sort = MedianFieldName
Set rs = rs1.OpenRecordset()
rs.Move (rs.RecordCount / 2)
rs.MovePrevious
If rs.RecordCount Mod 2 = 0 Then
varMedian1 = rs.Fields(MedianFieldName)
rs.MoveNext
fMedian = (varMedian1 + rs.Fields(MedianFieldName)) / 2
Else
fMedian = rs.Fields(MedianFieldName)
End If
End Function
原表的字段如下
|结束时间年月日 |分公司 |计算时长之 First 之合计|状态 1|状态 2|日期|月份|集合|
集合=分公司&状态 1&状态 2&月份,是一个辅助列
想输出的表是这样的
|集合|时效(计算时长之 First 之合计的中位数)|
表达式如下
时效: fMedian("5-8-1 新增放款时效(按分公司)","集合",[集合],"计算时长之 First 之合计")
在 SQL 视图里看的话是这样
SELECT [5-8-1 新增放款各环节时效基础表].集合月,
fMedian("5-8-1 新增放款时效(按分公司)","集合",[集合],"计算时长之 First 之合计") AS 时效
FROM [5-8-1 新增放款各环节时效基础表]
GROUP BY [5-8-1 新增放款各环节时效基础表].集合;
但是每次运行查询的时候 access 都会提示“表达式中'fMedian'函数未定义”,试了好多次也不知道问题在哪里,求指教 /(ㄒoㄒ)/~~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.