微軟商業(yè)智能實(shí)戰(zhàn)九:SQL和MDX的區(qū)別

上一篇文章我們簡(jiǎn)單聊了SSAS技術(shù)凝危,今天我們將從基本概念、BI 語義模型和分析場(chǎng)景來介紹 MDX 與 SQL 的區(qū)別尉共。看完本文之后弃锐,相信您會(huì)更加了解為什么 MDX 比 SQL 加適合復(fù)雜分析場(chǎng)景袄友。相信從事過數(shù)據(jù)分析相關(guān)工作的小伙伴,對(duì)于SQL都不陌生霹菊。在各行各業(yè)往往都會(huì)有復(fù)雜的分析需求剧蚣,如半累加,多對(duì)多旋廷,時(shí)間窗口分析等鸠按,編寫SQL語句在處理這些分析場(chǎng)景時(shí)就有些捉襟見肘。而這些分析場(chǎng)景的處理使用MDX語法是最合適的饶碘。下面我們來一起看一些具體對(duì)比分析目尖。

一、MDX 和 SQL 基本概念

1.1熊镣、MDX 是什么卑雁?

MDX ,多維表達(dá)式(Multidimension eXpressions) 是一種 OLAP 多維數(shù)據(jù)集的查詢語言绪囱,類似于SQL的數(shù)據(jù)庫查詢語言测蹲。最初由微軟在1997 年作為 OLEDB for OLAP 規(guī)范引入,隨后集成在 SSAS 技術(shù)中鬼吵。MDX僅僅只是一個(gè)微軟的規(guī)范扣甲,并不是一個(gè)開放的標(biāo)準(zhǔn)。但是這個(gè)規(guī)范正在被越來越多的OLAP服務(wù)提供商所采用齿椅。這正是MDX生命力頑強(qiáng)的體現(xiàn)琉挖。

一個(gè)基本的MDX Select語句樣例如下:

with member [Measures].[DoubleAmount] as '[Measures].[Sales Amount] * 2'

select [Account].[Accounts].Levels(1).AllMembers on columns,

{[Measures].[Sales Amount],? [Measures].[DoubleAmount]} on rows

from [Adventure Works]

where ([Date].[Fiscal].[Fiscal Year].&[2002])

“with” 語句部分;樣例中的第1行涣脚。該語句用于獲取數(shù)據(jù)前的預(yù)處理示辈。在預(yù)處理的過程中,我們可以定義各種各樣的計(jì)算遣蚀,這些計(jì)算包括可命名集合和計(jì)算成員矾麻。在本樣例中,我們定義的是計(jì)算成員芭梯。

通過分析這個(gè)MDX語句樣例险耀,我們可以看出MDX語句有以下幾個(gè)部分:

“select” 語句部分;樣例中的第2玖喘,3行甩牺。該語句用于選擇可獲取的數(shù)據(jù)。

“from” 語句部分累奈;樣例中的第4行贬派。該語句用來定義我們從哪個(gè)數(shù)據(jù)塊獲取數(shù)據(jù)急但。

“where” 語句部分;樣例中的第5行赠群。該語句用來切割數(shù)據(jù)塊羊始,并合計(jì)數(shù)據(jù)。

在這4個(gè)部分中查描,我們可以根據(jù)自己的需求寫出很復(fù)雜的MDX語句以獲得相應(yīng)的數(shù)據(jù)突委。

1.2、SQL 是什么冬三?

SQL匀油,結(jié)構(gòu)化查詢語言 (Structured Query Language) 是一種用于管理關(guān)系型數(shù)據(jù)庫的編程語言,包含 DQL(查詢)勾笆、DML(增刪改)敌蚜、DDL(定義修改元數(shù)據(jù)) 和 DCL(權(quán)限、事務(wù)控制)窝爪。SQL的應(yīng)用范圍也非常廣弛车,本文為了更好讓小伙伴們了解SQL和MDX的區(qū)別,本文只涉及兩種語言的查詢部分的對(duì)比蒲每。一個(gè)基本的SQL Select語句樣例如下::

select * from 數(shù)據(jù)表 where字段名?= 字段值 ?group by 字段名 order by 字段名 [desc]"纷跛。

