DAX從入門到精通 3-6-1 了解values和distinct

了解values和distinct

之前的章節(jié)坦辟,我們學(xué)習(xí)了all引用一個(gè)列的時(shí)候诅岩,返回包含該列唯一值的表折柠。DAX還另外提供了兩個(gè)函數(shù)宾娜,它們也是返回列的唯一值,values和distinct扇售。
在evaluate中前塔,如果沒有使用其他篩選條件,values和distinct看起來效果和all一樣缘眶。但是,當(dāng)你把它們使用到DAX度量值的時(shí)候髓废,你會觀察到它們之間一些不同點(diǎn)巷懈,因?yàn)橥敢暠頃峁┎煌暮Y選條件』藕椋看下下面的度量值顶燕,它們都是計(jì)算brand和size列的唯一值。

[Products] := COUNTROWS ( Product )
[Values Brands] := COUNTROWS ( VALUES ( Product[Brand] ) )
[Distinct Brands] := COUNTROWS ( DISTINCT ( Product[Brand] ) )
[Values Sizes] := COUNTROWS ( VALUES ( Product[Size] ) )
[Distinct Sizes] := COUNTROWS ( DISTINCT ( Product[Size] ) )

values()返回所有可見的唯一值冈爹,包括了blank涌攻。而distinct也是返回唯一值,但是對不匹配的blank值進(jìn)行了排除频伤。但是如果blank已經(jīng)包含在自身的列中了恳谎,那么結(jié)果也會包含blank。所以兩者的區(qū)別就是blank是否作為了關(guān)系的條件憋肖。
舉個(gè)例子來看會更容易理解這個(gè)區(qū)別因痛,數(shù)據(jù)按照product的class進(jìn)行分類,每個(gè)類目有不同的產(chǎn)品數(shù)岸更。例如Deluxe有360個(gè)產(chǎn)品鸵膏,有11種bland,204種size怎炊。values和distinct只有在blank的位置上谭企,存在數(shù)字差異廓译。表格也提供了sales amount在檢測這個(gè)不匹配的產(chǎn)品。


image.png

另外一個(gè)區(qū)別是總計(jì)行债查,brand中非区,values比distinct多了1.而size,兩個(gè)函數(shù)返回的是相同的數(shù)字攀操,原因是size列包含了一個(gè)blank院仿,所以這個(gè)blank產(chǎn)品沒有添加一個(gè)新的數(shù)字到disinct size列。
當(dāng)沒有篩選條件的時(shí)候速和,distinct相當(dāng)于allnoblankrow歹垫,values相當(dāng)于all。
values也可以把表作為參數(shù)颠放。這情況下排惨,它返回表的左右可見單元格,也包含了空行碰凶。例如下面例子暮芭,在模型中,sales表和product表存在通過productkey的關(guān)系欲低,但是存在無法匹配的product辕宏。

[Products] := COUNTROWS ( Product )
[Values Products] := COUNTROWS ( VALUES ( Product ) )
[All NoBlank Products] := COUNTROWS ( ALLNOBLANKROW ( Product
) )
[All Products] := COUNTROWS ( ALL ( Product ) )
image.png

這個(gè)表可以看出來,當(dāng)沒有篩選條件的時(shí)候砾莱,values和all結(jié)果一樣瑞筐,包含了blank行,顯示了沒有匹配的行的在Sales Amount腊瑟。這時(shí)候聚假,不能使用distinct。如果有重復(fù)行闰非,你沒有一種單一的DAX函數(shù)來去重重復(fù)行(事實(shí)上要使用summarize來代替膘格,后面的章節(jié)會用到)。另外财松,度量值product忽略空行瘪贱,返回了當(dāng)前表的總行數(shù),結(jié)果和allnoblankrow一樣辆毡。

values函數(shù)用于值函數(shù)

雖然values是表函數(shù)政敢,但是我們通常也可以將它作為值函數(shù)來使用,這個(gè)是因?yàn)镈AX有個(gè)特性胚迫,這小節(jié)我們來學(xué)習(xí)喷户。例如,values按如下表達(dá)式使用访锻,當(dāng)選擇的某部分product都是相同的顏色時(shí)候褪尝,它返回該顏色闹获。

[Color Name] :=
IF (
COUNTROWS ( VALUES ( Product[Color] ) ) = 1,
VALUES ( Product[Color] )
)

通過圖示可以看到,當(dāng)color name列包含空行的時(shí)候河哑,它意味著有兩種或者以上的不同顏色避诽。


image.png

