0

我有以下 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% 确定这是否返回了正确的数据,因为它是如此令人费解……有什么解释吗?到目前为止,谷歌一直没有帮助,这让我相信将事物放在子立方体中的行上并不是正确的解决方案......

谢谢!

4

1 回答 1

0

尝试这个:

我不是 100% 使用子多维数据集,但重构您的代码我认为它与以下内容相同:

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

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

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

于 2013-03-07T02:41:15.147 回答