Mdx

MDX 可以和 SQL 不能在同一個數據庫上執行的操作

  • April 24, 2019

誰能解釋或向我展示MDX可以做什麼和SQL不能在同一個數據庫上做什麼?請…

這不是一個能做什麼與另一個能做什麼的問題,因為理論上你總是可以編寫 SQL 來替換你的 MDX。這是有多難的問題。

例子:

如果您想要去年在 EMEA 中排名前 5 位的客戶的每月銷售額,您的 MDX 查詢類似於

SELECT TopCount( [Clients].Members, 5, ( [Measures].[Sales], [Time].[2018] ) ) on Rows,
[Time].[2018].Children on Columns
from [Sales]
where [Geography].[EMEA]

並且您的多維數據集定義將負責從哪些表中查詢哪些列,從 dim_territory 表中獲取區域名稱,從客戶表中獲取客戶名稱等。

SQL 中的等價物類似於

Select c.customer_name, t.month_name, sum(f.sales)
from fact_sales f, dim_customer c, dim_time t, dim_geography g
where f.time_id = t.time_id 
 and f.customer_id = c.customer_id 
 and f.geography_id = g.geography_id
 and g.territory = 'EMEA'
 and t.year= 2018
 and c.customer_name in (
   select c.customer_name, sum(f.sales)
   from fact_sales f, dim_customer c, dim_time t
   where f.customer_id = c.customer_id 
     and f.time_id = t.time_id
     and t.year = 2018
   group by t.year
   limit 5
 )
group by t.year, t.month_name
order by t.month_number

不僅 SQL 查詢編寫起來要復雜得多(我什至不確定我寫的內容是否正確,tbh),而且 MDX 中的許多變體只需要稍微重寫,在 SQL 中它們將需要幾個嵌套查詢,以及大量的過濾、分組等。

另外,MDX 允許您獲得交叉表結果,您可以在其中獲得每個月的一列(或您選擇的任何維度級別),而在 SQL 中它將返回一個規範化的數據集,並且您必須在客戶端將其旋轉如果你想要表格格式。

引用自:https://dba.stackexchange.com/questions/236546