2016-01-22 205 views
1

我目前正在建立SSRS的年度至今报告。我正在寻找在日历选择中编辑默认的“FROM”日期。获取上个月的年份(1月1日)

我期待检索前一个月的1月1日。例如:

(如果是2016年2月16日..结果应该是2016年1月1日

如果是2016年1月10日..结果应该是1/1/2015

我建立了这个检索1月1日的当前年份,但是如果我们在1月份会导致问题,因为我需要它检索上个月的年份(在这种情况下,它将是2015年,而不是2016年)。

谢谢!

+0

也许这样的事情? 年份(DateAdd(m,-1,Parameter!myParameter.Value)) – mxix

+0

请谷歌了解SSRS中的表达式。你可以为你的参数的默认值写一个表达式。 –

回答

1

试试这个,它应该工作

=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)) 
) 

让我知道,如果这有助于。

+0

我在我的日期参数中测试了这个,但结果是2015年12月1日。我正在寻找基于前一个月的1/1/2015。谢谢! – Byronyk

+0

@Byronyk,查看我的版本。 –

+0

你的修改使我看到2015年1月1日它应该在1月份,但是当我将系统时钟更改为2月份时,我仍然会看到1/1/2015。当此报告正在读取二次系统时间时,应该在2016年1月1日前吐出,因为上一个月的年份现在将变为2016年。 – Byronyk

0

我们要使用日期序列,其具有形式上的 = 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 
0
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) 
相关问题