使用POWERBI處理實(shí)際和預(yù)算的場景

image.png

在介紹星形結(jié)構(gòu)和powerbi最佳實(shí)踐的時候,通常會被問到如何在同一個模型中處理預(yù)算和實(shí)際的問題?如果兩者的粒度不一樣怎么處理?通常我們不能通過簡單的模型和關(guān)系處理這個問題,這需要復(fù)雜的DAX計算。但是這里的解決方案是,我們可以通過簡單的模型解決這個問題!下面我們會通過一個案例來介紹解決過程,使用簡單模型如何處理預(yù)算和實(shí)際粒度不同的問題。

銷售的星形模型

事實(shí)表包含了發(fā)生的業(yè)務(wù),其中保存了數(shù)值和可聚集的數(shù)值。下面這個FactResellerSales表就是一個事實(shí)表,DimProduct,DimDate,DimSalesTerritory,DimEmployee表。


image.png

建立模型的步驟:
1.把數(shù)據(jù)表加載到模型中
2.選擇對于的表
3.移除DimSalesTerritory 和 DimEmployee之間的關(guān)系
4.把FactResellerSales 和 DimEmployee的關(guān)系設(shè)為活動的
5.使用FactResellerSales中的OrderDateKey和DimDate表的DateKey建立關(guān)系

上面這樣的模型就是一個典型的星形模型。這個模型可以很好的處理銷售相關(guān)的問題。但是,當(dāng)我們要把另外一個不同粒度的表格添加到模型中的時候,似乎建立模型就有些困難。

銷售指標(biāo):一個粒度不同的表

舉個栗子,這里我們使用銷售指標(biāo)來替代預(yù)算表,也是和業(yè)務(wù)表是不同粒度的。概念是一樣的。我們要把一個粒度不同的表添加到模型中。銷售指標(biāo)表記錄的是每個員工每個季度的銷售指標(biāo)數(shù)值。粒度是每員工每季度,而銷售表的粒度是每員工每天每地區(qū)每產(chǎn)品。


image.png

連接兩個不同粒度的表的難點(diǎn):

如果你要對著兩種表(指標(biāo)和實(shí)際)添加到星形模型中,那么一般會遇到下面著兩個問題:
1.如何把指標(biāo)表連接到日期表?
2.如果我們建立了一個季度的維度表,那么如何把這個表和日期表關(guān)聯(lián)?會形成一個雪花模型?

我們的目標(biāo)是建立一個簡單的模型來解決這個問題,也還是使用星形模型

連接指標(biāo)表和日期表

雖然這里我們的銷售指標(biāo)表使用的粒度是基于季度的,我們還是可以把它連接到日期表。這樣的方法可以避免額外的維度表以及產(chǎn)生雪花模型。有個需要考慮的是,我們要對每個季度確定一個默認(rèn)的日期。例如,我們可以把每個季度的第一天設(shè)置為這個日期值。

要達(dá)到這個目標(biāo),我們需要在指標(biāo)表建立一個列,下面的圖中可見,我們使用了YYYYMMDD的格式。


image.png

通過以下步驟可以建立下面的列:
1.基于季度值,建立月份值
2.用月的第一天建立自定義列。

要建立季度一個月的值,我們使用下面著公式即可以完成:

calculation of ((<quarter-1>*3)+1)

[圖片上傳中...(image.png-aa0d4d-1565855207069-0)]
這個計算我們放在Power Query Editor中完成。

第二步就是在這個基礎(chǔ)上建立一個DateKey列。

這里,我們要確保的是,月份值都是兩位的長度,通過三個步驟可以完成:1.把值轉(zhuǎn)換為文本 2.對該列添加前綴“0” 3.提取該列右邊的兩個位置的值。

把數(shù)值類型轉(zhuǎn)換為文本:


image.png

把列添加前綴:


image.png

添加“0”作為前綴:
image.png

提取字符串末尾兩位字符:


image.png

結(jié)果是這樣:
image.png

現(xiàn)在,我們已經(jīng)得到了我們需要的最后的步驟是建立一個自定義列,把年月日連接起來
image.png

然后把DateKey的值轉(zhuǎn)換整數(shù),我們現(xiàn)在可以把其他中間過程的列給刪除了。
image.png

這里我們沒有介紹其中的詳細(xì)步驟,因?yàn)閷?shí)際中,各自的數(shù)據(jù)不一定就是季度的粒度,然后對于日期的格式,可能也是不同的版本。無論使用什么方法,主要的目標(biāo)就是讓我們的表可以直接連接到日期維度表,而不同新增其他的維度。

星形模型無處不在

在對指標(biāo)表添加了DateKey后,我們可以通過它連接到日期表和employee表,這里我們依舊是星形模型。


image.png

這里我們不需要使用雙向的關(guān)系,或者把一個維度連接到另外一個維度。這個模型可以輕松解決我們關(guān)于預(yù)算和實(shí)際的問題。

案例分析

下面簡單的展示一些分析的案例,我們從處理實(shí)際和預(yù)算的場景中,建立了一些指標(biāo)和報表。所有這些工作都不需要特別的DAX函數(shù)計算以及使用雙向的關(guān)系等。之所以能這樣實(shí)現(xiàn),是基于正確的建立了數(shù)據(jù)模型。

DAX案例指標(biāo)

這里我們只建立了兩個計算,很簡單,分別是bud vs act:


image.png

以及Bud vs Act %:


image.png

報表案例

建立了如下這樣的案例:


image.png

從Employee角度:


image.png

以及這個通過上面兩個頁面下鉆后的詳情頁:
image.png

這個模型的優(yōu)點(diǎn)

這里,我們展示了一個處理預(yù)算和實(shí)際情況的完整數(shù)據(jù)模型。這個模型繼承了星形模型的全部優(yōu)點(diǎn),包括但是不限于如下:
1.不需要額外的建立關(guān)系。只需要在事實(shí)表和維度表之間建立簡單的關(guān)系就可以了。
2.不需要使用雙向的關(guān)系。
3.不需要使用多對多關(guān)系。
4.不需要使用復(fù)雜的DAX函數(shù)計算。
5.處理計算需求的時候,性能上會更優(yōu)秀。

改進(jìn)的地方

這模型仍然還有一些地方可以進(jìn)行改進(jìn),例如,如果你要在更低的一個粒度上分析數(shù)據(jù),你需要額外的一些考慮。例如,如果你需要在“天”的級別上分析數(shù)據(jù)(注意,我們的指標(biāo)數(shù)據(jù)是基于季度的,而不是“天”),然后,你需要一些其他的計算。這個我們會在另外的時間探討以下。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容