WHERE 子句中的 MDX 除外函数

Posted

技术标签:

【中文标题】WHERE 子句中的 MDX 除外函数【英文标题】:MDX Except function in where clause 【发布时间】:2010-03-24 21:08:56 【问题描述】:

我在限制 mdx 中的查询时遇到问题,在 where 子句中使用 except 函数。我需要检索一组数据,但它们不在特定的集合中。然后我创建了下一个查询:

select [Measures].[Amount], [Measures].[Transaction Cost], [Measures].[Transaction Number] ON COLUMNS,[ManualProcessing].[All ManualProcessings].[MAGNETICSTRIPE], ManualProcessing].[All ManualProcessings].[MANUAL] ON ROWS 
FROM [Transactions]
where except([Product].[All Products].Children,[Product].[All Products].[Debit)

显然这工作正常,但是当我尝试向切片器添加另一个限制时,我收到了这个错误:没有函数匹配签名(Set,Member)。

我目前正在开发 mondrian 3.1

当我唱除函数时,是否可以向切片器添加多个限制? 有没有其他方法可以得到这个?

【问题讨论】:

【参考方案1】:

Except function 仅适用于集合。 但是您可以在 where 上使用 n 维:

select [Measures].[Amount], [Measures].[Transaction Cost], [Measures].[Transaction Number] ON COLUMNS,[ManualProcessing].[All ManualProcessings].[MAGNETICSTRIPE], ManualProcessing].[All ManualProcessings].[MANUAL] ON ROWS 
FROM [Transactions]
where 
   (
      except([Product].[All Products].Children,[Product].[All Products].[Debit),
      except([Set],[Set to exclude])
   )

这适用于 Analysis Services 2005,它应该适用于 Mondrian

【讨论】:

【参考方案2】:

显然这不能在 Mondrian 上完成,因为存在一个不允许复合切片器的错误。我使用 Mondrian OLAP Server 找到了一个不错的解决方案。它正在创建一个排除我不想要的集合的成员。看起来像这样。

WITH member [Product].[Except] as ([Product].[All  Products]) - 
([Product].[All Products].[Debit]) 
SELECT [Measures].[Amount],[Measures].[Transaction Cost], [Measures].[Transaction Number] ON COLUMNS,
[ManualProcessing].[All ManualProcessings].[MAGNETICSTRIPE],[ManualProcessing].[All ManualProcessings].[MANUAL] ON ROWS 
FROM [Transactions] 
WHERE[Product].[Except]

【讨论】:

以上是关于WHERE 子句中的 MDX 除外函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 where 子句 (MDX) 的 SSAS 计算度量

SSAS MDX WHERE 子句语法 - 从同一层次结构中过滤多个值

用 MDX 查询的日期范围子句中的现有成员替换不存在的成员

4.数据分组

where子句mysql中的MAX函数[重复]

where子句mysql中的MAX函数[重复]