【问题标题】:SSRS Report Date Range should limit Only 30 daysSSRS 报告日期范围应仅限 30 天
【发布时间】:2020-01-31 22:07:17
【问题描述】:

我是 SSRS 的新手,我必须使用 1. Startdate 和 Enddate 只能相隔 30 天,它应该会抛出错误消息“Startdate 和 Enddate 必须相隔小于 30 天” 2. 不能是未来的日期。

提前致谢。

日期:2020 年 2 月 18 日:

嗨,这个过去曾工作过并且已部署,但突然间它开始抛出错误。 在 Tablix 属性中,我必须检查这 3 个条件 =IIF(DATEDIFF("d", Parameters!startDate.Value, Parameters!endDate.Value) > 30 AND Parameters!startDate.Value > Today() AndAlso Parameters!endDate.Value > Today() AND Parameters!startDate.Value >= Parameters!endDate.Value, True,False) 。如果我选择结束日期作为今天的日期,它会抛出一条消息,但它也会显示数据。请帮我。它工作得更早,它过去只显示日期是未来日期的消息。现在它也在显示数据。我不希望显示数据。 TIA。

【问题讨论】:

  • 你好,你似乎要求别人做你的工作。请显示更多详细信息,例如代码和要解决的问题。如果没有比报告服务更精确的标签,请提供指向您正在谈论的工具的官方网站的链接。谢谢
  • 没有显示自定义错误消息的内置方法。如果日期相隔超过 30 天,您可以隐藏表格并显示带有 Startdate and Enddate must be less than 30 days apart 消息的文本框。 =IIF(DATEDIFF("d", Parmeters!START_DATE.Value, Parmeters!START_DATE.Value) >= 30, True, False)
  • 感谢您的回复。即使我选择超过 30 天,我也正在获取数据,并且它正在显示来自文本框的消息:“开始日期和结束日期必须相隔不到 30 天”。如何限制不显示数据。 TIA。
  • 要隐藏表格(或任何对象),您可以使用 Hidden 属性。将其设置为 True 以隐藏或 False 以显示表格。对消息使用类似的消息,但将 True 和 False 切换。 =IIF(DATEDIFF("d", Parmeters!START_DATE.Value, Parmeters!START_DATE.Value) >= 30, True, False)
  • 非常感谢,它成功了。对于未来的日期,我检查如下 Parameters!START_DATE.Value

标签: reporting-services


【解决方案1】:

创建两个参数 startdate 和 enddate,对于 startdate,使用以下 CTE 创建数据集:

;with dates ([startDate]) as (
Select convert(date,DateAdd("d",-60,(getdate()))) as [startDate] -- looks up todays date and subtracts 60 days
union all 
Select dateadd(day, 1, [startDate])
from dates
where [startDate] <= getdate() -- limits date not to be in the future 

) 选择 [开始日期] 从日期 option (maxrecursion 32767) -- 不要忘记使用 maxrecursion 选项!

这将是您的 startdate 参数的可用值。

对于 enddate,使用以下 CTE 创建数据集:

; WITH dates([EndDate]) AS (SELECT CONVERT(date, DateAdd([d], - 59, (getdate()))) AS [EndDate]

联合所有 选择日期添加(天,1,[结束日期]) 从日期 WHERE [EndDate]

这将是您的 enddate 参数的可用值。然后您需要应用/添加两个过滤器:

[结束日期] > [@startdate]

[EndDate]

这两个参数将两个日期范围限制在彼此之间 30 天内,并且不能是将来,尽管永远不需要显示任何错误消息。

【讨论】:

    【解决方案2】:

    您可以通过各种技术获取参数的日期范围,但并非所有技术都满足所有条件。 现在,我的想法可以解决未来日期问题和日期范围问题。 您创建 4 个参数,即 Date、End、Start、EndRange

    1.日期:选择名称日期、数据类型日期/时间和可见。没有可用和默认值。

    2.结束:选择名称结束、数据类型日期/时间和可见。没有可用值,但单击默认值,选择指定值,然后单击添加按钮。 您将看到一个空白文本区域,该区域的末尾您将看到一个函数(Fx)符号。单击该新窗口将打开 Set expression for: Value。在那输入这个表达式:=DateAdd("d",30,Parameters!Date.Value)

    3.EndRange:选择名称EndRange、数据类型日期/时间和隐藏。没有可用值,但单击默认值,选择指定值,然后单击添加按钮。 您将看到一个空白文本区域,该区域的末尾您将看到一个函数(Fx)符号。单击该新窗口将打开 Set expression for: Value。在那输入这个表达式: =iif(Parameters!End.Value > DateAdd("d",5,Parameters!Date.Value), DateAdd("d",5,Parameters!Date.Value), iif(参数!End.Value > Today(),Today(),Parameters!End.Value))

    4.开始:选择名称开始、数据类型日期/时间和隐藏。没有可用值,但单击默认值,选择指定值,然后单击添加按钮。 您将看到一个空白文本区域,该区域的末尾您将看到一个函数(Fx)符号。单击该新窗口将打开 Set expression for: Value。在那输入这个表达式:=DateAdd("d",0,Parameters!Date.Value)

    另外,在存储过程或查询中,声明两个参数,

    1. @Date 日期时间,
    2. @EndRange 日期时间 然后在 where 条件下输入, [Column_Name] >= @Date 和 [Column_Name]

    现在,您已准备好查看此日期范围报告。 例如,我创建了包含开始日期、用户输入的结束日期和默认系统选择的 5 天范围的实际结束日期的 5 天范围报告。

    场景 1: User selects Start Date and End Date within 5 days range.

    场景 2: User Enter Start Date but end date is in future, system will limit the end date to current date

    场景 3: User Enter Start and End Date within the date range, then as normal dates.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多