我试图在微软的SSRS中为值参数编写一个表达式但是很挣扎。基本上我们有一个报告,从0800开始运行24小时,然后在下一个0800小时再次重置报告,在24小时内多次提取报告。
我认为我理解逻辑,但我并不足以将其转移到代码中。类似的东西:
If today's time => 0800 Then
Extract values from today's time 0800 onwards
Else If today's time < 0800 Then
Extract values from today + yesterday after 0800
答案 0 :(得分:1)
我认为您会想要类似于下面的内容,但如果没有关于报告值的更多信息,您将不得不将该部分分成几部分:
=Iif((FormatDateTime(Now(),HH:mm)) >= "0800",
TodaysTimeOnwards.Value,
Iif((FormatDateTime(Now(),HH:mm)) < "0800", YesterdayTime.Value, Nothing)
答案 1 :(得分:0)
我相信这就是你所描述的
开始:=Now().AddHours(-8).Date.AddHours(8)
结束:=Now().AddHours(-8).Date.AddHours(8).AddDays(1).AddSeconds(-1)
答案 2 :(得分:0)
您是指根据报告执行时间提取值以获取不同的数据集值吗?或者只是在报告中打印一个时间值?
如果是第一个,你将组织你的代码,使用sql内联或存储过程no作为ssrs表达式我认为但是给定@DateFrom和@DateTo参数给定值取决于执行的时间。
示例:
1 - &gt;在数据源功能中,这将是您需要检索数据的SQL
SELECT * FROM DataSet WHERE Time BETWEEN @DateFrom AND @DateTo
2 - &gt;根据执行时间给予@DateFrom和@DateTo适当的值。
a)通过其功能菜单
中的表达式设置@DateFrom默认值 - @ DateFrom:“=Iif(DatePart("h",now())>8,DateAdd("hh",+8,DateAdd("dd",DateDiff("dd",0,now()),0)),DateAdd("hh",+8,DateAdd("dd",DateDiff("dd",0,getdate())-1,0)))
”
- @ DateTo:
“=Iif(DatePart("h",now())>8,now(),DateAdd("hh",+8,DateAdd("dd",DateDiff("dd",0,now()),0)))
”
b)通过在其特征值中配置它的查询值设置@DateFrom默认值。
为@DateFrom创建一个新的数据源,如下所示:
IF DatePart(hh,getdate()) >= 8
BEGIN
SELECT DateAdd(hh,+8,DateAdd(dd,DateDiff(dd,0,getdate()),0))
ELSE
SELECT DateAdd(hh,+8,DateAdd(dd,DateDiff(dd,0,getdate())-1,0))
然后像这样为@DateTo创建一个新的数据源:
IF DatePart(hh,getdate()) >= 8
BEGIN
SELECT GetDate()
ELSE
SELECT DateAdd(hh,+8,DateAdd(dd,DateDiff(dd,0,getdate()),0))