最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

概念8: 多事實表 Multiple Data Tables-(讀書筆記23)

2023-03-10 06:30 作者:京西漫步  | 我要投稿

目前為止,我們只使用過一個數(shù)據(jù)表即Sales表,實際工作中你很可能需要在數(shù)據(jù)模型中使用多個數(shù)據(jù)表。當(dāng)把第二個數(shù)據(jù)表引入Power BI時,我們可能首先想到要把新的數(shù)據(jù)表連接到原來的數(shù)據(jù)表,但這樣做是不正確的。將第二個數(shù)據(jù)表連接到數(shù)據(jù)模型的正確方法與第一個數(shù)據(jù)表建模時采用相同的方法,就是數(shù)據(jù)表應(yīng)該連接到維度表。

為了更好地理解如何處理多個數(shù)據(jù)表,讓我們看一個常見的業(yè)務(wù)場景,在實際工作中,假如公司希望加載一個Budget表和一個Sales表。這種情況下的麻煩是:預(yù)算表和銷售表通常顯示的顆粒度(數(shù)據(jù)明細級別)是不同的。例如,銷售表要體現(xiàn)每個單獨產(chǎn)品每天的銷售情況,但是預(yù)算表僅每個產(chǎn)品類別設(shè)置月級別的顆粒度。

在我們逐步對這些數(shù)據(jù)建模之前,先解釋一個的問題。

一、多對多關(guān)系 Many-to-Many Relationships

預(yù)算表的數(shù)據(jù)如下所示,Category列和Period列都有重復(fù)值,這兩列是新事實表中用于連接到模型其余部分,Category列需要連接到Products表,Period列需要連接到Calendar表。

預(yù)算表

下圖顯示了Products表的一部分數(shù)據(jù)(左)和Calendar表的一部分數(shù)據(jù)(右),仔細看的話,發(fā)現(xiàn)有什么問題嗎?

Products表與Calendar表

有兩個主要問題:

?Budget[Category]列需要連接到Product[Category],但兩列包含重復(fù)的值。

? Budget[Period]列需要連接到'Calendar'[Period]列,但這兩列包含重復(fù)的值。

Power BI針對一對多關(guān)系進行了優(yōu)化,“一端”(維度表)應(yīng)該有一列唯一值(一個主鍵),而“多端”(數(shù)據(jù)表)可以有重復(fù)值(一個外鍵)。Power BI就是按照這種方式構(gòu)建和優(yōu)化模型的。如果嘗試連接兩個在兩列中都有重復(fù)值的表,PBI會發(fā)出警告,提示這樣做有風(fēng)險。

多對多關(guān)系提示

在這個對話框的底部的這個警告信息是有原因的,在Power BI中創(chuàng)建多對多關(guān)系是非常危險的,特別是當(dāng)您不知道自己在做什么的時候,就是說你這樣建立關(guān)系是為了什么。盡管在Power BI中,它可以在某些條件下完成我們的需要(Power Pivot for Excel中無法做到這一點)。

討論這個問題,超出了本書的范圍,但是有一種方法可以在不需要多對多關(guān)系的情況下對數(shù)據(jù)建模:使用橋接表。

二、如何把 Budget表做成一個橋接表? Here’s How: Bridging a Budget Table

請按以下步驟導(dǎo)入預(yù)算表、加載所需的橋接表以及為預(yù)算編寫度量。

1.在Power BI中,單擊獲取數(shù)據(jù)(Get Data) 選擇 Excel并找到在第2章中使用的Excel文件。

2. 從導(dǎo)航列表中選擇Budget和BudgetPeriod表,如下所示。在本例中,Budget表是數(shù)據(jù)表,而BudgetPeriod表是橋接表。

準備導(dǎo)入Budget和BudgetPeriod表

3. 單擊加載。如下所示,預(yù)算表對每個類別都有每月的銷售預(yù)算,期間列的格式為YYYYMM,表示年和月。

Budget表

BudgetPeriod表既是一個橋接表,也是一種日歷表,但是它與我們使用過的日期表有些不同。從技術(shù)上講,它仍然是一個日歷表,但它是一個月度日期表,而不是一個日日期表,與Budget表一樣,它包含格式為YYYYMM的Period列,如下所示。

BudgetPeriod表

4.您還需要一個ProductCategory橋接表,但是數(shù)據(jù)源沒有,因此需要使用DAX單擊New table按鈕并鍵入如下所示的公式來創(chuàng)建一個。

手工創(chuàng)建ProductCategory表

正如您在上面看到的,新的ProductCategory表有一個包含四種產(chǎn)品類別的列表。

注意:為什么建立這兩個橋接表,以及它們的使用方式很快就會揭曉。

5.切換到模型視圖