通過分析這個(gè)sql語句樣例,我們可以看出SQL語句有以下幾個(gè)部分:

select返回用指定的條件在一個(gè)數(shù)據(jù)庫中查詢的結(jié)果

WHERE子句篩選出滿足條件的行集邀杏;

GROUP BY子句對(duì)行集中的行做分組合并贫奠,使得多個(gè)行對(duì)應(yīng)于結(jié)果集中的一行;

應(yīng)用ORDER BY子句對(duì)結(jié)果集中的行排序望蜡。

二唤崭、MDX 和 SQL 查詢方式的主要區(qū)別

2.1、 MDX Select 部分是維度度量或其表達(dá)式脖律。

SQL Select 部分是列或列的表達(dá)式谢肾。

2.2、MDX From部分是多維數(shù)據(jù)集(Cube)小泉,是提前關(guān)聯(lián)并聚合好的數(shù)據(jù)勒叠,查詢時(shí)不需要指定關(guān)聯(lián)關(guān)系。

? ? SQL From部分是關(guān)系表(Table)膏孟,是一條條的明細(xì)記錄,查詢時(shí)需要指定表之間的關(guān)聯(lián)關(guān)系拌汇。

注意:MDX 和SQL雖然有語法區(qū)別柒桑,但是它們?cè)诤芏嗲闆r下是可以等同于的,舉個(gè)例子我們需要查詢Adventure Works 公司 2004年不同銷售渠道的銷售額噪舀。

用 MDX 表示為:

SELECT NON EMPTY { [Measures].[Sales Amount] } ON COLUMNS, NON EMPTY { ([Sales Channel].[Sales Channel].[Sales Channel].ALLMEMBERS ) } ?ON ROWS FROM ?[Adventure Works] WHERE ( [Date].[Fiscal Year].&[2004] )

用 SQL 表示為:

select case when OnlineOrderFlag=1 then 'Internet' ?

? ? ? ? ? else 'Reseller' end ?[Sales Channel],sum(LineTotal) [Sales Amount] from [Sales].[SalesOrderDetail] ?t1 left join [Sales].[SalesOrderHeader] t2 on t1.SalesOrderID=t2.SalesOrderID where year(t2.OrderDate)='2004'

? ? group by case when OnlineOrderFlag=1 then 'Internet' ?

? ? ? ? ? else 'Reseller' end

三魁淳、BI 語義模型

上一篇文章中我們也提到了目前主流的 BI 產(chǎn)品(Tableau, Power BI飘诗,Qlik等)都支持通過 SQL 接口(JDBC/ODBC)連接關(guān)系數(shù)據(jù)庫,也支持 MDX 接口(XMLA)連接多維數(shù)據(jù)庫界逛。但 BI 通過兩種接口獲取到的語義模型有較大的差異下面將具體介紹兩者的差異性昆稿。下面使用的工具有SE-DWA高效數(shù)倉搭建平臺(tái)和數(shù)據(jù)分析工具。

3.1息拜、MDX 語義模型包含維度(維度別名)溉潭,度量(度量別名),維度層級(jí)結(jié)構(gòu)等少欺,數(shù)據(jù)分析師在 BI 端不需要對(duì)模型進(jìn)行業(yè)務(wù)語義的定義喳瓣,這樣的好處是建模工程師可以在OLAP工具中統(tǒng)一定義業(yè)務(wù)用戶分析時(shí)使用的語義模型,而業(yè)務(wù)在使用 BI 工具分析時(shí)無需理解底層表結(jié)構(gòu)赞别,直接使用同步到 BI 工具的維度畏陕、度量、層級(jí)結(jié)構(gòu)仿滔、計(jì)算度量等進(jìn)行分析惠毁。

MDX 對(duì)復(fù)雜分析場(chǎng)景的控制能力比 SQL 更強(qiáng),對(duì)于一些復(fù)雜場(chǎng)景如半累加崎页、時(shí)間窗口分析等鞠绰,MDX 都可以通過簡(jiǎn)單的表達(dá)式來處理。而同樣的邏輯使用 SQL 就需要使用非常復(fù)雜的查詢才能實(shí)現(xiàn)实昨,有些場(chǎng)景甚至無法簡(jiǎn)單通過 BI 發(fā)送的 SQL 查詢來實(shí)現(xiàn)洞豁。

