2012-10-26 48 views
0

我是MDX的新手,但希望尽可能保持我的代码清洁。在MDX函数中使用计算成员作为参数

我有一个查询今天的销售情况,并使用ParallelPeriod函数将它们与LY和LY-1进行比较。它看起来像这样..

With Member [Date].[SalesCalendar].[DateToday] as [Date].[SalesCalendar].[Date].&[2012-10-26T00:00:00] 

SELECT 

    {[Date].[SalesCalendar].[DateToday], 

    ParallelPeriod([Date].[SalesCalendar].[Year],1,[Date].[SalesCalendar].[Date].&[2012-10-26T00:00:00]), 

    ParallelPeriod([Date].[SalesCalendar].[Year],2,[Date].[SalesCalendar].[DateToday]} 

    * 

    {[Measures].[Total Sales],[Measures].[Units],[Measures].[Sales Target]} 
    ON Columns, 

    [Locations].[Location PK].[Location PK] 
    on Rows 

From MyCube 

我从定义一个指向今天日期的成员开始。我想定义它一次,并在整个查询过程中使用它(以及我编写的其他查询),理论上我可以在一次地方改变它并且底层查询作出反应。

我遇到的问题是,如果我尝试在ParallelPeriod函数中使用此计算成员,我不会得到任何结果。通过上面的查询,我得到了第一列和第一次调用ParallelPeriod(用于LY)的结果,但第二次使用声明成员的LY-1调用失败。

我猜这是由于我对MDX缺乏知识,所以我想我缺少一些基本的东西。然而,我的头靠在墙上不能工作,所以我需要一些帮助!

任何想法我做错了什么?

感谢

回答

0

,因为当你的查询评估[Date].[SalesCalendar].[DateToday]不与[Date].[SalesCalendar].[Date].&[2012-10-26T00:00:00]更换这可不行。

您创建了一个会在数据透视表单元格中给出与[Date].[SalesCalendar].[Date].&[2012-10-26T00:00:00]相同的数值的成员。

你可以试试这个查询:

With Member [Date].[SalesCalendar].[DateToday] as [Date].[SalesCalendar].[Date].&[2012-10-26T00:00:00] 
    Member [Measures].[name] as [Date].[SalesCalendar].CurrentMember.Name 

SELECT 
    {[Measures].[name], [Measures].[Total Sales]} ON Columns, 
    {[Date].[SalesCalendar].[DateToday], [Date].[SalesCalendar].[Date].&[2012-10-26T00:00:00]} on Rows 
From MyCube 

Total Sales将是相同的,但不[Measures].[name]

+0

啊对,好的。那么对此最佳做法是什么?谢谢 :-) – CResults