如何获得在MDX

时间:2019-04-09 00:45:23

标签: ssas mdx

我有两个维度,分别为TL

运行此命令时:

SELECT
  {measures.[value]} on 0,
  {nonempty([T].[Hierarchy Items].[T1])} on 1
FROM [Cube]
WHERE 
  (
   [L].[L3].&[49733]
  ) 

我获得了所有T1成员,而where子句适用

但是当我删除nonempty函数

SELECT
  {measures.[value]} on 0,
  {[T].[Hierarchy Items].[T1]} on 1
FROM [Cube]
WHERE 
  (
   [L].[L3].&[49733]
  ) 

我将获得所有T1成员,而where子句不适用。

还有什么办法可以获取所有null值,并且filter(where)也适用?

2 个答案:

答案 0 :(得分:1)

您需要了解非空是如何工作的。例如,我想查看2011年的InternetSalesAmount,请考虑以下查询

select [Measures].[Internet Sales Amount] on 0 ,
[Product].[Category].[Category]
on 1 
from 
[Adventure Works]
where 
[Date].[Calendar Year].&[2011]

结果:

enter image description here

现在查询返回所有2011年已售出或未售出的产品。对于已售出的产品,它将返回销售金额。但是,其他三种产品是由于在2011年与product(MDX的行为与SQL的行为不同)之间的笛卡尔积而返回的。现在,我只想查看2011年售出的产品。

select [Measures].[Internet Sales Amount] on 0 ,
nonempty(
[Product].[Category].[Category],
[Measures].[Internet Sales Amount]) on 1 
from 
[Adventure Works]
where 
[Date].[Calendar Year].&[2011]

结果

enter image description here

为此,我可以使用{non empty}或{nonempty}关键字来告诉MDX仅检索事实表中具有有效条目的那些组合。由于事实表在2011年没有行包含其他三种产品,因此它将不返回它们。

答案 1 :(得分:0)

也许是这样的:

WITH
SET S AS
EXISTS( 
  [T].[Hierarchy Items].[T1].members,
  { [L].[L3].&[49733] },
  "MeasureGroupName"
)
SELECT
  {measures.[value]} on 0,
  S on 1
FROM [Cube];