在 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]
结果
我有一个名为 [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,但是当我搜索这个问题时,我看到了类似
你能给我指出正确的方向吗?
我想明白了
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]
结果