【问题标题】:MDX Where vs SubCube ConfusionMDX Where vs SubCube 混淆
【发布时间】:2013-02-27 21:14:01
【问题描述】:

我有以下 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 个子立方体放置集和维度 on1、on2、on3 和更多轴。这将是一个清晰快速的 mdx 查询。

标签: ssas mdx olap


【解决方案1】:

试试这个:

我不是 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)
)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多