MDX 查询:如果与其他维度无关,如何在查询结果中显示虚拟集?

Posted

技术标签:

【中文标题】MDX 查询:如果与其他维度无关,如何在查询结果中显示虚拟集?【英文标题】:MDX Query : How I can show dummy set in query result if it is not related to other dimension? 【发布时间】:2017-08-19 10:19:06 【问题描述】:

需要您的帮助来解决客户报告中的一个问题。

请检查下面 2 个 mdx 查询的结果。

注意:我使用了联合运算符,以便我可以将 2 个成员的结果与 1 个(法国和德国合并)合并。 在 Union 中使用 Exist 函数,因为需要检查函数中的第一个集合是否与第二个集合的维度成员相关。

我使用 Union 和 Exist 来实现 OR 条件。

在第一个 MDX 查询中,您可以在结果集中找到虚拟集(法国和德国),但在第二个 MDX 中您找不到虚拟集(法国和德国),因为产品类别层次结构与国家/地区相关,并且存在函数检查dummy set 不是 Country 层次结构的实际成员,因此它会从结果集中删除 dummy set。

是否有任何方法或替代方法可以强制存在函数在最终结果(mDX 2)中显示虚拟集?

是否有任何方法或替代方法可以强制存在函数在最终结果(mDX 2)中显示虚拟集?

MDX 1)

WITH 
    SET [Combined] AS 
        [Customer].[Customer Geography].[Country].&[France], 
        [Customer].[Customer Geography].[Country].&[Germany]
    
    MEMBER [Customer].[Customer Geography].[France & Germany] AS Aggregate([Combined])
SELECT
    [Measures].[Internet Sales Amount] ON 0,
    Union(
        Except([Customer].[Customer Geography].[Country], [Combined]),
        [Customer].[Customer Geography].[France & Germany]
    ) ON 1
FROM [Adventure Works]

结果 MDX 1

Internet Sales Amount
Australia   $9,061,000.58
Canada  $1,977,844.86
United Kingdom  $3,391,712.21
United States   $9,389,789.51
France & Germany    $5,538,330.05

MDX 查询 2)

WITH 
    SET [Combined] AS 
        [Customer].[Customer Geography].[Country].&[France], 
        [Customer].[Customer Geography].[Country].&[Germany]
    
    MEMBER [Customer].[Customer Geography].[France & Germany] AS Aggregate([Combined])
SELECT
    [Measures].[Internet Sales Amount] ON 0,

       Union( Exists(Except([Customer].[Customer Geography].[Country], [Combined]),
        [Product].[Product Categories].[Category].&[3]  
        , "Internet Sales") ,

      Exists([Customer].[Customer Geography].[France & Germany],[Product].[Product Categories].[Category].&[3]  
     , "Internet Sales"))

     ON 1
FROM [Adventure Works]

结果 MDX 查询 2)

Internet Sales Amount
Australia        $9,061,000.58
Canada          $1,977,844.86
United Kingdom  $3,391,712.21
United States   $9,389,789.51

【问题讨论】:

【参考方案1】:

为什么要在第二个查询中使用两次exists?

WITH 
    SET [Combined] AS 
        [Customer].[Customer Geography].[Country].&[France], 
        [Customer].[Customer Geography].[Country].&[Germany]
    
    MEMBER [Customer].[Customer Geography].[France & Germany] AS Aggregate([Combined])
SELECT
    [Measures].[Internet Sales Amount] ON 0,

       Union( 
         Exists(
           Except([Customer].[Customer Geography].[Country], [Combined]),
           [Product].[Product Categories].[Category].&[3]  
          ,"Internet Sales"
         )

        //,Exists(
        //   [Customer].[Customer Geography].[France & Germany]
        // ,[Product].[Product Categories].[Category].&[3]  
        // ,"Internet Sales"
        // )

        ,[Customer].[Customer Geography].[France & Germany]

       )    
     ON 1
FROM [Adventure Works];

【讨论】:

以上是关于MDX 查询:如果与其他维度无关,如何在查询结果中显示虚拟集?的主要内容,如果未能解决你的问题,请参考以下文章

当 MDX 查询包含 2 个或更多级别的相同维度时,速度较慢

mondrian mdx 过滤日期维度中年份级别的集合

如何使用 MDX 查询检索内部节点的数据集?

事实和维度表之间的 MDX 查询

如何构建仅考虑 2 月最后 10 天发生的事实的 MDX 查询?

MDX 查询以对具有特定日期范围的日期维度进行分组