精品丨模型關(guān)系介紹

PowerBI中的模型關(guān)系相信小伙伴們都不會感覺到陌生,因為一份優(yōu)秀的報表無法離開數(shù)據(jù)模型的支撐呕臂。
對比其它BI類工具而言,白茶認為其建模功能才是最為突出的功能點。

模型關(guān)系類型

PowerBI中我們常用的模型關(guān)系一共包含5類:

  • 一對一關(guān)系(1:1)

  • 一對多關(guān)系(1:*)

  • 多對多關(guān)系(*:*)

  • 虛線關(guān)系(1:N)

  • 無關(guān)系

多對一關(guān)系在白茶看來與一對多其實沒有太大區(qū)別无午,這里就不單獨羅列了。

一對一

一對一關(guān)系通常表示維度表中的所有維度與事實表中都是一一對應(yīng)的祝谚。

假設(shè)Dim表中只有3行數(shù)據(jù)宪迟,那么與之對應(yīng)的Fact表也是只有3行數(shù)據(jù),這種場景在實際應(yīng)用中并不多見交惯。

一對一關(guān)系可以設(shè)置篩選器方向為交叉篩選次泽,即除了利用Dim表來篩選Fact表以外,用Fact表也可以反向來篩選Dim表席爽。

如果想避免一對一情況下Fact表對Dim進行篩選意荤,可以將模型關(guān)系更改為一對多,再將模型篩選器方向改為單向即可只锻。

一對多

一對多關(guān)系可以說是模型關(guān)系中最常見的一種玖像,也是使用頻率最高的一種了,通常表示Fact表中的多行記錄屬性在Dim表中均可以找到對應(yīng)項齐饮,也是主流模型的設(shè)計思路捐寥。

也因此派生出了兩種模型設(shè)計思路:星型模型雪花模型

多對多

多對多的關(guān)系通常發(fā)生在數(shù)據(jù)顆粒度不統(tǒng)一的場景祖驱,例如Fact表中最細的顆粒度包含產(chǎn)品握恳、門店、銷售羹膳、地區(qū)睡互,而Target目標只針對門店或者地區(qū)。

那么這種情況下陵像,將Fact和Target在同一個上下文中展示就珠,且包含銷售顆粒度的時候,則相同門店或相同地區(qū)的銷售其Target值是一致的醒颖。

類似于這種場景妻怎,也有可能是兩張Fact表相關(guān)聯(lián),需要注意交叉篩選器方向泞歉。

虛線關(guān)系

我們在創(chuàng)建模型關(guān)系時逼侦,一旦勾選了使此關(guān)系可用,那么創(chuàng)建的模型關(guān)系都屬于實線關(guān)系腰耙,通常也叫激活的關(guān)系榛丢。

與之對應(yīng)的,取消使此關(guān)系可用的模型關(guān)系則為虛線關(guān)系挺庞,也叫未激活的關(guān)系晰赞。

這種情況通常發(fā)生在Fact表中存在雙屬性列與同一Dim表建立關(guān)系時。

例如:
Fact表中既有訂單日期,也有發(fā)貨日期和送達日期掖鱼,都需要與日期表建立關(guān)聯(lián)然走,模型之間只能有1條激活關(guān)系,那么剩下的2條關(guān)系則處于未激活的狀態(tài)戏挡。

這個場景在實際應(yīng)用中并不多見芍瑞,面對未激活的關(guān)系,我們可以在構(gòu)建DAX函數(shù)時褐墅,通過USERELATIONSHIP函數(shù)來激活其他關(guān)系拆檬。

無關(guān)系

無關(guān)系其實比較好理解,就是表與表之間掌栅,并不存在任何關(guān)系秩仆。

對比上面的其他類型關(guān)系的使用率,無關(guān)系僅次于一對多猾封。

是的澄耍,你沒看錯,無關(guān)系使用頻率非常的高晌缘。

無關(guān)系適用場景非常的多齐莲,在字段參數(shù)功能發(fā)布之前,我們需要創(chuàng)建動態(tài)軸磷箕,需要創(chuàng)建多屬性維度表時选酗,需要無關(guān)系。

服裝場景下岳枷,需要篩選某一顏色的產(chǎn)品銷量芒填,且單個SKU是包含多顏色時,需要無關(guān)系空繁。

RLS權(quán)限設(shè)計時殿衰,權(quán)限表與維度表之間也是無關(guān)系。

而在DAX函數(shù)中盛泡,可以用來處理無關(guān)系的函數(shù)闷祥,也非常的多,比如IN傲诵、TREATAS凯砍、INTERSECT、FIND拴竹、SEARCH悟衩、VAR等,這些其實都可以用來處理無關(guān)系栓拜。

當然座泳,從性能的角度出發(fā)斑响,雖然TREATAS函數(shù)某些場合下表現(xiàn)接近于實線關(guān)系,但還是推薦使用實線關(guān)系钳榨。

星型模型與雪花模型

星型模型

星型模型表示Fact表位于中心,Dim表直接與事實表建立模型關(guān)系纽门。

對于DAX計算來說薛耻,星型模型其實適用大部分場景,而且很大程度上可以避免模型設(shè)計上帶來的性能損耗赏陵。

雪花模型

雪花模型表示Dim表經(jīng)過規(guī)范化處理饼齿,多個Dim表通過串聯(lián)的方式,與Fact表關(guān)聯(lián)到一塊蝙搔,單表沒有冗余缕溉,可以避免數(shù)據(jù)冗余的存儲問題

