从集合的每个成员中减去计算值-MDX
我的任务是用它的从集合的每个成员中减去计算值-MDX,mdx,Mdx,我的任务是用它的MDX等价物替换我们报告中当前使用的一些T-SQL代码。我有T-SQL的经验,但没有MDX 我目前遇到以下问题: 我们有一个商店的名单和他们的销售损失百分比 将每个商店的销售损失百分比与基线数字进行比较,以便进一步分析 我需要将前四分位的最低销售损失百分比值作为基线数字,例如,如果我们在前四分位有3家门店,百分比值为55,50,45,我需要使用45作为基线数字 基线数字是动态的,将根据所有门店的表现而变化 我的问题是-我如何从商店列表中减去基线数字及其损失销售百分比?我已尝试
MDX
等价物替换我们报告中当前使用的一些T-SQL
代码。我有T-SQL
的经验,但没有MDX
我目前遇到以下问题:
- 我们有一个商店的名单和他们的销售损失百分比
- 将每个商店的销售损失百分比与基线数字进行比较,以便进一步分析
- 我需要将前四分位的最低销售损失百分比值作为基线数字,例如,如果我们在前四分位有3家门店,百分比值为55,50,45,我需要使用45作为基线数字
- 基线数字是动态的,将根据所有门店的表现而变化
WITH Member [Measures].[TopQPer] AS
BOTTOMCOUNT(
TOPPERCENT(
[Network].[Centre Id].Members,
25,
[Measures].[Lost Sales Conversion Rate SSO]
),
1,
[Measures].[Lost Sales Conversion Rate SSO]
)
Member [Measures].[Difference] AS
(
(
[Network].[Centre Id].Members,
[Measures].[Lost Sales Conversion Rate SSO]
)
- [Measures].[TopQPer]
), FORMAT_STRING = 'Percent'
SELECT
[Measures].[Difference] ON Columns,
[Network].[Centre Id].MEMBERS ON ROWS
你很接近。
我认为
WITH Member [Measures].[TopQPer] AS
(Tail(TOPPERCENT([Network].[Centre Id].[Centre Id].Members,
25,
[Measures].[Lost Sales Conversion Rate SSO]
)
).Item(0).Item(0),
[Measures].[Lost Sales Conversion Rate SSO]
)
Member [Measures].[Difference] AS
[Measures].[Lost Sales Conversion Rate SSO] - [Measures].[TopQPer]
,FORMAT_STRING = 'Percent'
SELECT
[Measures].[Difference] ON Columns,
[Network].[Centre Id].MEMBERS ON ROWS
FROM [YourCube]
提供你想要的
无需使用Bottomcount(,1)
。相反,使用Tail()
更有效地获取最后一个条目。由于TopPercent
已经提供了已排序的数据,我们确信我们可以只获取最后一个条目
我使用一个元组作为[Measures].[TopQPer]
的值。因此,当Tail
(顺便说一句,就像BottomCount
)返回一个集合时,我通过两次应用项(0)
将该单个元素集合转换为一个成员。这实际上是两种不同的方法:第一种方法应用于集合,传递其第一个元组;第二种方法应用于元组,返回其第一个成员
在差异
度量的定义中,您可以从损失销售转化率SSO
中减去新定义的度量TopQPer
。后者将使用每个单元格中行标题中的当前[Network].[center Id]
,而TopQPer
,因为此层次结构的当前上下文在其定义中被覆盖,所以在所有中心Id中都是恒定的
最后,请注意,我使用了[Network].[center Id].[center Id].Members
,而不是您使用的[Network].[center Id].Members
。不同之处在于,我的版本排除了所有
成员,因为它使用了中心Id
级别的成员,而你的版本包括它,因为它使用了中心Id
层次结构的成员,假设这是一个标准属性层次结构,由All
级别上的All
成员和中心Id
级别上的所有底层成员组成。我假设你不想把All
成员包括在前25%的计算中,而只包括单中心
如您所见,我多次提到了一些对理解MDX至关重要的概念:数据类型(成员、元组、集、级别、层次结构),和上下文。@frankPI您在第一个自定义度量中使用的
TAIL
只有一个参数-这个函数只使用一个arg做什么?事实上是TopPercent
提供排序的数据为什么使用TAIL
根本不是。项(0)。项(0)
足够吗?@whytheq正如TAIL()的文档所述,带有一个参数的Tail相当于Tail(,1)
。由于项(0)返回集合的第一个元组,而我们需要最后一个元组,因此不能忽略它。但是,我们可以使用TopPercent(…).Item(TopPercent(…).Count-1)。Item(0)
。但是,我们需要重复两次TopPercent
表达式(或者为它引入一个命名集)。不过,我不确定这是否会提高清晰度或性能。@FrankPI谢谢。我又回来访问了MDX
(仍然不相信这种语言对我来说会变得很直观……我会继续把头撞到砖墙上,也许有些东西会陷进去!)@FrankPI是我总是低估这种语言的完美例子——认为事情会变得容易,2小时后我仍在挠头: