【问题标题】:Trying to display weekday calendar dates with business days on my SSRS report尝试在我的 SSRS 报告中显示工作日日历日期和工作日
【发布时间】:2014-03-10 14:54:31
【问题描述】:

我有一份报告,其中我根据 SQL 查询中事件发生的日历日期计算了工作日(因此没有周末)。即,

Date_Completed:2014 年 1 月 22 日( Day_completed = 16

现在,我正在尝试在 SSRS 中创建一个类似日历的报告,以跟踪事件日期。我想将工作日和相应的日历日期作为我的列标题,即

1
2014 年 1 月 1 日

2
2014 年 1 月 2 日

所以我的问题是事件不会在每个工作日发生,所以我在查询中创建了一堆虚拟值(基本上联合所有 1-40 个工作日......我将努力使这个动态在未来)。

所以现在我有 1-40 个工作日列,并且我的值与它们正确对齐...但是,日历日期不匹配,因为我不知道如何让 SSRS 在我的列标题中跳过周末日期...

我尝试了类似的方法:

=iif((weekday(dateadd("d",Fields!period_complete.Value,Fields!period_dt.Value))1 或工作日(dateadd("d",Fields!period_complete.Value,Fields!period_dt.Value))7), dateadd("d",Fields!period_complete.Value,Fields!period_dt.Value),"")

但这没有任何作用。有人对我如何让 SSRS 吐出一个季度(1 月至 3 月)的非周末日历日期有任何想法吗?

【问题讨论】:

    标签: reporting-services


    【解决方案1】:

    我从您的问题中看到,您正在尝试使用 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-16
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多