缺點也很明顯吃型,在DAX計算的時候证鸥,會因為雪花模型導致上下文轉(zhuǎn)化過程中產(chǎn)生性能損耗

模型關(guān)系注意事項

參照完整性

從概念上來說勤晚,參照完整性并不是很好理解枉层,說的通俗一點就是Fact中的維度,Dim表中不存在赐写。

如上圖所示鸟蜡,F(xiàn)act表存在的類別在Dim表是不存在的,因此這些行值所對應(yīng)的數(shù)據(jù)都會被匯總歸類到空白挺邀。

如果Dim表中的類別本身就包含空白選項揉忘,那么因為參照完整性的空白數(shù)據(jù)會與空白選項的數(shù)據(jù)合并

這其實是不利于后期運維的端铛,因此要盡量保證Dim表與Fact表的維度都是完整的泣矛。

有趣的是,VALUES參照完整性沦补,DISTINCT不考慮參照完整性乳蓄,感興趣的小伙伴可以自己動手測試。

注意夕膀,因為模型關(guān)系產(chǎn)生的擴展表相關(guān)問題這里就不贅述了虚倒。

日期表

日期表單獨拿出來講的原因就是因為它太重要了,日常開發(fā)中用戶需要的指標基本上都無法脫離同環(huán)比产舞,因此日期表是重中之重魂奥。

  • 日期列需要注意日期和日期/時間不是一回事

  • 能使用自己創(chuàng)建的日期表,就不要使用內(nèi)部自動生成的

  • 能使用DAX函數(shù)自己計算時間指標易猫,就不要使用時間智能函數(shù)

  • 能標記日期表就進行標記耻煤,可以避免模型中出現(xiàn)隱藏的自動日期表

  • 文件設(shè)置中的新文件的自動日期/時間自動關(guān)系一定要關(guān)閉

以下是利用DAX創(chuàng)建日期表的通用代碼,可以根據(jù)Fact日期創(chuàng)建對應(yīng)的日期表:

Dim_Date =
GENERATE (
    CALENDAR ( MIN ( 'Fact'[DATE] ), MAX ( 'Fact'[DATE] ) ),
    //'Fact'[DATE]需要根據(jù)自身情況調(diào)整
    VAR DA = [Date]
    VAR YEAR =
        YEAR ( DA )
    VAR QUARTER =
        "Q" & FORMAT ( DA, "Q" )
    VAR MONTE =
        FORMAT ( DA, "MM" )
    VAR DAY =
        DAY ( DA )
    RETURN
        ROW (
            "Year", YEAR,
            "Quarter", QUARTER,
            "Month", MONTE,
            "DayOfMonth", DAY,
            "YearQuarter", YEAR & QUARTER,
            "YearMonth", YEAR & MONTE,
            "YearMonthCount",
                YEAR * 12 + MONTE
        )
)

安全篩選器

當模型關(guān)系為一對一或者多對多時,此時交叉篩選器方向選擇雙向哈蝇,則可以選擇是否在兩個方向上應(yīng)用安全篩選器棺妓。

如圖,我們現(xiàn)在添加了RLS權(quán)限炮赦,設(shè)定Fact_Sales表的Key等于A怜跑。

模型未應(yīng)用安全篩選器,其結(jié)果如下:

模型應(yīng)用了安全篩選器吠勘,其結(jié)果如下:

不開安全篩選器性芬,則RLS僅對單表生效,打開安全篩選器剧防,則RLS會對雙端表生效植锉。

題外話

某些場景下,F(xiàn)act表中可能缺少某些Dim表屬性峭拘,需要創(chuàng)建列將Dim與Fact表關(guān)聯(lián)俊庇,這種場景下切忌將列設(shè)置為BlankNull,一定要將列設(shè)置一個默認值鸡挠,否則有可能造成云端數(shù)據(jù)刷新問題暇赤。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宵凌,隨后出現(xiàn)的幾起案子鞋囊,更是在濱河造成了極大的恐慌,老刑警劉巖瞎惫,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溜腐,死亡現(xiàn)場離奇詭異,居然都是意外死亡瓜喇,警方通過查閱死者的電腦和手機挺益,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乘寒,“玉大人望众,你說我怎么就攤上這事∩⌒粒” “怎么了烂翰?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蚤氏。 經(jīng)常有香客問我甘耿,道長,這世上最難降的妖魔是什么竿滨? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任佳恬,我火速辦了婚禮捏境,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毁葱。我一直安慰自己垫言,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布倾剿。 她就那樣靜靜地躺著骏掀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柱告。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天笑陈,我揣著相機與錄音际度,去河邊找鬼。 笑死涵妥,一個胖子當著我的面吹牛乖菱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蓬网,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼窒所,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帆锋?” 一聲冷哼從身側(cè)響起吵取,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锯厢,沒想到半個月后皮官,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡实辑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年捺氢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剪撬。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡摄乒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出残黑,到底是詐尸還是另有隱情馍佑,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布梨水,位于F島的核電站挤茄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏冰木。R本人自食惡果不足惜穷劈,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一笼恰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧歇终,春花似錦社证、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奕短,卻和暖如春宜肉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翎碑。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工谬返, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人日杈。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓遣铝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親莉擒。 傳聞我的和親對象是個殘疾皇子酿炸,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

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