您能帮我这个MDX查询吗?

时间:2018-07-07 17:19:53

标签: mdx

数据透视报表过滤器和相应的值:

预测版本为四月预报(因此只有1个值), Rev Sum Category是All(因此,没有过滤器),除了2个值之外,我该如何编写该表达式?

Rev Sum Product Summary是一个值, 区域为全部(因此,没有过滤器)

以下3个字段是应过滤除2个值以外的所有字段的,我该如何编写该表达式?

销售类型为多个项目(因此有多个值), 营销计划是多个项目(因此有很多价值), 产品族是多个项目(因此有很多值)

在数据透视表布局中,行标签为RevSumCategory,列标签为小节,为否。通行证销售–实际。 我要创建的是最简单形式的MDX查询,该查询将生成与数据透视表中所示的结果相同的结果。对于具有权限的报告的任何用户,代码应足够简单,以便能够修改字段值。 请注意,在数据透视表报表过滤器中,有(4)个字段不是“全部”,而是被过滤了。

我的问题是:

(a)如何在MDX查询中包括数据透视报表过滤器?

(b)如何编写一个MDX查询表达式,该表达式对除2个值之外的所有值进行过滤。

当过滤器只有2个值时,就很容易了,我可以为该字段添加2个值,例如

[Business].[Business Summary].&[Field],[Business].[Business Summary].&   
[Stores Field],

但是当过滤器是除2个值之外的所有(全部)过滤器时,我不能用相同的方式编写它,因为那样的话该字段的表达式将太长。

我的查询代码(进行中)在下面。

Select NON EMPTY [Measures].[Sell Thru Licenses - Actual]  on Columns,
{[Product].[Rev Sum Category].&[value 1], [Product].[Rev Sum Category].&  
[value 2]}) ON ROWS  

From [Cube]

WHERE 
([Forecast Version].[Forecast Version].&[April Forecast],
[Product].[Rev Sum Category].[All],
[Business].[Business Summary].&[Field],[Business].[Business Summary].&    
[Stores Field],
[Product].[Rev Sum Product Summary].&[One Value],
[Geography].[Region].[All],
[Sale Type].[Sale Type].[this is the field that has multiple values]

希望有人可以帮助我为具有多个值的字段编写代码。谢谢。

1 个答案:

答案 0 :(得分:0)

您的WHERE子句不起作用,因为您使用元组语法,该语法在每个层次结构中仅允许一个成员,而对于Business Summary则不允许两个成员。稍后,我将首先讨论您关于否定/异常过滤器的主要问题: 您可以编写一个“负过滤器”,如下所示:

[Sale Type].[Sale Type].Members - { [Sale Type].[Sale Type].&[A], [Sale Type].[Sale Type].&[B] }

如果您要排除成员AB

但是,请注意,现在这是一个集合,而不是单个成员,因此WHERE子句中的表示法会稍微复杂一些,因为您无法使用简单的元组表示法,因此可以使用交叉联接运算符{{1} }:

*

最后,您可以使用集合交叉连接的相同方法来解决多选问题:您可以将过滤条件写为

...
WHERE 
([Forecast Version].[Forecast Version].&[April Forecast],
[Product].[Rev Sum Category].[All],
[Business].[Business Summary].&[Field], // note there is only one member here
[Product].[Rev Sum Product Summary].&[One Value],
[Geography].[Region].[All])
*
([Sale Type].[Sale Type].Members - { [Sale Type].[Sale Type].&[A], [Sale Type].[Sale Type].&[B] })

我简化了它,假设您的多维数据集具有标准定义,即所有成员都是其层次结构的默认成员,因此可以在WHERE条件下将其省略。