【问题标题】:Sort by month value in ssrs按 ssrs 中的月份值排序
【发布时间】:2015-11-16 11:38:47
【问题描述】:

我在 SSRS 中有一个非常尴尬的设置,带有自定义分组选项(即按办公室、卖方、买方等)。例如,用户可以按年分组项目,然后按月分组。那么报告的结果是:

Gr1. | Gr2.
2015 | April
2015 | August
2015 | February
2015 | January 
and so on... 

因此,这两列都按字母顺序排列,这对于所有自定义分组选项都很有效,但月份 - 它应该有自己的排序逻辑。我该如何实现呢?

【问题讨论】:

  • 这些数据是如何从数据库中来的——你只是返回名称的字符串还是实际的日期本身?
  • 我返回的是月份名称,因为这是数据的分组依据
  • 如下所述,无论按什么信息分组,最好返回一个存储为该字段日期的值
  • 请参阅下面的更新答案和替代建议

标签: sql reporting-services ssrs-2008 reportbuilder


【解决方案1】:

您应该尝试以本机类型从数据库返回所有信息。与其将月份名称返回为“January”、“February”等,不如返回2015010120150201(或任何适合您环境的默认日期格式)

然后您可以更改报告中类型的格式。例如设置单元格返回

=MonthName(Month(Fields!myDate.Value),False)

返回任意日期的月份名称。然后,SSRS 会在订购时知道如何将日期按正确的顺序排列。

替代

假设您不想编辑返回数据的方式,您可以在报表后面的代码中使用 Select 语句手动提供月份的顺序。

假设数据集

Month      Val
---------- ---
January     1
February    2
March       3

按月份排序时返回以下内容

相反,将以下代码插入到您的报告中(右键单击报告区域,选择报告属性,然后选择代码)

public function MonthNumber(MonthName AS String) AS Integer
    Dim MonthNum AS Integer = 0

    Select Case MonthName    
        Case "January"
            MonthNum = 1
        Case "February"
            MonthNum = 2
        Case "March"
            MonthNum = 3
    End Select

    return MonthNum
end function

然后设置要排序的组属性

=Code.MonthNumber(Fields!Month.Value)

给出以下结果

这是因为在订购套装时,它不是只查看报告的名称,而是通过代码传递名称,这有效地告诉报告每个月分配哪个编号。然后按此值而不是月份名称对其进行排序。

希望这对您有用。如果您还有任何问题,请告诉我。

【讨论】:

  • 这并不完全是一个答案,但将我推向了正确的方向。最终,我使用了您的第二个概念,并编写了用于后处理一些用于排序的参数的外部函数,其中月份名称被替换为字母(Jan -> 'a',Feb -> 'b' 等等)。这样,用于在不同分组属性匹配和月份之间排序的数据类型以适当的顺序显示。谢谢。
猜你喜欢
  • 2014-01-25
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多