icCube MDX 与轴或过滤器中相同维度相关的不同计数
icCube MDX on distinct count in relation to same dimension in axis or filter
我在 $Monitoring 多维数据集上有以下 MDX 语句:
WITH
MEMBER [Measures].[Unique Users] AS distinctcount(([User].[User].[User L].members
, [Measures].[Open Report Count])),format_string="#,#0"
SELECT
NON EMPTY { {[Measures].[Unique Users],[Measures].[Open Report Count]} } ON COLUMNS,
NON EMPTY { [Time].[Time].[Day L] } ON ROWS
FROM ( SELECT
{ lag(strtomember("[Time].[Time].["+right("0"+str(day(SchemaRefreshTime())),2) +"-"+ right("0"+str(month(SchemaRefreshTime())),2) + "-"+str(year(SchemaRefreshTime()))+ "]"), 6):strtomember("[Time].[Time].["+right("0"+str(day(SchemaRefreshTime())),2) +"-"+ right("0"+str(month(SchemaRefreshTime())),2) + "-"+str(year(SchemaRefreshTime()))+ "]") } ON 0 FROM [$Monitoring])
/*ic3navigation*/
axis 1 NON EMPTY order(nonempty(Descendants([Report].[Report], ,leaves),[Open Report Count]),[Open Report Count],desc)
FILTERBY /*ic3*/ {[Time].[Time].[ALL].&[2015].&[2015-11-27].&[27-11-2015]}
FILTERBY /*ic3*/ {[User].[User].[All Users].&[<user>]}
- *) 将
<user>
更改为实际用户名
- *) ...lag.. 公式用于根据架构刷新时间给出最近 7 天
- ***) 此 MDX 查询可以在任何 $Monitoring 多维数据集上 运行 如果您已填写现有用户
我希望 distinctcount 函数考虑 FILTERBY。所以结果应该是 1(只选择了一个用户)。奇怪的是,事实并非如此。它显示了不止一个用户,所以我假设 distinctcount 没有考虑用户的 FILTERBY。
当我将 FILTER BY 移动到 AXIS 或 ROWS 或 COLUMNS 时,同样的事情发生了。
这是一个错误还是 MDX/MDX++ 在 icCube 中的工作原理?
请指教
这是预期的行为。欢迎使用高级 MDX!
FilterBy 与子select完全相同。
- 成员未通过计算成员中的子select或where子句过滤。
- 在计算成员中,定义层次结构的元组将 'overwrite' 子查询或 where 子句中定义的元组。
------ 更新 ------
如果您想使用 clause/subselect 运算符过滤集合,您需要 EXISTING 运算符。
MEMBER [Measures].[Unique Users] AS count( Existing [User].[User].[User L].members),format_string="#,#0"
如果您只希望用户拥有元组数据:
MEMBER [Measures].[Unique Users] AS count( nonempty( Existing [User].[User].[User L].members, [Measures].[Open Report Count])),format_string="#,#0"
如果您有大量用户,我建议您添加一个度量 [Distinct Users],它是对用户 ID 的不同计数。这样您就可以避免我们在这里面临的所有复杂性。
我在 $Monitoring 多维数据集上有以下 MDX 语句:
WITH
MEMBER [Measures].[Unique Users] AS distinctcount(([User].[User].[User L].members
, [Measures].[Open Report Count])),format_string="#,#0"
SELECT
NON EMPTY { {[Measures].[Unique Users],[Measures].[Open Report Count]} } ON COLUMNS,
NON EMPTY { [Time].[Time].[Day L] } ON ROWS
FROM ( SELECT
{ lag(strtomember("[Time].[Time].["+right("0"+str(day(SchemaRefreshTime())),2) +"-"+ right("0"+str(month(SchemaRefreshTime())),2) + "-"+str(year(SchemaRefreshTime()))+ "]"), 6):strtomember("[Time].[Time].["+right("0"+str(day(SchemaRefreshTime())),2) +"-"+ right("0"+str(month(SchemaRefreshTime())),2) + "-"+str(year(SchemaRefreshTime()))+ "]") } ON 0 FROM [$Monitoring])
/*ic3navigation*/
axis 1 NON EMPTY order(nonempty(Descendants([Report].[Report], ,leaves),[Open Report Count]),[Open Report Count],desc)
FILTERBY /*ic3*/ {[Time].[Time].[ALL].&[2015].&[2015-11-27].&[27-11-2015]}
FILTERBY /*ic3*/ {[User].[User].[All Users].&[<user>]}
- *) 将
<user>
更改为实际用户名 - *) ...lag.. 公式用于根据架构刷新时间给出最近 7 天
- ***) 此 MDX 查询可以在任何 $Monitoring 多维数据集上 运行 如果您已填写现有用户
我希望 distinctcount 函数考虑 FILTERBY。所以结果应该是 1(只选择了一个用户)。奇怪的是,事实并非如此。它显示了不止一个用户,所以我假设 distinctcount 没有考虑用户的 FILTERBY。
当我将 FILTER BY 移动到 AXIS 或 ROWS 或 COLUMNS 时,同样的事情发生了。
这是一个错误还是 MDX/MDX++ 在 icCube 中的工作原理?
请指教
这是预期的行为。欢迎使用高级 MDX!
FilterBy 与子select完全相同。
- 成员未通过计算成员中的子select或where子句过滤。
- 在计算成员中,定义层次结构的元组将 'overwrite' 子查询或 where 子句中定义的元组。
------ 更新 ------
如果您想使用 clause/subselect 运算符过滤集合,您需要 EXISTING 运算符。
MEMBER [Measures].[Unique Users] AS count( Existing [User].[User].[User L].members),format_string="#,#0"
如果您只希望用户拥有元组数据:
MEMBER [Measures].[Unique Users] AS count( nonempty( Existing [User].[User].[User L].members, [Measures].[Open Report Count])),format_string="#,#0"
如果您有大量用户,我建议您添加一个度量 [Distinct Users],它是对用户 ID 的不同计数。这样您就可以避免我们在这里面临的所有复杂性。