在MDX中实现IN / LIKE

Leg*_*ack 7 ssas mdx

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

[Band].&[A]&[Under $400]
[Band].&[B]&[$400 - $1,000]
[Band].&[C]&[$1,000 - $2,500]
[Band].&[D]&[$2,500 - $3,500]
...
Run Code Online (Sandbox Code Playgroud)

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

这是不起作用的查询,因为该.isin功能在MDX中不存在,但是您将看到我正在尝试执行的操作:

SELECT 
  NON EMPTY {[Measure A], [Measure B]} ON COLUMNS, 
  NON EMPTY {([Band].isin(['Under $400', '$400 - $1,000']).ALLMEMBERS)} --fail on .isin(
  DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS
FROM (
  SELECT 
    ({[Foo].&[Bar]}) ON COLUMNS 
  FROM
    [CUBE]
)
Run Code Online (Sandbox Code Playgroud)

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

SELECT 
  NON EMPTY {[Measure A], [Measure B]} ON COLUMNS, 
  NON EMPTY {([Band].&[A]&[Under $400])}
  DIMENSION PROPERTIES MEMBER_CAPTION ON ROWS
FROM (
  SELECT 
    ({[Foo].&[Bar]}) ON COLUMNS 
  FROM
    [CUBE]
)
Run Code Online (Sandbox Code Playgroud)

这将返回以下有效结果:

              Measure A    Measure B
Under $400    1795.67%     58.48%
Run Code Online (Sandbox Code Playgroud)

但我想在返回[Band]多维值聚合值的地方查看结果。如何在MDX中完成?

如您所知,我以前从未使用过MDX,但是在搜索此问题时,我看到了诸如采用相交或使用ChildrenSet之类的东西。但这似乎不是很直观。

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

小智 4

以下是如何在 MDX 中实现 IsIn 功能的列表

1)您想使用 in 子句进行过滤并显示成员。在此示例中,我想查看 Adventureworks 示例数据库中自行车和服装类别的互联网销售情况

select 
[Measures].[Internet Sales Amount]
on columns,
{[Product].[Category].&[1]
,[Product].[Category].&[3]}
on rows 
from 
[Adventure Works]
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

2)我想按 IN 子句进行过滤,但不想向成员显示 在这个示例中,我想查看每年来自 Adventureworks 示例数据库的自行车和服装类别的互联网销售情况。结果是被岁月打破了。

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]}
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

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

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])
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

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]
Run Code Online (Sandbox Code Playgroud)

结果 :

在此输入图像描述

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

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]
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述