SE-DWA建立的OLAP模型在Tableau中同步OLAP模型

3.2、SQL 語義模型

數(shù)據(jù)庫包含源表和源列荒给,需要分析師 /業(yè)務(wù)用戶手動(dòng)定義表的模型關(guān)聯(lián)關(guān)系丈挟,維度的友好名稱,度量的友好名稱及聚合類型志电,層級(jí)結(jié)構(gòu)的源列順序等曙咽。這些完成后才能進(jìn)行正常的業(yè)務(wù)分析,這樣的好處是終端用戶可針對(duì)分析需求靈活的進(jìn)行數(shù)據(jù)建模挑辆,但同時(shí)也要求用戶對(duì)底層數(shù)據(jù)結(jié)構(gòu)有一定的理解例朱。

SE-DWA建立的數(shù)倉模型在 Tableau 中基于SQL模式的表進(jìn)行建模

3.3、MDX實(shí)現(xiàn)的復(fù)雜分析場(chǎng)景

財(cái)務(wù)分析鱼蝉,是各行各業(yè)中都需要進(jìn)行分析場(chǎng)景洒嗤。其中,應(yīng)收賬款年初金額是一個(gè)半累加度量魁亦,即在時(shí)間維度上不具備累加性渔隶,但是在其他維度具備累加性。為了方便大家理解小黎子在下面進(jìn)行模擬應(yīng)收賬款的記錄如下,需要獲取每年所有客戶年初(年的第一月)和年末(年的最后一月)的應(yīng)收款的總額间唉。

我們按照分析需求绞灼,得到的結(jié)果應(yīng)該如下:

如果使用 SQL,查詢表達(dá)式如下:

如果使用 MDX呈野,需要先定義計(jì)算度量(基礎(chǔ)度量 [Measuers].[科目余額_本位幣期初金額]]=sum(本位幣期初金額])低矮,基礎(chǔ)度量 [Measuers].[科目余額_本位幣期末金額]]=sum(本位幣期

末金額])),如下:

科目余額_本位幣年初金額=([Measures].[科目余額_本位幣期初金額],[維度_日期].[會(huì)計(jì)期間].[會(huì)計(jì)期間].&[1])

科目余額_本位幣年末金額 = ([Measures].[科目余額_本位幣期末金額],[維度_日期].[會(huì)計(jì)期間].[會(huì)計(jì)期間].&[12])

MDX 查詢表達(dá)式為:

select {[Measures].[科目余額_本位幣年初金額], [Measures].[科目余額_本位幣年末金額 ]} on Columns, ?[維度_日期].[會(huì)計(jì)月份].members on Rows from [SE_財(cái)務(wù)解決方案_多維數(shù)據(jù)集]

由上可見在分析場(chǎng)景中MDX 比 SQL 更容易實(shí)現(xiàn)被冒。這個(gè)場(chǎng)景的復(fù)雜度并不高军掂,有些小伙伴可能還是認(rèn)為SQL更好統(tǒng)計(jì)分析。其實(shí)姆打,類似的場(chǎng)景還有其他的常見分析場(chǎng)景良姆,比如賬戶余額分析,倉庫的庫存分析等幔戏。另外玛追,MDX 還能夠支持多對(duì)多分析場(chǎng)景,這是 SQL 所不支持的闲延。

四痊剖、SE-DWA支撐企業(yè)部署的BI 語義層

SE-DWA提供了數(shù)據(jù)倉庫的搭建平臺(tái)可集成市面主流 BI,提供統(tǒng)一的基于大數(shù)據(jù)的業(yè)務(wù)語義層垒玲。為企業(yè)實(shí)現(xiàn)企業(yè)級(jí)業(yè)務(wù)語義層提供了技術(shù)可能性陆馁,并可滿足更多 SQL 很難滿足的復(fù)雜分析場(chǎng)景。

SE-DWA中定義日期語義表

SE-BI + SE-DWA OLAP模型 分析大數(shù)據(jù)場(chǎng)景下產(chǎn)品收入的同比環(huán)比

五合愈、總結(jié)

MDX 和 SQL 都是在 OLAP 查詢中經(jīng)常使用的語言叮贩,主流的 BI 廠商都提供對(duì)兩種接口的支持。兩者的差異在于:

