Power BI之DAX神功:第4卷第12回 管理關(guān)系中的歧義
一、什么是歧義
歧義是在理解上會(huì)產(chǎn)生兩種或兩種以上可能,但在當(dāng)時(shí)語(yǔ)境中只利用其中一種含義的詞和句。
《DAX神功》第1卷第2回?我給大家展示了一個(gè)模型,線路2行不通,因?yàn)榘缌x。但是當(dāng)你使用表1字段篩選表4時(shí),他會(huì)默認(rèn)使用線路1,DAX會(huì)自動(dòng)選擇最短線路,規(guī)避歧義。
為什么會(huì)這樣呢,我們今天來(lái)講清楚。


我再次忠告大家,新人能用1張表不用2張表,能用2張表不用3張表,4張表含以上不是大神就是笑話。1張表和2張表都不會(huì)出現(xiàn)歧義。出現(xiàn)歧義至少3張表。等你變強(qiáng)了,想用幾張用幾張。
二、理解活動(dòng)關(guān)系中的歧義
你下班回家有兩條路可以走,有一條路在修路,你肯定會(huì)選擇第2條路,CROSSFILTER停用一條路的同時(shí),DAX會(huì)主動(dòng)選擇另一條路。下面三個(gè)度量值:
返回結(jié)果:

線路2是怎么計(jì)算的呢?

是這樣計(jì)算的:

產(chǎn)生歧義的原因:表2與表3使用了雙向箭頭,避開方法就是杜絕使用雙向箭頭。
但是你要發(fā)現(xiàn)產(chǎn)生歧義的表格規(guī)則是什么?
在一條線路上出現(xiàn)了: 多~1~多 這樣的關(guān)系,且開啟了雙向篩選,這種情況很容易產(chǎn)生歧義。

三、解決非活動(dòng)關(guān)系中的歧義
關(guān)于這個(gè)問(wèn)題《權(quán)威指南》的表也復(fù)雜了,而且有一個(gè)業(yè)務(wù)問(wèn)題作者默認(rèn)大家都懂。用下面這兩張表就夠了,數(shù)學(xué)不是背公式,公式全靠推導(dǎo),表也是一樣。


我想獲得每個(gè)人首次購(gòu)買日期:你總不能讓辦會(huì)員卡的顧客必須在你的商場(chǎng)購(gòu)物一次后持小票辦會(huì)員卡吧?國(guó)內(nèi)還真有這種情況,如果他為了獲取每個(gè)會(huì)員的首次購(gòu)買日期。那就太可笑了
【1】在會(huì)員表中新建列:
// 原理詳見:《DAX神功》答網(wǎng)友問(wèn)12.為什么LastDate與Max結(jié)果不同
// 例如FIRSTDATE就是特殊的時(shí)間智能日期函數(shù),內(nèi)部嵌套了隱形的Calculate
返回結(jié)果:

【2】參照銷售表生成日期表
【3】建立如下關(guān)系

虛線關(guān)系沒(méi)激活=沒(méi)有關(guān)系,那現(xiàn)在的模型是什么樣?1端~多端~1端,這是一個(gè)正常的模型

如果我使用USERELATIONSHIP函數(shù)啟用虛線關(guān)系,那么原來(lái)的實(shí)線關(guān)系就被暫時(shí)停用
詳見《DAX神功》第1卷第21回?USERELATIONSHIP函數(shù)
返回結(jié)果:

原理如下:

這不禁讓我想起《逃學(xué)威龍》,星哥開走了烏鴉的車,達(dá)叔說(shuō):我還沒(méi)上車

《權(quán)威指南》提到:清除歧義的規(guī)則還沒(méi)有正式發(fā)布,可能哪天發(fā)布了就會(huì)得到改善。
《權(quán)威指南》同時(shí)提出:處理歧義和關(guān)系時(shí),黃金法則是保持簡(jiǎn)單。
《DAX神功》不建議新人嘗試?yán)盟惴ㄏ缌x,你聽弟弟一句話:消除歧義這水太深了,你根本把握不住……

《孫興華講PowerBI火力全開》PowerBI必學(xué)課程
https://www.bilibili.com/video/BV1qa4y1H7wp
《DAX神功》文字版合集:
https://www.bilibili.com/read/readlist/rl442274
《DAX神功》視頻版合集:
https://www.bilibili.com/video/BV1YE411E7p3
《DAX神功番外篇》文字版合集:
https://www.bilibili.com/read/readlist/rl478271
PowerBI(DAX函數(shù))、PowerQuery(M函數(shù))、Python辦公自動(dòng)化、Python爬蟲、Python數(shù)據(jù)分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等
https://www.bilibili.com/read/cv10222110