你能帮我处理这个MDX查询吗?

你能帮我处理这个MDX查询吗?,mdx,Mdx,透视报告筛选器和相应的值: 预测版本为4月预测(因此,只有1个值), revsum类别是All(因此,没有过滤器),除了2个值,我如何编写该表达式 Rev Sum产品摘要是一个值, 区域是全部(因此,没有过滤器) 以下3个字段是除2个值外所有字段都应过滤的字段,如何编写该表达式 销售类型是多个项目(因此有许多值), 营销计划是多个项目(因此有许多价值观), 产品系列是多个项目(因此有许多值) 在数据透视表布局中,行标签是revsumcegory,列标签是度量值,即通过销售许可证的数量–实际数量。

透视报告筛选器和相应的值:

预测版本为4月预测(因此,只有1个值), revsum类别是All(因此,没有过滤器),除了2个值,我如何编写该表达式

Rev Sum产品摘要是一个值, 区域是全部(因此,没有过滤器)

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

销售类型是多个项目(因此有许多值), 营销计划是多个项目(因此有许多价值观), 产品系列是多个项目(因此有许多值)

在数据透视表布局中,行标签是
revsumcegory
,列标签是度量值,即通过销售许可证的数量–实际数量。 我要创建的是一个尽可能简单的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]
希望有人能帮我写代码,只为字段有多个值。谢谢。

您的WHERE子句不起作用,因为您使用的是元组语法,每个层次结构只允许一个成员,而不像
业务摘要
那样允许两个成员。稍后我将谈到这一点,首先集中讨论关于否定/例外过滤器的主要问题: 您可以编写“负过滤器”,如下所示:

[Sale Type].[Sale Type].Members - { [Sale Type].[Sale Type].&[A], [Sale Type].[Sale Type].&[B] }
如果要排除成员
A
B

但是,请注意,这现在是一个集合而不是单个成员,因此WHERE子句中的表示法稍微复杂一些,因为您不能使用简单的元组表示法,所以您将使用交叉连接运算符
*

...
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 
{[Forecast Version].[Forecast Version].&[April Forecast]}
*
{[Business].[Business Summary].&[Field],[Business].[Business Summary].&    
[Stores Field]}
*
{[Product].[Rev Sum Product Summary].&[One Value]}
*
([Sale Type].[Sale Type].Members - { [Sale Type].[Sale Type].&[A], [Sale Type].[Sale Type].&[B] })
我简化了它,假设多维数据集的标准定义是所有成员都是其层次结构的默认成员,所以在WHERE条件下可以省略它们