前一版語意模型發布一個月後,商業使用者開出了新的需求,需要一份包含業績目標的報表。這間公司會以月來設定不同產品種類的業績目標。
目前的語意模型長這樣:
業績目標是以產品以及月份為顆粒度,因此可以預期他主要的欄位有以下:
date_key | product_category_key | sales_target |
---|
可以發現,目前的語意模型維度表的顆粒度是「日」以及「產品」,如果直接將 product
與 sales_target
做連結會是多對多的關聯性。這時候就需要引進新的「產品種類維度表」 (product_category)。月的部分則可以透過每個月最後一天去對應 date_key 即可保持一對多的關聯性。
因此在這裡,需要透過 dbt 產生兩張表 dim_product_category
以及 fct_sales_target
做好資料轉換後,就可以在語意模型建立關聯性,資料模型也從星狀結構變成銀河結構 (galaxy schema)。
之後可以開始寫 DAX
Sales Target:= SUM('Sales Target'[sales_target])
。Sales Achievement Rate:= DIVIDE([Sales Revenue], [Sales Target], BLANK())
。完成後按同樣到左上角「檔案」 → 「發行」覆蓋原本的語意模型即可。
但這樣更新其實會產生一點小問題:報表製作者可以從兩個地方獲得 product_category_name
的資訊。而且如果從 product
表中取用,就沒辦法連動到 fct_sales_target
。這時可以採取以下步驟:
product
表的 product_category_name
欄位 → 不會影響到既有報表,又能防止新報表從 product
拿 product_category_name
。product[product_category_name]
改成 product_category[product_category_name]
。product[product_category_name]
。新增業績目標的資料模型以及量值後後,就可以交叉分析業績以及業績目標了。
同樣的不管是 Sales Revenue, Sales Target, 或是 Sales Achievement Rate,都用了同一組篩選語境。另外也可以看到業績目標在每日的列中幾乎是空白的,那是因為業績目標是以月為單位,我們處理資料的方式也讓他通通呈現在月底。如果希望可以讓每日都能分到一點業績目標,也可以在處理資料模型前就先做好資料轉換。
最後,這個報表的篩選語境,就如下圖:
維度表就像八爪章魚一樣,利用篩選語境從不同的事實表篩選出需要的列後,根據 DAX 進行相對的運算。如果維度表可以關聯的事實表越多,自然越有機會做不同商務流程的交叉分析。
Power BI 的 Data Modeling 與 DAX 到此結束。