在我的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
任何形式的提示都会非常感激!
答案 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])
,此时我们无需查看下一行。
如果有人找到更直接的解决方案,请告诉我。