首页 > 解决方案 > 你能帮我处理这个 MDX 查询吗?

问题描述

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

Forecast Version 是 April Forecast(因此,只有 1 个值), Rev Sum Category 是 All(因此,没有过滤器),除了 2 个值,我该如何编写该表达式?

Rev Sum Product Summary 是一个值,Region 是 All(因此,没有过滤器),

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

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

在数据透视表布局中,行标签是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]

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

标签: mdx

解决方案


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

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

如果要排除成员AB.

但是请注意,这现在是一个集合而不是单个成员,因此 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 条件中省略它们。


推荐阅读