我目前正在建立SSRS的年度至今报告。我正在寻找在日历选择中编辑默认的“FROM”日期。获取上个月的年份(1月1日)
我期待检索前一个月的1月1日。例如:
(如果是2016年2月16日..结果应该是2016年1月1日
如果是2016年1月10日..结果应该是1/1/2015 )
我建立了这个检索1月1日的当前年份,但是如果我们在1月份会导致问题,因为我需要它检索上个月的年份(在这种情况下,它将是2015年,而不是2016年)。
谢谢!
我目前正在建立SSRS的年度至今报告。我正在寻找在日历选择中编辑默认的“FROM”日期。获取上个月的年份(1月1日)
我期待检索前一个月的1月1日。例如:
(如果是2016年2月16日..结果应该是2016年1月1日
如果是2016年1月10日..结果应该是1/1/2015 )
我建立了这个检索1月1日的当前年份,但是如果我们在1月份会导致问题,因为我需要它检索上个月的年份(在这种情况下,它将是2015年,而不是2016年)。
谢谢!
试试这个,它应该工作
=DateAdd(DateInterval.Month,-1,DateSerial(Year(Today), Month(Today), 1))
更新:基于您的评论我创建这个表达式
。它没有测试,但应该工作。
=IIF(Today.Month>1,
DateAdd(DateInterval.Month,-1,DateSerial(Year(Today), Month(Today), 1)),
DateAdd(DateInterval.Year,-1,DateSerial(Year(Today), Month(Today), 1))
)
让我知道,如果这有助于。
我们要使用日期序列,其具有形式上的 = DateSerial(YYYY,MM,DD) 月是始终一月 的一天总是第一 如果月份是一月,它的最后一年。否则,这是今年。 因此,假设我们有一个参数调用日期的SSRS报告中,我们可以为您的月份日期创建一个新的字段,如下所示:
=iif(Month(Parameters!Date.Value)=1,
dateserial(Year(Parameters!Date.Value)-1,1,1),
dateserial(Year(Parameters!Date.Value),1,1))
,如果你想这样做在T-SQL查询(版本2012)或更高版本:
case when month(@DATE) = 1
then DATEFROMPARTS(YEAR(@DATE)-1,1,1)
else DATEFROMPARTS(YEAR(@DATE),1,1)
end
OR,在早期版本
CASE WHEN MONTH(@DATE) = 1
THEN CAST(CAST((YEAR(@DATE)-1)*10000 + 101 AS CHAR(8)) AS DATE)
ELSE CAST(CAST((YEAR(@DATE)*10000+ 101) AS CHAR(8)) AS DATE)
END
select cast(cast(year(dateadd(mm, -1,getdate())) as varchar)+'-01-01' as date)
更换GETDATE( )与此基础上计算的任何领域。
来进行测试:
select cast(cast(year(dateadd(mm, -1,'2015-01-22')) as varchar)+'-01-01' as date)
select cast(cast(year(dateadd(mm, -1,'2016-02-01')) as varchar)+'-01-01' as date)
select cast(cast(year(dateadd(mm, -1,'2015-12-12')) as varchar)+'-01-01' as date)
也许这样的事情? 年份(DateAdd(m,-1,Parameter!myParameter.Value)) – mxix
请谷歌了解SSRS中的表达式。你可以为你的参数的默认值写一个表达式。 –