MDX 问题,使用子查询计算行数
Posted
技术标签:
【中文标题】MDX 问题,使用子查询计算行数【英文标题】:MDX issue, rows count using a subquery 【发布时间】:2017-05-02 10:40:44 【问题描述】:我正在尝试使用子查询来计算行数(每个州的邮政编码)... 请帮助我理解以下行为。 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] 使用相同的集合:“[Customer].[Postal Code].members”)返回不同的结果?
仅 [Measures].[RowsCount] 返回正确/预期的结果,但我的目标是避免“WITH SET”定义,并且仅使用 [Measures].[RowsCount1] 内联,它应该返回正确的结果.
编辑
以下语句将是一个解决方案:
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
)
【问题讨论】:
【参考方案1】:mdx
中的 SUBSELECT
与 sql 中的 SUBQUERY
不同 - 它并不总是像子查询那样是一个完整的过滤器 - 因此结果会有所不同。
但是使用 AdvWrks 我很难复制您报告的行为。
我怀疑您可以将脚本修改为以下之一以获得您想要的结果
MEMBER [Measures].[RowsCount1] AS
Count
(
[DIM bla].[HIER bla].[Level]
*
[DIM bla2].[HIER bla2].&[test]
)
或者使用 All 成员而不是 test
:
MEMBER [Measures].[RowsCount1] AS
Count
(
[DIM bla].[HIER bla].[Level]
*
[DIM bla2].[HIER bla2].[All]
)
【讨论】:
【参考方案2】:如果在 where 子句和子查询中添加切片,上下文似乎有所不同:您可以通过 slicer-or-sub-cube 获取参考。但仍然不知道为什么 [RowCount] 和 [RowCount1] 返回差异值。
我在 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 轴上设置 [Product].[Category].MEMBERs 返回两个成员 [Product].[Category].[ALL] 和 [Product].[Category].[Bikes],并设置轴 1 上属性 [Product].[Category] 的默认成员到 [Bike],则计算出的成员 [ount product of bikes] 将返回带有 CurrentMember 的预期值。
【讨论】:
感谢您的回答,但措施[Measures].[RowsCount1]
是错误的:(以上是关于MDX 问题,使用子查询计算行数的主要内容,如果未能解决你的问题,请参考以下文章