基于日期字段SSRS的动态分组

时间:2017-12-01 14:54:45

标签: sql reporting-services ssrs-2008

在我的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   

任何形式的提示都会非常感激!

1 个答案:

答案 0 :(得分:0)

这只是解决方案的一部分。首先在报告中生成所需的日期时段,然后针对您的表格进行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)

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

  

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]),此时我们无需查看下一行。

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