s-s-rS 按年份组总计排序
Posted
技术标签:
【中文标题】s-s-rS 按年份组总计排序【英文标题】:s-s-rS Sorting by Year group total 【发布时间】:2021-01-06 22:55:31 【问题描述】:我有一个 tablix,其中 Customer 作为行组,Month 和 Year 作为列组。销售额在数据区。我想按年份总销售额对客户进行降序排序。
我尝试了以下(伪代码)
选择 期间(YEAR(日期)和 MONTH(日期)的 CONCAT, 总和(金额), 公司
来自 [表格]
按时期和公司分组 ORDER BY Sum(Amount) Desc
我这样做是想如果我在查询中进行排序,它将按照我想要的顺序通过,但显然它首先显示的是单月销售额最高的客户,而不是最高的年份。
想一想,如果我希望报告能够跨越多年,那么我必须弄清楚要汇总哪一年,但我很乐意将报告限制为一年(由一个参数)。
当我尝试在 Sum(Fields!Amount.value, "xYear") 上对 tablix 或客户组进行排序时,我收到聚合可以包含组的错误。
【问题讨论】:
【参考方案1】:我从 Tablix 切换到 Matrix,现在按 SUM(Fields!Amount.Value) 对客户组进行排序......有点。
它按总计而不是给定年份排序,但我现在可以忍受。也许我会添加一个默认为当前年份的参数,并尝试弄清楚如何使用它来强制排序。我想我可能必须在单独的数据集中(未显示在报告中)获取客户的年初至今总销售额。
【讨论】:
【参考方案2】:您可以通过两种方式做到这一点..(未经测试...这里是午夜...)假设您有一个参数来选择排序年份并且 Period 是一个日期 - 调整以适应...
你可以按类似的表达式排序
=SUM(
IIF(
YEAR(Fields!Period.Value) = Parameters!pSortYear.Value,
Fields!Amount.Value,
0),
"myDataSetName")
注意数据集名称必须与您的数据集名称完全匹配(区分大小写)并用双引号括起来。
或者..我通常做的是用SQL来做
SELECT Period, Company, SUM(Amount) AS Amount
INTO #data
FROM myTable
GROUP BY Period, Company
SELECT d.*, s.SortOrder
FROM #data d
JOIN (
SELECT Company, ROW_NUMBER() OVER(ORDER BY Amount DESC) as SortOrder
FROM #data
WHERE Period = @pSortYear
) s on d.Company = s.Company
然后在您的报告中您可以简单地按 SortOrder 排序
这是在我的脑海中完成的,所以可能会有一些基本错误,但希望足够接近你可以理解。
【讨论】:
以上是关于s-s-rS 按年份组总计排序的主要内容,如果未能解决你的问题,请参考以下文章