【问题标题】:How to do a MDX Except crossjoin dimension query如何进行 MDX 除了交叉连接维度查询
【发布时间】:2014-09-03 07:33:29
【问题描述】:

考虑以下数据。我想使用 MDX 获得 NON{Country:USA & Gender:F}

- - - - - - - - - - - - - - - - - - - - |国家 |性别 |销售 | - - - - - - - - - - - - - - - - - - - - 美国 M 1000 美国 F 500 西班牙 M 200 西班牙 F 600

我要提取的是:

- - - - - - - - - - - - - - - - - - - - |国家 |性别 |销售 | - - - - - - - - - - - - - - - - - - - - 美国 M 1000 西班牙 M 200 西班牙 F 600

我尝试使用 crossjoin、union 和 except 来做到这一点,例如

WITH SET [测试] AS [Country].[CountryCode].[USA] * 不包括 ([Gender].members,{[Gender].[GenderCode].[F]}) + 除了([国家].[国家代码].members, {[国家].[国家代码].[美国]}) * [性别].members 选择 行上的非空 [测试], {[Measures].[Sales]} 列 FROM [SalesCube]

它有效,但我可以知道是否有任何其他更简单的方法来做到这一点?

谢谢。

【问题讨论】:

    标签: ssas mdx


    【解决方案1】:

    如果您想排除少数组合,您可以在交叉连接上使用Except,将例外组合作为元组,如下所示:

    WITH SET [Test] AS
    Except(CrossJoin([Country].[CountryCode].members,
                     [Gender].members
                    ),
           { ([Country].[CountryCode].[USA], [Gender].[GenderCode].[F]) }
          )
    ...
    

    从句法上讲,CrossJoin 缩写为 *Except-,以及 Union+,它们具有通常的优先级规则(* 具有更高的优先级比-+):

    WITH SET [Test] AS
    [Country].[CountryCode].members * [Gender].[GenderCode].members
    -
    { ([Country].[CountryCode].[USA], [Gender].[GenderCode].[F]) }
    ...
    

    【讨论】:

    • 请记住,使用 - 而不是 except 不会执行实际的设置元素删除,而只是减去测量值。 * 是 Crossjoin 的简写符号,但 - 不完全等同于 except。
    • @nsousa 不!就像 * 可以用作集合上的交叉连接运算符和值上的乘法运算符一样,-Except 的别名(如果用于集合)(请参阅在 msdn.microsoft.com/en-us/library/ms145497.aspx 上用作集合运算符的减号文档@ ) 以及值的乘法运算符。
    • 你说得对,我的印象是错误的。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2013-09-04
    • 2016-10-02
    • 2019-10-01
    • 2012-12-31
    • 2017-11-03
    • 1970-01-01
    相关资源
    最近更新 更多