這里有趣的地方是,我們使用values函數(shù)作為值函數(shù)璃谨,雖然它本身返回的是一個(gè)表沙庐。不僅是values()函數(shù)有這樣的特點(diǎn),這個(gè)也適用于大部分DAX函數(shù)佳吞。
如果一個(gè)表達(dá)式返回的表只有一行一列拱雏,那么如果需要的話,系統(tǒng)就會自動(dòng)的將其轉(zhuǎn)換為一個(gè)值底扳。
實(shí)際操作中铸抑,如果返回的表是一行一列,那么就可以把該表表達(dá)式用作值表達(dá)式衷模。但是如果返回的表有多行鹊汛,那么會報(bào)一個(gè)錯(cuò)誤:A table of multiple values was supplied where a single value was expected。所以阱冶,你必須要保證刁憋,你表達(dá)式的結(jié)果只能返回一行一列。
Color Name使用了countrows來檢測返回的結(jié)果是否只有一行木蹬,另外一種方法是使用hasonevalue()函數(shù)至耻,它同樣是檢測返回的行數(shù),如果只有返回一行届囚,那么結(jié)果是true有梆。下面兩個(gè)語句有相同的結(jié)果:

COUNTROWS ( VALUES ( <column> ) ) = 1
HASONEVALUE ( <column> )

相比countrows是尖,你更應(yīng)該使用hasonevalue來意系,首先,它的可讀性更好饺汹,另外運(yùn)行速度也更快蛔添。下面這樣的寫法就是基于hasonevalue:

[Color Name] :=
IF (
HASONEVALUE ( Product[Color] ),
VALUES ( Product[Color] )
)

通常是使用values表達(dá)式作為值函數(shù)是因?yàn)椋偸欠祷匾粋€(gè)列以及可能是多個(gè)行兜辞,這個(gè)行數(shù)取決于執(zhí)行的內(nèi)容迎瞧。values的使用在很多情況下都會有使用,本書后面會多次采用這樣的方法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逸吵,一起剝皮案震驚了整個(gè)濱河市凶硅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扫皱,老刑警劉巖足绅,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捷绑,死亡現(xiàn)場離奇詭異,居然都是意外死亡氢妈,警方通過查閱死者的電腦和手機(jī)粹污,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來首量,“玉大人壮吩,你說我怎么就攤上這事〖釉担” “怎么了鸭叙?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長生百。 經(jīng)常有香客問我递雀,道長,這世上最難降的妖魔是什么蚀浆? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任缀程,我火速辦了婚禮,結(jié)果婚禮上市俊,老公的妹妹穿的比我還像新娘杨凑。我一直安慰自己,他們只是感情好摆昧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布撩满。 她就那樣靜靜地躺著,像睡著了一般绅你。 火紅的嫁衣襯著肌膚如雪伺帘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天忌锯,我揣著相機(jī)與錄音伪嫁,去河邊找鬼。 笑死偶垮,一個(gè)胖子當(dāng)著我的面吹牛张咳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播似舵,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼脚猾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了砚哗?” 一聲冷哼從身側(cè)響起龙助,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛛芥,沒想到半個(gè)月后提鸟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脆淹,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年沽一,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盖溺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铣缠,死狀恐怖烘嘱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝗蛙,我是刑警寧澤蝇庭,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站捡硅,受9級特大地震影響哮内,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜壮韭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一北发、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喷屋,春花似錦琳拨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恶耽,卻和暖如春密任,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背偷俭。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工浪讳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人社搅。 一個(gè)月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓驻债,卻偏偏與公主長得像乳规,于是被迫代替她去往敵國和親形葬。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評論 2 355

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

  • 今日抽到大牌六——愛暮的。 今日想到笙以,前期與老公發(fā)生的爭執(zhí),怎么就那么快的原諒他冻辩、與他和好猖腕,與我受的委屈相比拆祈,似乎有些...
    lovesky_3fa9閱讀 264評論 0 0
  • 墨清弦坐在病房里,幫著當(dāng)醫(yī)生的父親照顧著躺了快四天仍在昏迷中的人倘感。 墨清弦看著窗外放坏,或許他現(xiàn)在已經(jīng)在公墓那里了吧。...
    curry_19b7閱讀 177評論 0 0
  • 葵之走失在1996 〖生活不止眼前的茍且老玛,還有詩與遠(yuǎn)方〗葵之的十七歲淤年,十七歲的叛逆,十七歲的揮霍青春蜡豹,我不在乎一切...
    米粒文字閱讀 2,991評論 0 2
  • I:知覺檢核是一種正確了解別人的工具麸粮。 我們都不喜歡別人對自己的行為草草下結(jié)論:知覺檢核是通過委婉表達(dá)或者暗示對方...
    鮑帥_8a65閱讀 1,509評論 1 0