首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试在我的SSRS报告中显示工作日日历日期和工作日

尝试在我的SSRS报告中显示工作日日历日期和工作日
EN

Stack Overflow用户
提问于 2014-03-10 22:54:32
回答 1查看 854关注 0票数 1

我有一个报告,其中的工作日(因此没有周末)是根据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月)的非周末日历日期?

EN

回答 1

Stack Overflow用户

发布于 2014-03-11 03:51:56

我从您的问题中看到,您正在尝试使用SSRS表达式来实现您想要的结果。但是,当涉及到动态过滤时,我发现自己转向SQL来完成大部分工作。考虑到这一点,我认为这将实现您的预期目标。

下面的查询将创建一个列表,其中包含某一年的所有日期(等于基于系统时间的当前年份)。然后,它将为您提供整数形式的星期几和一年中的日期。此外,它还会过滤掉所有的周六和周日,只留下工作日。最后,它会计算我们现在所处的季度(我使用的是按日历年计算的季度,但您可以很容易地将其调整为滚动季度或您的会计年度季度),以此作为过滤当前季度天数列表的一种方式。如果你有什么问题,请告诉我。

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22303583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档