Power BI之DAX神功:答網(wǎng)友問13 Values與Filters的區(qū)別
友情提示:網(wǎng)友咨詢的是Filters函數(shù),不是Filter函數(shù)
一、網(wǎng)友提問


二、回答網(wǎng)友問題
《DAX神功》第1卷第9回 基礎(chǔ)表函數(shù)之VALUES與DISTINCT函數(shù)和空行
你要先理解Values是做什么的,才能談Values與Filters的區(qū)別
你給我發(fā)來的DAX原理之父夕某團(tuán)隊的文章我看了,我這人有個嗜好,我從不證明誰是錯的,我只展示我自己的證明結(jié)果。我堅信,知識無論對錯,只要不違法,不違反公序良俗,都是可以放出來互通有無的,沒有必要去貶低別人抬高自己。
【1】Filters到底是什么函數(shù)?我來證明:
假設(shè)兩個班級都有人叫張三,表格如下:

1. Filters參數(shù)只能是列
【新建表】新建表=Filters('Sheet1')? //報錯,參數(shù)只能是列

2.Filters我認(rèn)為是表函數(shù)
返回:由單列組成的表,表中包含不重復(fù)值
【新建表】新建表 = FILTERS('Sheet1'[班級])

【新建表】Values新建表 = VALUES('Sheet1'[班級])

所表面上看它與Values是一樣的,其實不然。
【2】Values與Filters的區(qū)別
【度量值】FILTERS = COUNTROWS ( FILTERS ( 'Sheet1'[班級] ) )
【度量值】VALUES = COUNTROWS ( VALUES ( 'Sheet1'[班級] ) )

大家“恍然大誤”,對誤會的誤!你是不是覺得與ALL(列)很像
【度量值】ALL = COUNTROWS(all(Sheet1[班級]))

看上去還真一樣,其實不然,長像相同的人太多了。

2021年9月10日教師節(jié)我去一個飯店吃飯,好多人過來跟我打招呼錄視頻,我也蒙圈了,難到都看過我的視頻?飯店中就一個小伙子沒動,我去,原來是他!
我趕緊過去打招呼,我說:你你你怎么在這里呀,他說他在這吃點飯,還叫我俞老師,我也不姓俞呀,我也沒在意這些。我就問他,你什么時候回去呀?他說他一般過年的時候回家一趟,我說我希望呀成立一個足球?qū)W校,年薪2000萬(越南盾)你要不要來?他說啥足球?qū)W校呀?我一聽口音,我趕緊道歉,認(rèn)錯認(rèn)錯了,我以為你是C羅呢,太像了太像了。
事后我才知道,他們把我認(rèn)成了什么俞老師,我把那位帥哥認(rèn)成了C羅。

例如,我加了一個切片器:

當(dāng)我利用切片器篩選【二班】時,區(qū)別出來了吧?Filters變成了1,ALL仍然是2

ALL(列):指定表的指定列,內(nèi)部與外部篩選都不生效。詳見:《DAX神功》第1卷第8回
Values(列):返回當(dāng)前上下文可見的值
如下圖所示:Values(Sheet1[班級])? 得到一班和二班,套上CountRows后得到的結(jié)果是2。它可以被篩選出每個姓名有幾個班級。

當(dāng)我啟動切片器篩選時,他返回的是二班的姓名,每個姓名占了幾個班級

這就叫返回當(dāng)前上下文可見的值!
本案例計算過程:

Filters(列):返回當(dāng)前上下文篩選的值
Filters(Sheet1[班級])? 返回一班和二班兩個班級,套上CountRows后,返回2,如下圖所示,返回當(dāng)前上下文篩選的值是2

當(dāng)我使用切片器篩選后,他會返回二班表中,filters后的篩選值是1

本案例計算過程:

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