Mdx
MDX 可以和 SQL 不能在同一個數據庫上執行的操作
誰能解釋或向我展示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 中它將返回一個規範化的數據集,並且您必須在客戶端將其旋轉如果你想要表格格式。