按 ID 对多级分组访问报告进行排序
Posted
技术标签:
【中文标题】按 ID 对多级分组访问报告进行排序【英文标题】:Sort multi level grouped Access report by ID 【发布时间】:2021-02-03 12:22:25 【问题描述】:我有一个按 3 个字段(字段 1、字段 2 和字段 3)分组的报告,我尝试按记录 ID 以不同方式对其进行排序但失败了。
下面是一个简单的例子:
ID | Field1 | Field2 | Field3 | Field4 |
---|---|---|---|---|
1 | Y | AA | MM | Item1 |
2 | Z | AA | PP | Item2 |
3 | Z | BB | NN | Item3 |
4 | Z | BB | MM | Item4 |
5 | Z | AA | DD | Item5 |
6 | A | AA | CC | Item6 |
7 | A | BB | DD | Item7 |
8 | A | BB | MM | Item8 |
9 | A | BB | CC | Item9 |
目标结果: 我希望分组的项目按 ID 排序;
字段1:
因为“Y”组 ID 为 1,所以它必须先出现,然后是“Z”组,然后是“A”组。
所有组以此类推。
几周前我在一个论坛上找到了一个解决方案(不记得在哪里),但昨天我测试它时,它在排序时出错了。
该解决方案使用查询来查找每个组名的相关 ID,然后使用这些排序器(我称之为 Sorter1、2、3)对报告进行分组(我将其合并到附加的访问示例中)
Sorter1: CInt(DMin("ID","[Master]","Field1='" & [Field1] & "'"))
Sorter2: CInt(DMin("ID","[Master]","Field2='" & [Field2] & "'"))
Sorter3: CInt(DMin("ID","[Master]","Field3='" & [Field3] & "'"))
它会减慢对大量数据的查询,但会给出完美的结果,除非 field3 中的项目在许多其他组中重复,如图所示。
Sample Access 我想我需要将 field3 的“Dmin”函数限制为仅那些 ID 大于 Sorter2 的值(我尝试过但失败了)。
【问题讨论】:
如果您不将分组数据放入相应的组部分,为什么还要分组?在 SortBy 属性或 Sorting & Grouping 中删除分组并应用排序顺序。 我投票结束这个问题,因为这是一个报告设计问题,而不是代码问题。需要下载并查看文件以分析问题。 其实在这样的报告中分组是需要这3个级别的,原来的报告是按Category, Class & Work Type分组的工程报告。但我需要以 ID 排序显示报告的详细信息,而不是按 3 级字母排序。 我不确定您所说的按 id 排序的分组项目是什么意思。字段 2 和字段 3 怎么样?我们需要一张想要的结果的图片。在字里行间阅读我开始认为您可能正在寻找交叉表。 如果您想按这 3 个级别进行分组,则不能按 ID 进行整体排序。它确实按第三组中的 ID 排序。如果您希望 ID 在字段 1 下排序,则不能对字段 2 和 3 进行分组。正如@mazoula 所说,编辑问题以说明您想要实现的目标。 【参考方案1】:似乎 sort1 用于按 Field1 中包含的最低 ID 对 field1 进行排序,对于 sort2 和 sort3 以此类推。在这一点上,似乎按 ID 或 Field4 排序在按 field3 排序之前,所以在 sort3 之前按 id 排序。
报告记录来源:
报告设计:
报告输出:
【讨论】:
很遗憾,“Field4”与“ID”无关(我用相同的ID命名以表明它没有排序)。 “Field4”&子序列字段可以是真实数据表中的任意数据。 使用生成表查询将查询及其计算字段转换为表可能要快得多。然后按 ID 而不是 field4 运行解决方案过滤。 我找到了这种延迟的解决方案,我创建了一个仅包含“Ser”和要排序的字段(sorter1,2,3)的查询,然后通过“Ser”将其与主查询链接 【参考方案2】:正如我所想,我发现我必须将 Sorter2 和 Sorter3 限制如下:
Sorter2: CInt(DMin("ID","[Master]","Field2='" & [Field2] & "'And ID >=" _
& DMin("ID","[Master]","Field1='" & [Field1] & "'")))
Sorter3: CInt(DMin("ID","[Master]",("Field3='" & [Field3] & "' And ID >=" _
& DMin("ID","[Master]","Field2='" & [Field2] & "'And ID >=" _
& DMin("ID","[Master]","Field1='" & [Field1] & "'")))))
感谢您的助手。
【讨论】:
以上是关于按 ID 对多级分组访问报告进行排序的主要内容,如果未能解决你的问题,请参考以下文章