【问题标题】:Dynamic Grouping based on date field SSRS基于日期字段SSRS的动态分组
【发布时间】:2017-12-01 14:54:45
【问题描述】:

在我的 SSRS 报告中,其数据集的日期字段如下

数据集返回以下类型的数据(只是示例)

Voucher Amount  Date
R3221    € 3,223.00     1-Dec-17
R3222    € 123.00   28-Nov-17
R3223    € 1,233.00     19-Oct-17
R3224    € 442.00   27-Sep-17
R3225    € 123.00   17-Nov-17
R3226    € 423.00   29-Oct-17
R3227    € 1,234.00     8-Oct-17

我想知道的是如何显示这些按凭证和截止日期分组的数据

用户应该能够选择开始日期和周期类型(日、周、月)以及两列之间的间隔(例如 3、10 或 30 或任何其他数字)

所以用户应该能够选择周期类型,例如,如果他选择天和间隔为 3,那么报告应该显示

**voucher       start date      <Dynamic grouping columns based on the selection criteria>**

    R3221
    R3222
    R3223
    R3224
    R3225
    R3226
    R3227   

任何形式的提示将不胜感激!

【问题讨论】:

  • 您如何选择要显示的列?
  • 您需要创建一个日期列表。 stackoverflow.com/questions/1378593/… 然后旋转
  • 如果您退回了每张优惠券都在您的自定义范围内的存储桶,这将非常容易。也就是说,如果您可以修改报告存储过程并发送开始日期和偏移量,那么您可以将计算出的偏移量与您的数据一起返回,并在该字段上简单地按列分组。这将是最简单的方法。

标签: sql reporting-services ssrs-2008


【解决方案1】:

这只是解决方案的一部分。首先在报告中生成您想要的日期期间,然后对您的表格、过滤器和分组执行LEFT JOIN

declare @dateFrom date
declare @periodInDays int
declare @periods int --how many periods of 10 days
set @periodInDays = 10; 
set @periods = 15; --how many periods of 10 days
set @dateFrom = getdate();

with [dates] as (
    select @dateFrom as date --start
    union all
    select dateadd(day, @periodInDays, [date]) as date
    from [dates]
    where [date] < DATEADD(day, @periodInDays * @periods, @dateFrom) --end
)
select [date]
from [dates]
option (maxrecursion 0)

在此示例中,每 10 天返回 16 个日期(每行 1 个),从开始日期 (2017-12-01) 开始

2017-12-01, 2017-12-11, 2017-12-21, 2017-12-31, 2018-01-10, 2018-01-20 2018-01-30, 2018-02-09, 2018-02-19, 2018-03-01, 2018-03-11, 2018-03-21 2018-03-31、2018-04-10、2018-04-20、2018-04-30

要按期间过滤,请从上述日期表中获取开始日期,因此该期间的结束日期可以计算为DATEADD(day, @periodInDays, [date]),此时我们不需要查看下一行。

如果有人找到更直接的解决方案,请告诉我。

【讨论】:

  • 谢谢,我想它几乎接近了.. 所以你告诉我我必须更改存储过程而不是 SSRS 报告?我正在考虑开始这样的事情。Declare @periodtype varchar(200) Declare @interval int Declare @StartDate date SET @periodtype = 'Month' -- can select from month,days or weeks can be set by user SET @interval = 1 -- 10 months, or 10 week or 10 days. can be set by user SET @StartDate = getdate() -- can be set by user
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
相关资源
最近更新 更多