按周当前过滤矩阵

时间:2012-12-13 18:53:01

标签: sql-server reporting-services reportbuilder

我正在尝试在Report Builder 3.0中构建一个报告,该报告将从周一开始的每个工作周填充列标题,并在该周中每天的日期填充。然后,报告将对每个日期显示在给定行条目的“收到日期”字段中进行计数(请参阅下面的图1 )。

我想知道如何在报表生成器中创建过滤器或参数,以便仅显示当前报表的日期,即使报表每天运行,然后仍然可以进行计数。

图1 :Matrix Mock-up(日期为当周) enter image description here

以前我使用此代码来获取表格中的列以显示接下来的五个工作日(这在这里不起作用,因为我需要工作日才是这一周):

=IIF(6 - WeekDay(Today()) - X < 0, DateAdd("d", X + 2, Today()), 
DateAdd("d", X, Today()))

3 个答案:

答案 0 :(得分:0)

最简单的方法是让SQL为您做繁重的工作,并以最方便报告的方式准备数据。所以我们想做的是获取与本周工作日相关的所有数据 - 即从本周一到本周五的任何事情:

SELECT PersonId, SomeDate
FROM MyTable
WHERE SomeDate >= DateAdd('d', 0 - (WeekDay(Today())-2), Today())  // Monday
AND SomeDate <=  DateAdd('d', 0 - (WeekDay(Today())-6), Today())  // Friday

然后你只需将它输入你的矩阵,按人和日期分组,你就可以了。

答案 1 :(得分:0)

我没有使用该工具,但如果您将数据集或表格中的过滤器添加到基本上:

X > today() - day of the week --this will get the date for the sunday

并且

X < today() + (6 - day of the week) --this will get the date for saturaday

这将确保您的数据在星期一和星期五之间。

答案 2 :(得分:0)

Declare @DateFrm datetime= N'2014-11-04' 
Select 
    [EnquiryTypeValue],
    [CallerValue],
    Created  
FROM [BPU].[dbo].[vwEnquiry]  
WHERE 
    CAST(Created as date) between DATEADD(ww, DATEDIFF(ww,0,@DateFrm), 0) 
        and DATEADD(ww, DATEDIFF(ww,0,@DateFrm), 6)