SSRS报表基于当前月获取去年上一个月对应的每天的数据

0
本人之前开发了一个报表,数据源来自于AS。
报表中有参数Month_Year,由于cube数据更新时间的原因,我们需要将报表数据展示为当前月第一天到当前日期前一天(OrderDate)的数据(例如:当前日期是5月29号,则显示5月1号到28号的数据)。
报表中有两个chart和两个table,通过写条件,把orderDate之后的数据全部隐藏了(不展示当天及之后的数据)。
-----------------------------------------------------bug---------------------------------------------------------------
然而在每月一号发送订阅给客户时,客户那边发现没有任何数据,因为每个月的第一天实际上应该展示上一月份每一天的数据,现在我需要加条件判断当前日期是否是一号,如果是一号,则显示上月数据。
我添加了一个新的参数Month_Year2,级联Month_Year,如果当前日期是一号,则Month_Year2值为上个月,然后我尝试把这个参数替换之前的Month_Year,但我发现虽然Month_Year2有变化,但它并不会对数据有任何影响(已经在DataSet的properties下参数中添加),我想应该是Month_Year2是一个字符串,并不是cube中同Month_Year一样的维度。所以这条路放弃了= =
(如果这个能解决,我将省去好多后续工作,但理想虽然丰满。现实却太过骨感)
-----------------------------------------------------------------------------------------------------------------------
现在,我用最笨最工作量大的方法来尝试解决这个bug。
给每一个measure添加条件,判断如果当前日期是一号,则取上一个月的值。
如果是MTD之类的不涉及Date只涉及Month的值都好搞定,但是涉及Date之后,就复杂了好多= =
例如,我有一个对应当前日期求去年当月每天销售额的量LY Daily Sales,如果今天是六月一号,报表中应该显示五月1号到31号所有LY Daily Sales,实际上他展示的是六月份去年的值。而另一个量——当前日期的销售额CY Daily Sales,则显示为空(因为手动隐藏了)。而正确的逻辑该是显示整个五月份每天的值。
-----------------------------------------------------------------------------------------------------------------------
这是别人写的LY Daily Sales:
([Measures].[销售额],[Time].[Date].CURRENTMEMBER.Lag(DATEDIFF("D",DATEADD("YYYY",-1,CDATE(NOW())),CDATE(NOW()))))
这是我写的,加了判断条件的CY Daily Sales:
iif([Time].[Date].member_key>format(now()-1,"yyyyMMdd"),null,[Measures].[销售额])
(这个不对,如果客户选择了之前的月份,这里不该置为空的,应该展示那个月的所有数据,我会修改这个逻辑先判断参数是不是选的当前月的)

我现在想要LY Daily Sales Last Month= =
初级菜鸟真没法了,求助各位大神
或者给点idea让我有个方向去研究
(有一点忘了说,如果客户选择了之前的月份,就会显示那个月所有的数据,一点问题没有。如果今天是一号,我也应该显示之前,也就是上一个月的所有数据,但是参数Month_Year影响了table和chart,而我之前写的条件隐藏了今天之后的所有数据,他不显示任何东西,所以这个逻辑是不对的)
-----------------------------------------------------------------------------------------------------------------------
因为报表的需求太复杂,我已经改了不下百次了,解释这个需求好像也有点混乱,为了安全性和简洁点,我也省略了很多别的信息,如果有任何想法请留言,我感激不尽,不然我天天加班都没进展也是很心累的,压力山大啊T^T
 
-----------------------------------------------------------------------------------------------------------------------
-----------------------------------------不算解决方案的解决方案 1------------------------------------------------------
因为客户那边也知道在measures上修改逻辑很不现实,so,最终采用了在make subscription的时候做了点小手脚,每个月的第一天给客户发送报表的时候把参数选为上个月,但是新的问题来了,之前做的订阅是批量的,如果针对于一号要做独立的订阅的话,每个月都要在月底为下月一号重新指定订阅。
 
-----------------------------------------不算解决方案的解决方案 2------------------------------------------------------
在报表上修改Month_Year的默认值,如果当前日期是一号则设置为上个月,否则则为当前月。(这样就不用制定新的订阅了= =)
 
(毕竟我们不能获得当前月一号到上个月最后一天的数据,对吧~逻辑就是错的嘛)
已邀请:
0

- 取是能力,舍是境界 2016-06-06 回答

这种需求在AS里可以用同期函数处理吧.

要回复问题请先登录注册