试图理解 mdx 计算

trying to understand mdx calculations

我正在尝试了解此 MDX 查询背后的数学原理。

TL;DR: 这个查询是怎么查询的运行? ("div"是怎么计算的?)

WITH 
member [Customer].[Country].[x] as (([Customer].[Country].[Australia]) - ([Customer].[Country].[France], [measures].[sum sales]))
member [measures].[div] as ([Measures].[Sum Sales] / [Measures].[Sum Cost])

SELECT  
{ [measures].[div] } 
ON COLUMNS, 
{ [Customer].[Country].[x] } 
ON ROWS 

长话短说:

我有一个层次结构 [Customer].[Country] 并衡量销售额和成本。

对于这个查询:

SELECT  
{ [Measures].[Sum Sales], [Measures].[Sum Cost] } 
ON COLUMNS, 
{ [Customer].[Country].[Australia] , [Customer].[Country].[France] } 
ON ROWS 

我得到的结果是:

Australia: cost = 8266005, sales = 18005422
France:    cost = 4478131, sales = 9610041

我创建了这个会员:

// substract france from australia
member [Customer].[Country].[x] as (([Customer].[Country].[Australia]) - ([Customer].[Country].[France]))

和 运行 使用它而不是 2 个成员的查询:

WITH 
member [Customer].[Country].[x] as (([Customer].[Country].[Australia]) - ([Customer].[Country].[France]))

SELECT  
{ [Measures].[Sum Sales], [Measures].[Sum Cost] } 
ON COLUMNS, 
{ [Customer].[Country].[x] } 
ON ROWS 

并得到以下结果:

x: cost = 3787874, sales = 8395381

这是有道理的。然后我将 f运行ce 更改为在会员中使用销售额,如下所示:

WITH 
member [Customer].[Country].[x] as (([Customer].[Country].[Australia]) - ([Customer].[Country].[France], [measures].[sum sales]))

SELECT  
{ [Measures].[Sum Sales], [Measures].[Sum Cost] } 
ON COLUMNS, 
{ [Customer].[Country].[x] } 
ON ROWS 

得到这个结果:

x: cost = -1344036, sales = 8395381

我可以看到,对于澳大利亚,正在使用列中的度量,对于 f运行ce,元组中的销售额是 "strong" 并且保留在成本之上。这意味着 "cost" 减法实际上是 (AU,cost) - (FR,sales)。

所以我试试这个(这就是问题所在!!!)

我设置了自定义度量:

member [measures].[div] as ([Measures].[Sum Sales] / [Measures].[Sum Cost])

并与其他措施一起放在列上:

WITH 
member [Customer].[Country].[x] as (([Customer].[Country].[Australia]) - ([Customer].[Country].[France], [measures].[sum sales]))
member [measures].[div] as ([Measures].[Sum Sales] / [Measures].[Sum Cost])

SELECT  
{ [Measures].[Sum Sales], [Measures].[Sum Cost], [measures].[div] } 
ON COLUMNS, 
{ [Customer].[Country].[x] } 
ON ROWS 

x 销售额和成本的结果相同。 "div" = -6.2463950147143。 它是如何计算的? 我猜应该是:

(AU,sales) / (AU,cost) - (FR,sales) = 18005422 / 8266005 - 9610041 = -9610038.82175

但这是错误的...

我从 f运行ce

中取出销售额
 member [Customer].[Country].[x] as (([Customer].[Country].[Australia]) - ([Customer].[Country].[France]]))

并得到了预期的结果:

 div = ((AU,sales) - (FR,sales)) / ((AU,cost) - (FR,cost)) = (18005422 - 9610041) / (8266005 - 4478131) = 2.216383

感谢所有帮助

终于想到了!

我得到的号码是:

div = ((AU,sales) - (FR,sales)) / ((AU,cost) - (FR,sales)) = (18005422 - 9610041) / (8266005 - 9610041) = -6.2463959

每当法国需要在计算中使用一种衡量标准时,它就会获得销售额。这是规则。

希望这对以后的人有所帮助,尽管似乎没有人对此感兴趣...:(