我有一个维度[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)
结果