SSRS mdx 报告:具有传递多值参数的最大排名值的计算成员
SSRS mdx report: calculated member with maximum rank value for passes multivalue parameter
这是对 MS OLAP 多维数据集的简单 mdx 查询,它输出 3 个城市的销售步骤统计数据以及每个销售阶段的排名,它工作正常:
WITH
MEMBER [Measures].[rank] AS
case [Sales_step].currentmember.member_caption
when 'Contacts' then 1
when 'Clients' then 2
when 'Funded' then 3
else 0 end
SELECT {[Measures].[rank],
[Measures].[qnt]} ON COLUMNS,
NON EMPTY
crossjoin({[City].CHILDREN},
{[Sales_step].CHILDREN}) ON ROWS
FROM ( SELECT ( STRTOSET(@[Sales_step], CONSTRAINED) ) ON COLUMNS
FROM [SALES_PIPE])
输出为:
现在我想在没有单独销售步骤的情况下为每个城市建立总计,但只显示最大存档销售阶段排名。结果必须是:
我尝试了以下代码来做到这一点:
WITH
MEMBER [Measures].[rank max] AS
case [Sales_step].currentmember.member_caption
when 'Contacts' then 1
when 'Clients' then 2
when 'Funded' then 3
else 0 end
SELECT {[Measures].[rank max],
[Measures].[qnt]} ON COLUMNS,
NON EMPTY [City].CHILDREN ON ROWS
FROM ( SELECT ( STRTOSET(@[Sales_step], CONSTRAINED) ) ON COLUMNS
FROM [SALES_PIPE])
它不会产生错误,但是 returns 计算成员 [Measures] 的空值。[rank max]:
只有当我将一个值传递给@[Sales_step] 参数时它才起作用。虽然我需要一个多值参数 运行。当我在 case 子句中更改此代码段时:
case [Sales_step].currentmember.member_caption
至:
case strtomember(@[Sales_step]).member_caption
它抛出了一个错误 "The STRTOMEMBER function expects a member expression for the 1 argument. A tuple set expression was used"。当我也使用它时,单参数和多参数都会出错:
case strtoset(@[Sales_step]).currentmember.member_caption
我需要如何修改计算成员 [Measures].[rank max] 以获得具有最大等级的所需结果,以传递 @[Sales_step] 多值参数?
我想知道这样的东西是否有效:
WITH
SET [S] AS
NonEmpty(
EXISTING [Sales_step].CHILDREN,
([City].CURRENTMEMBER, [Measures].[qnt]) //<<I think that [City].CURRENTMEMBER is probably redundant in this tuple
)
MEMBER [Mx] AS
CASE
WHEN INTERSECT([S], {[Sales_step].[Funded]}).COUNT = 1 THEN 3
WHEN INTERSECT([S], {[Sales_step].[Clients]}).COUNT = 1 THEN 2
WHEN INTERSECT([S], {[Sales_step].[Contacts]}).COUNT = 1 THEN 1
END
...
...
这是对 MS OLAP 多维数据集的简单 mdx 查询,它输出 3 个城市的销售步骤统计数据以及每个销售阶段的排名,它工作正常:
WITH
MEMBER [Measures].[rank] AS
case [Sales_step].currentmember.member_caption
when 'Contacts' then 1
when 'Clients' then 2
when 'Funded' then 3
else 0 end
SELECT {[Measures].[rank],
[Measures].[qnt]} ON COLUMNS,
NON EMPTY
crossjoin({[City].CHILDREN},
{[Sales_step].CHILDREN}) ON ROWS
FROM ( SELECT ( STRTOSET(@[Sales_step], CONSTRAINED) ) ON COLUMNS
FROM [SALES_PIPE])
输出为:
现在我想在没有单独销售步骤的情况下为每个城市建立总计,但只显示最大存档销售阶段排名。结果必须是:
我尝试了以下代码来做到这一点:
WITH
MEMBER [Measures].[rank max] AS
case [Sales_step].currentmember.member_caption
when 'Contacts' then 1
when 'Clients' then 2
when 'Funded' then 3
else 0 end
SELECT {[Measures].[rank max],
[Measures].[qnt]} ON COLUMNS,
NON EMPTY [City].CHILDREN ON ROWS
FROM ( SELECT ( STRTOSET(@[Sales_step], CONSTRAINED) ) ON COLUMNS
FROM [SALES_PIPE])
它不会产生错误,但是 returns 计算成员 [Measures] 的空值。[rank max]:
只有当我将一个值传递给@[Sales_step] 参数时它才起作用。虽然我需要一个多值参数 运行。当我在 case 子句中更改此代码段时:
case [Sales_step].currentmember.member_caption
至:
case strtomember(@[Sales_step]).member_caption
它抛出了一个错误 "The STRTOMEMBER function expects a member expression for the 1 argument. A tuple set expression was used"。当我也使用它时,单参数和多参数都会出错:
case strtoset(@[Sales_step]).currentmember.member_caption
我需要如何修改计算成员 [Measures].[rank max] 以获得具有最大等级的所需结果,以传递 @[Sales_step] 多值参数?
我想知道这样的东西是否有效:
WITH
SET [S] AS
NonEmpty(
EXISTING [Sales_step].CHILDREN,
([City].CURRENTMEMBER, [Measures].[qnt]) //<<I think that [City].CURRENTMEMBER is probably redundant in this tuple
)
MEMBER [Mx] AS
CASE
WHEN INTERSECT([S], {[Sales_step].[Funded]}).COUNT = 1 THEN 3
WHEN INTERSECT([S], {[Sales_step].[Clients]}).COUNT = 1 THEN 2
WHEN INTERSECT([S], {[Sales_step].[Contacts]}).COUNT = 1 THEN 1
END
...
...