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 |