PowerBI之DAX神功:第5卷第1回 offset函數(shù)前2個參數(shù)的秘密
前言
之前我們在回答網(wǎng)友提問時,再次重申了為什么Calculate第2參數(shù)是一張表?
https://www.bilibili.com/read/cv26993478
今天就不要再問我Calculate第2參數(shù)為什么是一張表了:)
以前我們計算移動平均值,同比、環(huán)比時都使用時間智能日期函數(shù),現(xiàn)在又多了一種選擇
一、offset第二參數(shù)是可選嗎?
我們今天先說offset前兩個參數(shù)
因為微軟幫助文檔上說,offset除第1參數(shù)外,其它參數(shù)均為可選,約定俗成中括號代表可選

所以國內(nèi)相關(guān)文章上也經(jīng)常會出現(xiàn)第2參數(shù)為可選說明

我為了驗證這件事,還特意把PowerBI升級到了最新

我們以新建表為例:

我們以新建列為例:

是不是可選我不知道,但是我不寫第二參數(shù),PowerBI它真不讓我用啊。
友情提示:幫助文檔截止于2023年11月18日,后續(xù)幫助文檔或軟件功能也許會發(fā)生變化。
二、offset返回一張表,我們先在新建表中理解它
既然至少要寫兩個參數(shù),那第1和第2參數(shù)就需要一起講。
我們準備一張表,如下圖

接下來我們將 offset第1參數(shù)寫成0 代表沒有偏移, 第2參數(shù)使用這張Sheet2的表

你是不是以為這里重復(fù)了?

還真不是,不信我們測試一下,我們導(dǎo)入一個沒有重復(fù)的Sheet3

問題依舊!

幫助文檔上給了相關(guān)依據(jù),下下面,我給給大大家講講怎么么回事:)

可以生成表的表達式函數(shù)可多了,時間有限,我就不一一舉例了,我給大家舉幾個有代表性的例子。
我們講過? selectcolumns 從一張表中獲取某個列,或某幾個列
如下圖所示,我們使用這個函數(shù)獲取了Sheet3中的日期列,這個列沒有重復(fù)行

但是,offset函數(shù) 不承認它

想讓offset承認它,你要手工的再去一次重
當然方法不止有加DISTINCT? 今天要講的重點不是去重方法,而是告訴你offset在這里:認公式不認表

理解了原因,就沒必要寫得這么麻煩了,我們可以寫成以下公式
支持的公式太多了,我只是舉幾個例子,新建表這里用誰都行
但是以后寫度量值里用誰,那可選方法就縮減到一兩個了。
因為涉及去重,我們還是用Sheet2這張表舉例




但是,我不是腦袋一熱,就隨便舉幾個例子!我之所以用以上三組
values和distinct? 、 all和allselected 、 summarize? ?來舉例,你們知道我葫蘆里賣的什么藥嗎?這個問題咱們一會詳細說,先把新建表里的事說完。
理解了第2參數(shù),再說第一參數(shù)
我上面寫的都是0,就不偏移,返回第2參數(shù)的表達式生成的表
第1參數(shù)咱們也別說文詞:偏移
因為在新建表里,我可以這樣來說
當值為0時,第二參數(shù)生成的表結(jié)果不變

當值為正數(shù)時,第二參數(shù)生成的表從上面刪除對應(yīng)的行數(shù)

當值為負數(shù)時,第二參數(shù)生成的表從下面刪除對應(yīng)的行數(shù)

如果你現(xiàn)在有下面這個疑問,就證明你的基礎(chǔ)弱一些

因為你使用? ??DISTINCT(Sheet2[日期])? ?對指定列去重,現(xiàn)在返回一張每行都是唯一值的表。如下圖所示。所以這里它才說是行。希望大家沒有這個疑問。

三、offset返回一張表,是一張什么樣的表?
我們給Sheet2添加一列銷量

我們在新建列里就能知道!給Sheet2新建列

在新建表中,你看不出來,在新建列里,你沒看出來的事情,我看出來了!
我先說結(jié)果

不是返回一張大表

口說無憑必需證明:

但是我用offset生成的表去寫就不行

于是,我通過證明得到我的結(jié)論
如果x不是小表(標量值)這個公式一定是報錯的!
詳見《DAX神功》第1卷第10回 將表用作標量值
這個結(jié)果有科學依據(jù)了吧?我只是用Distinct舉例,另外幾個函數(shù)均可

四、offset為什么要配合ALL家族函數(shù)
上面我們舉了3組例子??values和distinct? 、 all和allselected 、 summarize
在新建表里都是一樣的,在度量值中就不同了。

那為什么度量值A(chǔ)、度量值B、度量值E 每個日期對應(yīng)的值沒有體現(xiàn)出來呢?
我們使用 Values和ALL舉例

values函數(shù)用于獲取指定列中的唯一值,并將這些唯一值作為一個表返回。
對于行標題上的每個日期,度量值520 會計算該日期下的銷售總和。

all(列):刪除指定列的篩選,返回指定列的所有值,在本例中,返回全部日期。
所以?度量值521 每一行返回的都是36

理解了這個,再說 度量值C和度量值B


五、offset為什么要配合ALLSELECTED函數(shù)
all函數(shù)和allselected函數(shù)返回結(jié)果一樣,為什么要使用allselected函數(shù)?

原因在于篩選? ?詳見《DAX神功》第1卷第11回

這回明白了嗎?

這一篇,我們講了offset函數(shù)第一參數(shù)和第二參數(shù)的意思,以及為什么offset要配合allselected使用的詳細推導(dǎo)過程,關(guān)于offset函數(shù),我們接下來還會更詳細的講解。

PowerBI學習順序:
【1】Access基礎(chǔ)篇,學習s01開頭的集數(shù),理解表格數(shù)據(jù)規(guī)范和表關(guān)系
https://www.bilibili.com/video/BV1tf4y117Sh
【2】PowerBI火力全開,學習函數(shù)語法,與應(yīng)用場景
https://www.bilibili.com/video/BV1qa4y1H7wp
【3】DAX神功,學習DAX函數(shù)原理
https://www.bilibili.com/read/readlist/rl442274
【4】PowerBI可視化圖表
https://www.bilibili.com/video/BV1W54y1i7dE
https://www.bilibili.com/video/BV1r54y1i75n