【问题标题】:trying to understand mdx calculations试图理解 mdx 计算
【发布时间】:2016-09-22 23:23:43
【问题描述】:

我试图理解这个 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

这是有道理的。然后我把法国改成在会员中使用sales,像这样:

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

我可以看到,对于澳大利亚,正在使用列中的度量,而对于法国,元组中的销售额是“强劲”的,并且保持在成本之上。这意味着“成本”减法实际上是 (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

但那是错误的......

我从法国拿了销售额

 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

感谢大家的帮助

【问题讨论】:

    标签: sql-server ssas mdx


    【解决方案1】:

    终于来找我了!

    我得到的号码是:

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

    当法国需要在计算中使用度量时,它就获得了销售额。这是规则。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多