重新排列表如下所示:將BudgetPeriod表(見下面#1)放在Calendar表的上面,將Budget表(#2)放在Sales表的旁邊。將ProductCategory表(#3)放在Products表的上方,如所示。

模型中的橋接表

6. 要了解為什么需要橋接表,請嘗試將Budget表連接到Calendar表。

? ? ? ? ? 當(dāng)您嘗試在Budget[Period]列和Calendar[Period]列之間創(chuàng)建一個新的關(guān)系時,PBI會彈出警告消息。

PBI總試圖阻止建立 多對多關(guān)系

7. 單擊“取消”關(guān)閉“創(chuàng)建關(guān)系”窗口。

Calendar表是每日日歷,而Budget表是每月預(yù)算(非常常見的業(yè)務(wù)場景)。Calendar[Peroid]列每個月有28到31個條目,Budget[Peroid]列也有重復(fù)的值。從技術(shù)上講,你可以在Power BI中創(chuàng)建多對多關(guān)系,但正如前面提到的,這樣的關(guān)系可能是低效的,也是危險的,本書中不過多介紹這種方法。

要解決這種多對多的數(shù)據(jù)建模問題,可以使用橋接表,以便僅使用一對多關(guān)系連接模型中的表。BudgetPeriod表是一個橋接表,它有一個包含唯一值(一個主鍵)的Period列。因此,你可以使用一對多的關(guān)系將Budget表連接到BudgetPeriod表。事實上,這個關(guān)系(見下面#1)是在加載數(shù)據(jù)時自動創(chuàng)建的。

8. 通過將'Calendar'[Period]列拖到BudgetPeriod[Period]列(參見下面#2),將Calendar表連接到BudgetPeriod表。

Calendar表連接到BudgetPeriod表

現(xiàn)在您需要將ProductCategory表(它也是一個橋接表)連接到Budget表。如果您嘗試將“Budget[Category]”列加入“Product[Category]”列,也會出現(xiàn)剛才的警告信息。

9.? 如果要將Budget表連接到ProductCategory橋接表,單擊并拖動Budget[Category]列到ProductCategory[Category]。

10. 要將“Product”表連接到“ProductCategory”表,單擊“Product”表并拖動“[Category]”列到“ProductCategory”表的“[Category]”列。

完成以上操作后,你應(yīng)該得到如下布局的模型。注意,當(dāng)數(shù)據(jù)模型中有很多表時,跟蹤所有的關(guān)系變得很困難,這就是我推薦使用Collie布局方法來安排表格的原因之一,如下所示。

橋接表連接完成的模型視圖

正如你在上圖中看到的,關(guān)系中“多”端的表格在下面,關(guān)系中“一”端的表格在上面。篩選總是自上而下,這種布局使我們更容易理解表之間的交互方式。如果你在BudgetPeriod表上放置一個篩選器(參見上面的#1),這個表將通過直接關(guān)系直接篩選Budget表(#4)。此外,BudgetPeriod表(#1)直接篩選Calendar表(#2),Calendar表(#2)篩選Sales表(#3)。最終的結(jié)果應(yīng)該是,應(yīng)用到BudgetPeriod表(#1)的任何篩選器都篩選了Sales表(#3)和Budget表(#4)。同樣的概念也適用于ProductCategory表(#5)。


在處理不同顆粒度的數(shù)據(jù)表時(如本例),在矩陣篩選器中使用正確的表和列非常重要。因此,當(dāng)在這樣的模型中同時使用銷售表和預(yù)算表時,你應(yīng)該在視覺效果中使用BudgetPeriod表和ProductCategory表中的列;Calendar表和Products表中的列將不能正確地篩選Sales和Budget表。

三、每個對象使用同一張表 Using One Table for Each Object

我在第二章中介紹的一個通用規(guī)則是,你應(yīng)該針對每個視覺對象使用同一張表(例如,Calendar, Product)。這樣做的一個原因是,它能讓使用數(shù)據(jù)模型的人更容易找到他們正在找的東西。上一節(jié)也提到過,加載橋接表時,必須在可視化對象中使用橋接表的列,而不是原來的模型中的維度表中的列。

只有橋接表列可以同時篩選Budget表(直接)和Sales表(間接地,通過維度表)。這可能會讓創(chuàng)建新視覺對象的用戶感到困惑,我們來看Fields窗格中的表。

字段區(qū)

有兩個日期表(calendar和BudgetPeriod)和兩個產(chǎn)品表(Products和ProductCategory)。如果用戶使用了錯誤的表列,得到的結(jié)果也將是錯誤的。在下面的圖像中,Category列來自Products表,而不是ProductCategory表,因此沒有篩選Budget表。

結(jié)果錯誤的矩陣

此外,在Calendar表中還有一些其它列(例如,Year),你可能希望在報表中使用橋接表中不存在的列,這是在數(shù)據(jù)模型中使用雙向交叉篩選的的少數(shù)幾種情況之一。

四、使用雙向交叉篩選 Enter Bidirectional Cross-Filtering

一般來說,我們都要使用單向篩選;也就是說,維度表應(yīng)該篩選數(shù)據(jù)表,而不是相反。但在特殊情況下,建議使用雙向交叉篩選,其中每個表都可以篩選另一個表,因為它解決了上面提到的兩個問題:?

1.它印證了為每個視覺對象使用一個表的概念——至少在最終用戶面前是這樣)

2.它開放了維度表中其他列的使用權(quán),可以將數(shù)據(jù)匯總到更高級別的聚合。

?? 如何使用雙向交叉篩選

1.切換到模型視圖。

2. 雙擊Calendar表和BudgetPeriod表之間的關(guān)系連線(如下所示)。

編輯關(guān)系

3.將交叉篩選方向設(shè)置從單一更改為兩者都,如下所示,并單擊確定。

將表關(guān)系調(diào)整為雙向

4.對ProductCategory表和Products表之間的關(guān)系重復(fù)此過程。下圖顯示了這些更改之后的模型視圖。

調(diào)整關(guān)系后的模型視圖

注意:現(xiàn)在的關(guān)系表明篩選器是雙向的。其含義是,如果使用Calendar表中的列,它將直接篩選Sales表(與更改交叉過濾方向之前相同),但是Calendar表現(xiàn)在也將篩選BudgetPeriod橋接表。BudgetPeriod表直接篩選Budget表,所以現(xiàn)在Calendar表將同時篩選Sales和Budget表,Products表也是如此。

5.通過單擊顯示隱藏圖標,隱藏BudgetPeriod橋接表,如下所示。

隱藏橋接表

6.對另一個橋接表ProductCategory表重復(fù)上述步驟。

做了這些操作之后,一切就顯得像是正常的樣子了。用戶現(xiàn)在可以使用Product[Category]列了(見下面#1),用戶在Fields窗格中也看不到其它搗亂的橋接表了,TOTAL BUDGET顯示正常了(#2)。此外,用戶現(xiàn)在可以使用Calendar表而不是BudgetPeriod橋接表來生成可視化報表了。

隱藏了橋接表的視圖及矩陣結(jié)果

五、向上聚合,不能向下聚合(從顆粒度級別角度) Aggregating Rolls Up, Not Down

需要注意的是,預(yù)算數(shù)據(jù)是在月份和產(chǎn)品類別級別上的,這是預(yù)算數(shù)據(jù)表中包含的最低級別的顆粒度。最低級別的顆粒度數(shù)據(jù)可以很容易地向上聚合(例如,可以向上聚合月份以創(chuàng)建年度數(shù)據(jù)),但數(shù)據(jù)不能自動創(chuàng)建更細級別的粒度(例如,類別不能自動分解為子類別)。

下圖在矩陣中顯示了“日歷”[年份]和產(chǎn)品[子類別]。

不同顆粒度的顯示結(jié)果

矩陣中的年度列能夠正確地把預(yù)算從月加到年(即,預(yù)算數(shù)字在矩陣中按行加起來)。SubCategory(矩陣上的行字段)都顯示相同的預(yù)算總額(矩陣中的年度TOTAL BUDGET列)。從技術(shù)上講,可以通過使用銷售歷史數(shù)據(jù)編寫一個預(yù)算度量值,將類別預(yù)算分配到子類別級別。你可以自己試著寫寫這個公式。可以試試以下步驟:

1. 為如何解決問題制定一個計劃,可以先用Excel做。

2. 利用你學(xué)到的使用ALL()函數(shù)計算列的百分比(參見第14章)來計算每個子類別的歷史銷售百分比。

3.使用變量將問題分解,逐個解決問題的每個部分,在進行下一步之前把之前的變量結(jié)果放在可視化對象中檢查。

六、多數(shù)據(jù)表實戰(zhàn)練習(xí) Practice Exercises: Multiple Data Tables

在預(yù)算和銷售兩個數(shù)據(jù)表上練習(xí)編寫新的DAX公式,

首先,創(chuàng)建一個新矩陣。

然后把Product[Category]放在行上,把Calendar[Peroid]放在行上,把[TOTAL SALES]放在值上。當(dāng)你的矩陣設(shè)置好后,點擊鉆取圖標中的擴展到所有級別,如下所示,展開矩陣中的所有級別。

示例矩陣

我們編寫以下幾個度量值,放到矩陣

Total Budget = SUM(Budget[Budget])

Change in Sales vs. Budget = [Total Sales] - [Total Budget]

% Change in Sales vs. Budget =DIVIDE([Change in Sales vs. Budget], [Total Budget])

示例


概念8: 多事實表 Multiple Data Tables-(讀書筆記23)的評論 (共 條)

分享到微博請遵守國家法律
渝中区| 徐汇区| 万载县| 铜梁县| 青浦区| 南投县| 格尔木市| 航空| 滦南县| 湖北省| 思茅市| 固原市| 通道| 嘉善县| 宣恩县| 威信县| 饶阳县| 奉化市| 铜鼓县| 武城县| 威远县| 宣汉县| 新龙县| 富民县| 松潘县| 梅州市| 古蔺县| 郴州市| 庆云县| 浦北县| 湘潭县| 商城县| 虹口区| 涟水县| 阜平县| 漾濞| 汉源县| 吉水县| 河东区| 吴江市| 伊金霍洛旗|