標籤:

Power BI - Earlier 公式

首發於公眾號PowerBI大師

這是一個讓很多初學者困惑的函數,尤其是看到下面這樣的句型。

許多人是在學習了DAX很久之後才領悟了Earlier的使用方法,其實我認為有時候我們把它想複雜了。

1 Earlier = 當前行

我們第一階段學習的Filter是一個行上下文函數Earlier也是一個行上下文函數。主觀地講,Earlier這個函數的命名很容易讓人困惑,英文直譯為「更早」,它的本義是指前面用到的行上下文,基於這個語義的命名沒毛病,然而這個概念很抽象,在使用中是很難體會到更早的含義。

所以學習這個公式最好方法是我們先忽略它的命名,把它看做CurrentRow,即Earlier=當前行, 至少99%的應用情況可以這樣去理解,相信我,這是入門理解Earlier公式的最快辦法。我們現在就來看看是不是這樣。

前些日子有一位讀者問了我一個關於順序計數的問題,正好就用它來做個舉例說明。下面的表每行都是一位顧客的訂單,索引是以時間順序排序,我們想要添加一列,求每筆訂單是該顧客的第幾次購買。

不難想到的一個方法是先篩選一張表(使用Filter),篩選條件是與當前行顧客同名字,索引號<=當前行

的索引號,再求這張表的行數。有了這個邏輯,可以順暢地寫一個公式。我們可以更進一步分解Filter這個動作,當走到第7行時,公式中的earlier([顧客名字])就是指當前行的顧客名字,"李達康"。Filter公式邏輯我們學過,它對錶做逐行掃描,第一行"侯亮平"不等於"李達康",排除;第二行,顧客名字是"李達康",所以保留。

以此類推,直至把表中的每一行掃描完,保留所有顧客名字為"李達康"的表。&&指的是同時滿足條件,同理,它限定了條件為索引號<=當前索引號,即索引號小於等於7。最後得到3行表,計數為3。

通過這個例子,我想你應該已經明白了Earlier的基本用法,值得強調的是:

Calculate([度量值], Filter(表,[列]=Earlier([列]))

是一個非常好用的句型, 它與索引列結合起來用還可以去關聯上一行或上幾行。

Calculate([度量值], Filter(表,[索引]=Earlier([索引]-1))

學到這裡如果你還是有點迷茫,沒關係,這是一個需要你在實踐中不斷體會的函數,只要帶著Earlier=當前行這個心法,實踐幾次就可以做到遊刃有餘。

____________________________________


推薦閱讀:

大多書上沒說明白的DAX計算核心原理與計算上下文
PowerQuery的優勢與短板
DAX學習分享:十條經驗
Power BI 即將放出的黑科技—Microsoft Data Insight Summit精華回顧
使用Power Query自定義生成日期表

TAG:PowerBI |