将条形图对象插入 Microsoft Access 表单可以以我在首次设计基础查询时未预设的排序顺序显示数据。
我可以看到,不需要的排序顺序出现在一个固定的、不可编辑的Transformed Row Source
属性中,并且会覆盖该Row Source
属性。
`Row Source`: SELECT * FROM SumOfUtilizationByPersonnelAndDate WHERE [Month] >= 7 AND [Month] <= 7 AND [Year] >= 2019 AND [Year] <= 2019 ORDER BY [SumOfUtilization] DESC , [Created By] DESC;
`Transformed Row Source`: SELECT [Created By], Sum([SumOfUtilization]) AS [SumOfSumOfUtilization] FROM (SELECT * FROM SumOfUtilizationByPersonnelAndDate WHERE [Month] >= 7 AND [Month] <= 7 AND [Year] >= 2019 AND [Year] <= 2019 ORDER BY [SumOfUtilization] DESC , [Created By] DESC) GROUP BY [Created By] ORDER BY [Created By]
一旦我在属性中选择了准备好的、正确排序的查询Row Source
,就会立即导致Transformed Row Source
属性被写入 - 并且其中的 ORDER BY 子句似乎有自己的想法,选择我不想要的列和排序顺序。
此外,该Transformed Row Source
属性完全不可编辑!尝试Transformed Row Source
按我想要的方式手动编辑该属性的 SQL 会导致错误消息,
“您无法为该对象赋值。
该对象可能是只读表单上的控件。
该对象可能位于在设计视图中打开的表单上。
对于该字段来说,该值可能太大。”
我该怎么做才能让此条形图按我想要的方式对数据进行排序?查询确实在查看模式下以正确的顺序显示数据。为什么条形图不能做同样的事情?
我尝试过条形图簇、条形图堆叠和条形图堆叠 100% 图表类型,但都遇到了同样的问题。请注意,我确实需要将其保留为条形图。
更新:截至 2019 年 9 月 17 日,以下评论均无帮助,只是让我了解到 Microsoft Access 最近推出了与传统图表不同的现代图表。我使用的是现代图表。截至 9 月 17 日的评论仅让我尝试将其重新创建为传统图表,结果并没有更好,反而有更多缺点。
更新2(2019 年 9 月 21 日):现在我尝试删除行源查询中的 ORDER BY 子句,但排序仍然设置错误。不过,通过这个练习,我了解到轴(类别)图表设置下的数据源属性定义/选择了 ORDER BY 字段列表——它结合了图表中的排序顺序和类别数据选择——这确实是一个非常不幸的结合,因为我并不想这样!无论我检查轴类别的哪个字段,它们都会出现在转换后的行源 ORDER BY 子句中,并且还会被转换为我的类别轴的一部分!不好!我希望创建者字段仅是轴(类别),并将排序顺序 (ORDER BY) 子句设置为完全独立的值,即 SumOfUtilization!这似乎是 Microsoft 的一个错误,我不确定是否存在解决方法!我目前已通过 Microsoft Access 菜单向 Microsoft 提交了反馈。
答案1
您正在按个人排序“利用率总和”,但呈现/选择“Sum([SumOfUtilization])”。
为什么不直接在原始查询中添加 GROUP BY 子句(到 [Created By] 字段)并通过“Sum([SumOfUtilization])”进行聚合,以便 ORDER BY 与 Axis 匹配?
SELECT [Created By], Sum([SumOfUtilization]) AS [SumOfSumOfUtilization] FROM SumOfUtilizationByPersonnelAndDate WHERE [Month] >= 7 AND [Month] <= 7 AND [Year] >= 2019 AND [Year] <= 2019 GROUP BY [Created By] ORDER BY Sum([SumOfUtilization]) DESC , [Created By] DESC;
您可以通过重新声明该字段的聚合(“ORDER BY Sum([SumOfUtilization])”),或通过在 ORDER BY 子句(“ORDER BY 2”)中引用它的选择序数来对聚合值进行 ORDER BY 。
或者,您可以将原始查询作为子查询进行查询,执行上面显示的相同的 GROUP BY 聚合。
如果需要,在正确组织数据后,您可以通过多种方式交换轴显示。具体来说,您可以调整图表显示设置、交换主轴/次轴,或操纵查询中的 SELECT 顺序。
细节
我记得,嵌入的 ORDER BY 子句会覆盖所有对象级排序。一旦 ORDER BY 超出 SQL 的范围,表示对象便可以应用自己的排序顺序。
要覆盖此设置,请将原始查询用作子查询的数据源,并将其用作实际数据源。这就是图表对象在这里为您执行的操作。
图表 API 参考:“https://docs.microsoft.com/en-us/office/vba/api/access.chart.transformedrowsource“
此 [Transformed Row Source] 字符串是从组合的RowSource 属性和选定轴字段。
查看您的行源选择,看起来您选择的顺序就是图表默认的 AxisOrder。您可以明确选择您的值来按照您想要的方式手动对图表进行排序。
比如,SELECT[SumOfUtilization],[创建者]...
`Row Source`: SELECT [SumOfUtilization], [Created By], * FROM SumOfUtilizationByPersonnelAndDate WHERE [Month] >= 7 AND [Month] <= 7 AND [Year] >= 2019 AND [Year] <= 2019 ORDER BY [SumOfUtilization] DESC , [Created By] DESC;
編輯:清理。
答案2
顺便说一句,由于时间紧迫,Access 中没有令人满意的解决方案,我最终使用 Excel 的“获取数据”按钮创建一个链接到 Access 查询的 Excel 电子表格,在 Excel 中生成一个数据透视表,并根据该数据透视表创建一个图表。Excel 的图表功能比 Access 中目前提供的功能更出色、更强大,我的排序顺序也如我所愿。这不是我所希望的解决方案,因为我现在强迫我的客户使用两个独立的 Office 产品,但它确实有效。
附言:感谢所有试图提供帮助的人。我失去了 50 点声誉,如果有人能帮助我,我很乐意将其作为赏金赠送给他们,但根据 superuser.com 的规定,时间已经到了。现在我无法将这些点数分配给任何人,而且我也拿不回来了。
答案3
我发现,在图表属性中,当我选择轴时,有一些属性可以更改(注意,所选选项右侧会出现向下的小箭头。很容易错过),然后当我返回到那个转换项时(我为此花了好几个小时,很沮丧),我可以看到它现在已经更新了自己,可以做我一直想要做的事情。它仍在转换,但现在转换的方式模仿了我的底层查询,所以最终没有什么区别。