【问题标题】:SSRS Sorting by Year group totalSSRS 按年份组总计排序
【发布时间】:2021-01-06 22:55:31
【问题描述】:

我有一个 tablix,其中 Customer 作为行组,Month 和 Year 作为列组。销售额在数据区。我想按年份总销售额对客户进行降序排序。

我尝试了以下(伪代码)

选择 期间(YEAR(日期)和 MONTH(日期)的 CONCAT, 总和(金额), 公司

来自 [表格]

按时期和公司分组
ORDER BY Sum(Amount) Desc

我这样做是想如果我在查询中进行排序,它将按照我想要的顺序通过,但显然它首先显示的是单月销售额最高的客户,而不是最高的年份。

想一想,如果我希望报告能够跨越多年,那么我必须弄清楚要汇总哪一年,但我很乐意将报告限制为一年(由一个参数)。

当我尝试在 Sum(Fields!Amount.value, "xYear") 上对 tablix 或客户组进行排序时,我收到聚合可以包含组的错误。

【问题讨论】:

    标签: reporting-services


    【解决方案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 排序

      这是在我的脑海中完成的,所以可能会有一些基本错误,但希望足够接近你可以理解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        • 1970-01-01
        • 2014-01-25
        • 2022-08-11
        • 1970-01-01
        相关资源
        最近更新 更多