我有一个报告,其中的工作日(因此没有周末)是根据SQL查询中发生事件的日历日期计算的。也就是说,
Date_Completed: 2014年1月22日(<-来自系统表)
Day_completed = 16 <-我在查询中计算的值。
现在,我正在尝试在SSRS中创建一个类似日历的报告,用于跟踪事件日期。我想将营业日和相应的日历日期作为我的列标题,例如
1
2014年1月1日
2
2014年1月2日
所以我的问题是这些事件并不是在每个工作日都会发生,所以我在我的查询中创建了一堆虚拟值(基本上是所有1-40个工作日的联合...我将在未来努力使其动态化)。
所以现在我有了1-40个工作日的列,并且我的值与它们的properly...however对齐,日历日期不匹配,因为我不知道如何让SSRS跳过列标题中的周末日期……
我试过这样的方法:
=iif((weekday(dateadd("d",字段!period_complete.Value,字段!period_dt.Value))<>1或weekday(dateadd("d",字段!period_complete.Value,字段!period_dt.Value))<>7),dateadd("d",字段!period_complete.Value,字段!period_dt.Value),"")
但这并没有起到任何作用。有谁知道如何让SSRS列出一个季度(1月至3月)的非周末日历日期?
发布于 2014-03-11 03:51:56
我从您的问题中看到,您正在尝试使用SSRS表达式来实现您想要的结果。但是,当涉及到动态过滤时,我发现自己转向SQL来完成大部分工作。考虑到这一点,我认为这将实现您的预期目标。
下面的查询将创建一个列表,其中包含某一年的所有日期(等于基于系统时间的当前年份)。然后,它将为您提供整数形式的星期几和一年中的日期。此外,它还会过滤掉所有的周六和周日,只留下工作日。最后,它会计算我们现在所处的季度(我使用的是按日历年计算的季度,但您可以很容易地将其调整为滚动季度或您的会计年度季度),以此作为过滤当前季度天数列表的一种方式。如果你有什么问题,请告诉我。
Declare @Start date = Case
When Month(getdate()) <= 3
Then '01/01/' + CAST(YEAR(getdate()) as varchar(4))
When Month(getdate()) <= 6
Then '04/01/' + CAST(YEAR(getdate()) as varchar(4))
When Month(getdate()) <= 9
Then '07/01/' + CAST(YEAR(getdate()) as varchar(4))
Else '10/01/' + CAST(YEAR(getdate()) as varchar(4))
End;
Declare @End date = Case
When Month(getdate()) <= 3
Then '03/31/' + CAST(YEAR(getdate()) as varchar(4))
When Month(getdate()) <= 6
Then '6/30/' + CAST(YEAR(getdate()) as varchar(4))
When Month(getdate()) <= 9
Then '09/30/' + CAST(YEAR(getdate()) as varchar(4))
Else '12/31/' + CAST(YEAR(getdate()) as varchar(4))
End;
Set NoCount on;
With All_Dates as (
Select CAST('01/01/' + CAST(YEAR(getdate()) as varchar(4)) as Date) as Dates
Union All
Select DATEADD(day,1,Dates) as Dates
From All_Dates
Where Dates < '12/31/' + CAST(YEAR(getdate()) as varchar(4))
)
Select DATEPART(DAYOFYEAR,Dates) as Day_of_Year
, DATEPART(WEEKDAY,Dates) as Day_of_Week
, Dates
From All_Dates
Where DATEPART(WEEKDAY,Dates) between 2 and 6
and Dates >= @Start
and Dates <= @End
Option (MaxRecursion 400);https://stackoverflow.com/questions/22303583
复制相似问题