MDX 问题,行数使用子查询
MDX issue, rows count using a subquery
我正在尝试使用子查询来计算行数(每个州的邮政编码)...
请帮助我理解以下行为。 MDX:
WITH
SET [rows] AS
{[Customer].[Postal Code].members}
MEMBER [Measures].[RowsCount] AS
Count
(
[rows]
)
MEMBER [Measures].[RowsCount1] AS
Count
(
{[Customer].[Postal Code].members}
)
SELECT
{
[Measures].[RowsCount]
,[Measures].[RowsCount1]
} ON columns
FROM
(
SELECT
(
{[Customer].[State Province Name].&[Hamburg]}
) ON Columns
FROM [Analysis Services Tutorial]
)
- 为什么 [Measures].[RowsCount] 和 [Measures].[RowsCount1] return 不同的结果,尽管两者使用相同的集合:“{[Customer].[Postal Code].members}") ?
- 只有 [Measures].[RowsCount] return 是 correct/expected 结果,但我的目标是避免 "WITH SET" 定义,而只使用 [Measures].[RowsCount1 ] 内联,这应该 return 一个正确的结果。
编辑
下面的语句将是一个解决方案:
MEMBER [Measures].[RowsCount1] AS
Count
(
{[Customer].[Postal Code].members} * {[Customer].[State Province Name].&[Hamburg]}
)
但是我想通过使用 CurrentMember
函数来实现它,像这样(不起作用):
MEMBER [Measures].[RowsCount1] AS
Count
(
{[Customer].[Postal Code].members} * {[Customer].[State Province Name].CurrentMember}
)
mdx
中的 SUBSELECT
与 sql 中的 SUBQUERY
不同 - 它并不总是像子查询那样的完整过滤器 - 因此结果的差异。
但是使用 AdvWrks 我很难复制您报告的行为。
我怀疑您可以将脚本修改为以下之一以获得您想要的结果
MEMBER [Measures].[RowsCount1] AS
Count
(
[DIM bla].[HIER bla].[Level]
*
{[DIM bla2].[HIER bla2].&[test]}
)
或者不使用 test
,而是使用 All 成员:
MEMBER [Measures].[RowsCount1] AS
Count
(
[DIM bla].[HIER bla].[Level]
*
{[DIM bla2].[HIER bla2].[All]}
)
如果在where子句和子查询中添加切片,上下文似乎不同:您可以通过slicer-or-sub-cube获得引用。但仍然不知道为什么 [RowCount] 和 [RowCount1] return 差异值。
我在 adv cube 上测试了你遇到的类似情况,在下面添加了列轴,希望对你有所帮助。
WITH MEMBER [Measures].[count product of bikes] AS
count(EXTRACT( [Product].[Product].[Product]* [Product].
[Category].CurrentMember, [Product].[Product]))
SELECT
{
[Measures].[count product of bikes]
} on 0
,{
tail([Product].[Category].MEMBERs).item(0).item(0)
} on 1
from (SELECT{[Product].[Category].[Category].[Bikes]} ON 0 FROM [Adventure Works])
使用子查询,在外轴 1 return 上设置 [Product].[Category].MEMBERs 两个成员 [Product].[Category].[ALL] 和 [Product].[Category]。 [Bikes],并将轴 1 上属性 [Product].[Category] 的默认成员设置为 [Bike],则计算成员 [ount product of bikes] 将 return 与 CurrentMember.[ 的预期值。 =12=]
我正在尝试使用子查询来计算行数(每个州的邮政编码)... 请帮助我理解以下行为。 MDX:
WITH
SET [rows] AS
{[Customer].[Postal Code].members}
MEMBER [Measures].[RowsCount] AS
Count
(
[rows]
)
MEMBER [Measures].[RowsCount1] AS
Count
(
{[Customer].[Postal Code].members}
)
SELECT
{
[Measures].[RowsCount]
,[Measures].[RowsCount1]
} ON columns
FROM
(
SELECT
(
{[Customer].[State Province Name].&[Hamburg]}
) ON Columns
FROM [Analysis Services Tutorial]
)
- 为什么 [Measures].[RowsCount] 和 [Measures].[RowsCount1] return 不同的结果,尽管两者使用相同的集合:“{[Customer].[Postal Code].members}") ?
- 只有 [Measures].[RowsCount] return 是 correct/expected 结果,但我的目标是避免 "WITH SET" 定义,而只使用 [Measures].[RowsCount1 ] 内联,这应该 return 一个正确的结果。
编辑
下面的语句将是一个解决方案:
MEMBER [Measures].[RowsCount1] AS
Count
(
{[Customer].[Postal Code].members} * {[Customer].[State Province Name].&[Hamburg]}
)
但是我想通过使用 CurrentMember
函数来实现它,像这样(不起作用):
MEMBER [Measures].[RowsCount1] AS
Count
(
{[Customer].[Postal Code].members} * {[Customer].[State Province Name].CurrentMember}
)
mdx
中的 SUBSELECT
与 sql 中的 SUBQUERY
不同 - 它并不总是像子查询那样的完整过滤器 - 因此结果的差异。
但是使用 AdvWrks 我很难复制您报告的行为。
我怀疑您可以将脚本修改为以下之一以获得您想要的结果
MEMBER [Measures].[RowsCount1] AS
Count
(
[DIM bla].[HIER bla].[Level]
*
{[DIM bla2].[HIER bla2].&[test]}
)
或者不使用 test
,而是使用 All 成员:
MEMBER [Measures].[RowsCount1] AS
Count
(
[DIM bla].[HIER bla].[Level]
*
{[DIM bla2].[HIER bla2].[All]}
)
如果在where子句和子查询中添加切片,上下文似乎不同:您可以通过slicer-or-sub-cube获得引用。但仍然不知道为什么 [RowCount] 和 [RowCount1] return 差异值。
我在 adv cube 上测试了你遇到的类似情况,在下面添加了列轴,希望对你有所帮助。
WITH MEMBER [Measures].[count product of bikes] AS
count(EXTRACT( [Product].[Product].[Product]* [Product].
[Category].CurrentMember, [Product].[Product]))
SELECT
{
[Measures].[count product of bikes]
} on 0
,{
tail([Product].[Category].MEMBERs).item(0).item(0)
} on 1
from (SELECT{[Product].[Category].[Category].[Bikes]} ON 0 FROM [Adventure Works])
使用子查询,在外轴 1 return 上设置 [Product].[Category].MEMBERs 两个成员 [Product].[Category].[ALL] 和 [Product].[Category]。 [Bikes],并将轴 1 上属性 [Product].[Category] 的默认成员设置为 [Bike],则计算成员 [ount product of bikes] 将 return 与 CurrentMember.[ 的预期值。 =12=]