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 按年份组总计排序的主要内容,如果未能解决你的问题,请参考以下文章

核心数据按年份分组并按日期排序

XSLT,按年份排序和分组

Latex:在 Springer 类 svjour3 中,希望引用按字母顺序排序,采用作者年份格式

如何选择按其他变量排序的最小 TRUE 值

s-s-rS 仅对图表上的一个值进行分组

将组总计添加到 s-s-rS 报告的不同部分