时间段同比的mdx

0
1.jpg



with
member . as
sum(
...&.&.&:...&.&.&,
.)

select
{.,.} on 0,
non empty{..members} on 1
from
where ...&.&.&:...&.&.&


where里面是通过参数传递进来的,. 里面的时间段,要通过where里面的时间去获取前一年的时间;同时也要考虑参数里的时间段跨年的情况,比如参数里传进来的有可能是:2012-12-10至2013-02-01,那么.里的时间段就是:2011-12-10至2012-02-01
已邀请:
2

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-11-28 回答

因为不方便调试代码,我用 MDX Step By Step 的 SSAS 数据库试了一下。并且可以在 SSRS Report 上参数化查询,不过你需要自己测试一下数据。

WITH MEMBER .
AS SUM(
{
-- 根据传入的参数分别取得上一年的开始时间点和结束时间点
PARALLELPERIOD(..,
1,
STRTOMEMBER(@FromDateCalendar, CONSTRAINED)
):
PARALLELPERIOD(..,
1,
STRTOMEMBER(@ToDateCalendar, CONSTRAINED)
)
},
.
)

SELECT NON EMPTY {.,
.} ON COLUMNS,
NON EMPTY { (...ALLMEMBERS ) } ON ROWS
FROM (
-- Report 传入的开始参数和结束参数
SELECT ( STRTOMEMBER(@FromDateCalendar, CONSTRAINED) : STRTOMEMBER(@ToDateCalendar, CONSTRAINED) )
ON COLUMNS
FROM
)
0

冰冰 - 80后的IT男 2013-11-28 回答

非常感谢大神的回复,这个方法应当能解决。
但我还是想问一下,能不能不通过参数引用,获取到开始或结束的值?
0

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-11-28 回答

FromDateCalendar和ToDateCalendar 这就是两个参数,可以从 Report 中传进来。

你可以这样在 Report 中引用:

WITH
MEMBER DateValue
AS
..CurrentMember.UniqueName
MEMBER DateLabel
AS
..CurrentMember.Name
SELECT
{
.,
.
} ON 0,
{
..
} ON 1
FROM


一个是参数的 Value, 一个是参数的 Label.

0

BIWORK - 热衷于微软BI技术,技术架构和解决方案! 2013-11-28 回答

为这个小例子专门总结了一篇博客 http://www.cnblogs.com/biwork/p/3447768.html

要回复问题请先登录注册