在 MDX 中实现 IN /LIKE

Implementing IN /LIKE in MDX

我有一个名为 [Band] 的维度,它可以有几个不同的值:

[Band].&[A]&[Under 0]
[Band].&[B]&[0 - ,000]
[Band].&[C]&[,000 - ,500]
[Band].&[D]&[,500 - ,500]
...

我正在尝试编写一个查询,我可以在其中按这些值的子列表进行剪切。

这里的查询不起作用,因为 MDX 中不存在 .isin 函数,但您会看到我正在尝试执行的操作:

SELECT 
  NON EMPTY {[Measure A], [Measure B]} ON COLUMNS, 
  NON EMPTY {([Band].isin(['Under 0', '0 - ,000']).ALLMEMBERS)} --fail on .isin(
  DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS
FROM (
  SELECT 
    ({[Foo].&[Bar]}) ON COLUMNS 
  FROM
    [CUBE]
)

现在,这是一个有效的查询,但它只给了我一个 [Band] 值:

SELECT 
  NON EMPTY {[Measure A], [Measure B]} ON COLUMNS, 
  NON EMPTY {([Band].&[A]&[Under 0])}
  DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS
FROM (
  SELECT 
    ({[Foo].&[Bar]}) ON COLUMNS 
  FROM
    [CUBE]
)

这 returns 的有效结果:

              Measure A    Measure B
Under 0    1795.67%     58.48%

但我希望看到 returns 多个 [Band] 维度值的聚合值的结果。如何在 MDX 中完成此操作?

你可能会说我以前从未使用过 MDX,但是当我搜索这个问题时,我看到了类似 , or using ChildrenSet 的内容。但是好像不是很直观

你能给我指出正确的方向吗?

我想明白了

SELECT 
  NON EMPTY {[Measure A], [Measure B]} ON COLUMNS, 
  NON EMPTY {[Band].[Under 0], [Band].[,000 - ,500]}
  DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS
FROM (
  SELECT 
    ({[Foo].&[Bar]}) ON COLUMNS 
  FROM
    [CUBE]
)

下面列出了如何在 MDX 中实现 IsIn 功能

1)您想使用 in 子句过滤并显示成员。 在此示例中,我想查看 adventurewroks 示例 db

中自行车和服装类别的互联网销售情况
select 
[Measures].[Internet Sales Amount]
on columns,
{[Product].[Category].&[1]
,[Product].[Category].&[3]}
on rows 
from 
[Adventure Works]

结果

2)我想按 IN 子句过滤但不想显示成员 在此示例中,我想每年查看 adventurewroks 样本数据库中自行车和服装类别的互联网销售情况。结果要按年破

select 
[Measures].[Internet Sales Amount]
on columns,
non empty 
[Date].[Calendar Year].[Calendar Year]
on rows 
from 
[Adventure Works]
where 
{[Product].[Category].&[1]
,[Product].[Category].&[2]}

结果

您可以通过使用子查询实现同样的效果

select 
[Measures].[Internet Sales Amount]
on columns,
non empty 
[Date].[Calendar Year].[Calendar Year]
on rows 
from 
(select {[Product].[Category].&[1],[Product].[Category].&[2]} on 0 from [Adventure Works])

结果

3)当你想实现基于名字的IN子句时 在此示例中,我想查看 adventurewroks 示例数据库中自行车和服装类别的互联网销售情况,但在本例中,我使用的是标题

select 
[Measures].[Internet Sales Amount]
on columns,
filter(
[Product].[Category].[Category],
[Product].[Category].currentmember.name='Bikes' or [Product].[Category].currentmember.name='Clothing'
)
on rows 
from 
[Adventure Works]

结果:

4) 当您根据名称实施 IN 子句并且您的条件正在寻找特定文本时(如子句) 在此示例中,我想从 adventurewroks 示例数据库中查看自行车和服装类别的互联网销售情况,但在本例中,我正在搜索标题名称以查找一段字符串。

select 
[Measures].[Internet Sales Amount]
on columns,
FILTER([Product].[Category].[Category],
Instr([Product].[Category].currentmember.name, 'Bik') > 0
or 
Instr([Product].[Category].currentmember.name, 'oth') > 0
)
on rows 
from 
[Adventure Works]

结果