MDX在哪里与SubCube混淆

时间:2013-02-27 21:14:01

标签: ssas mdx olap

我有以下MDX:

SELECT NON EMPTY 
       {
            [Measures].[My Measure]
       } ON COLUMNS 
FROM 
(
    SELECT 
           NONEMPTY(StrToMember(@StartDate,CONSTRAINED):StrToMember(@EndDate,CONSTRAINED)) 
           ON COLUMNS,

           NONEMPTY( STRTOSET(@Division)) 
           ON ROWS
    FROM
    (
        SELECT 
               NONEMPTY({[Project].[Project Status].&[Open],[Project].[Project Status].&[Closed]}) 
               ON COLUMNS,

               NONEMPTY(STRTOSET(@TargetLanguage)) 
               ON ROWS
        FROM [My Cube]
    )
    WHERE STRTOSET(@Project)
)
WHERE STRTOSET(@Requestor)

我的目标如下:过滤@ StartDate,@ EndDate,@ Division,@ TargetLanguage,@ Project,@ Requestor(除了过滤项目状态以打开/关闭...)

他们唯一可以让这些工作的方法是通过玩子立方体和轴来直到我得到一个看起来正确的结果......例如,我不明白为什么,在第二个子选择中,我不能简单地说:

Where STRTOSET(@TargetLanguage)

而不是把它放在行上。我无法100%确定这是返回正确的数据,因为它是如此痉挛......任何解释?到目前为止,谷歌一直没有帮助,这使我相信在子管中放置行不是正确的解决方案......

谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

我不是百分之百的子立方体,但重构你的代码我认为它是相同的:

SELECT NON EMPTY 
       {
            [Measures].[My Measure]
       } ON COLUMNS 
FROM 
       [My Cube]
WHERE 
(
    STRTOSET(@Requestor),
    STRTOSET(@TargetLanguage), 
    {[Project].[Project Status].&[Open],[Project].[Project Status].&[Closed]},
    STRTOSET(@Division),
    {StrToMember(@StartDate,CONSTRAINED):StrToMember(@EndDate,CONSTRAINED)},
    STRTOSET(@TargetLanguage)
)

说实话,第一个非空的似乎也不需要。

我看到的方式是内部子立方体只是过滤切片,我认为它们非常简单,可以添加到主过滤器中。