1佛析、MDX 查詢對(duì)應(yīng)的是多維視圖益老,而 SQL 對(duì)應(yīng)的是關(guān)系視圖,在聚合查詢的語法上 MDX 要簡(jiǎn)單許多寸莫。

2捺萌、MDX 的語義模型更加豐富和業(yè)務(wù)友好,而 SQL 的語義模型相對(duì)簡(jiǎn)陋膘茎,需要后續(xù)再定義桃纯。

3,MDX 計(jì)算表達(dá)能力更加豐富披坏,能夠更好的支持復(fù)雜分析場(chǎng)景态坦。

綜上所述,如果業(yè)務(wù)上有復(fù)雜的分析場(chǎng)景需求如半累加棒拂,時(shí)間窗口分析等伞梯,SE-DWA創(chuàng)建的OLAP方案能夠幫您輕松處理,從而更好的專注與業(yè)務(wù)數(shù)據(jù)的分析。?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壮锻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子涮阔,更是在濱河造成了極大的恐慌猜绣,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敬特,死亡現(xiàn)場(chǎng)離奇詭異掰邢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)伟阔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門辣之,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人皱炉,你說我怎么就攤上這事怀估。” “怎么了合搅?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵多搀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我灾部,道長(zhǎng)康铭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任赌髓,我火速辦了婚禮从藤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锁蠕。我一直安慰自己夷野,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布匿沛。 她就那樣靜靜地躺著扫责,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逃呼。 梳的紋絲不亂的頭發(fā)上鳖孤,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音抡笼,去河邊找鬼苏揣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛推姻,可吹牛的內(nèi)容都是我干的平匈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼增炭!你這毒婦竟也來了忍燥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤隙姿,失蹤者是張志新(化名)和其女友劉穎梅垄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體输玷,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡队丝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了欲鹏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片机久。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赔嚎,靈堂內(nèi)的尸體忽然破棺而出膘盖,到底是詐尸還是另有隱情,我是刑警寧澤尽狠,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布衔憨,位于F島的核電站,受9級(jí)特大地震影響袄膏,放射性物質(zhì)發(fā)生泄漏践图。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一沉馆、第九天 我趴在偏房一處隱蔽的房頂上張望码党。 院中可真熱鬧,春花似錦斥黑、人聲如沸揖盘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兽狭。三九已至,卻和暖如春鹿蜀,著一層夾襖步出監(jiān)牢的瞬間箕慧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工茴恰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颠焦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓往枣,卻偏偏與公主長(zhǎng)得像伐庭,于是被迫代替她去往敵國(guó)和親粉渠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 提起 SQL淳衙,相信從事過數(shù)據(jù)分析相關(guān)工作的同學(xué),對(duì)此都不陌生饺著。在零售、銀行肠牲、物流等行業(yè)幼衰,業(yè)務(wù)往往會(huì)有復(fù)雜的分析需求...
    Kyligence閱讀 1,027評(píng)論 0 2
  • 隨著國(guó)內(nèi)ERP軟件的不斷普及,大量的公司已經(jīng)積累了很多的數(shù)據(jù)缀雳。如何從數(shù)據(jù)中提取渡嚣、挖掘?qū)I(yè)務(wù)發(fā)展有價(jià)值的信息,為企業(yè)...
    小黎子數(shù)據(jù)分析閱讀 3,197評(píng)論 0 1
  • 聲明:由于本人也是處于學(xué)習(xí)階段肥印,有些理解可能并不深刻识椰,甚至?xí)y帶一定錯(cuò)誤,因此請(qǐng)以批判的態(tài)度來進(jìn)行閱讀深碱,如有錯(cuò)誤腹鹉,...
    Eric_Hunter閱讀 1,367評(píng)論 0 1
  • 第27式 CALCULATE的DAX函數(shù)與Excel函數(shù)比較 參考閱讀:《DAX圣經(jīng)第一章、第二章敷硅、...
    PowerBI非官方閱讀 2,431評(píng)論 1 9
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月功咒,有人笑有人哭,有人歡樂有人憂愁绞蹦,有人驚喜有人失落力奋,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,523評(píng)論 28 53