PowerBI公式 - VAR

VAR是單詞Variables的縮寫,即變數。Rob

Collie把它比作錄音機,這個比喻非常形象,錄製好某一段落,再使用,而且是像復讀機一樣可以重複多次的播放出來。推薦學習這個函數的原因是它簡單好學,在應用中有四大突出好處,更簡潔的書寫,替代Earlier,避免上下文的干擾,運算性能。本文將一一詳細講解,當你仔細讀完這篇文章,很有可能對這個函數欲罷不能。

更簡潔的書寫

就以DAX官網的例子來講解說明,求年比年同比增長率,我們知道公式邏輯是(當年銷售量-上年同期銷售量)/上年同期銷售量。如果都放在一個公式裡面的話,你一般會這樣寫:

可是這樣不可避免的問題就是要重複的寫同一類函數,而且也不便於閱讀。用VAR可以很好的解決這個問題:

VAR的工作原理是它先錄製一個變數,再配合使用Return把錄製好的內容拿出來反覆多次利用。而且,在PowerBI公式欄中輸入的時候,智能提示會特別提醒你使用已經定義好的VAR,極大地方便了你的書寫。

所以,VAR的第一個好處就是使你的書寫更整潔,尤其在公式很臃腫的時候。

替代Earlier

第二大好處是大多數的情況它可以替代前面學習的Earlier公式,比如我們在學習Earlier時曾經用了一個求順序計數的例子:

用Earlier來寫第幾次購買的公式:

現在學會了VAR,可以先把Earlier引用的列用VAR來定義:

兩個公式輸出的結果是一樣的。這裡的VAR工作過程是它先識別了行上下文(即當前行)中的顧客名字和索引,並記錄下來結果,然後在Return的公式中引用,達到了與Earlier相同的效果。其實,在工作中我個人還是習慣於使用Earlier,不過有很多人對Earlier公式學習非常困惑,對於這部分人群,掌握VAR不失為一個很好的替換方案。

避免上下文的干擾

在理解上下文的學習中我們曾對比過下圖中的兩個公式,Filter中使用度量值和直接寫公式的效果有可能是不同的,因為會涉及到上下文的轉換,這個概念在課程中也多次強調,行上下文不會自動轉換成篩選上下文,如果需要轉換,須使用Calculate,並且要注意度量值是外套了隱藏的Calculate。

(如果對這兩個公式有疑惑,請參看之前發過的文章理解上下文)在這個公式中,如果使用VAR先定義好SUM,再套用到Filter當中:

結果會與使用SUM的效果是一樣的。

這個原理是VAR先錄製好了當前上下文的SUM("銷售數據表"[數量])的輸出結果,再應用到Return後面的Filter公式中。也就是說VAR不會受到Filter創造的行上下文影響,而是充分發揮了錄音機的效果,前面錄製了什麼,後面就原封不動的放出來。

如果你在前面學習中對上下文轉換和隱藏Calculate的概念有點煩惱,使用VAR會感到清凈了很多。

再來看個例子,我們想要計算超過總銷售量5%的門店的銷售量是多少,如果不用VAR,你需要這樣寫:

藍色部分ALL函數的意思是排除Filter創造的行上下文影響來求得所有門店的銷售量。也就是說當你在寫藍色公式部分的時候要考慮Filter上下文的影響,排除干擾後再求得想要的銷售量。即使我經常寫DAX公式,在思考這種邏輯時也要小心翼翼,怕掉到上下文的坑裡。如果用VAR來寫呢?看一下下面的公式:

明顯邏輯更清楚整潔,這裡的Five是在Filter外計算的,先求得當前上下文的5%銷售量是多少並存儲下來,再在Filter中拿出來使用,很好地避免了Filter上下文的干擾。

運算性能

關於運算性能的表現,這與為什麼要用錄音機的道理是一樣的。錄製好的東西可以拿出來反覆播放,省去了你重複的工作。在DAX公式工作的過程中,VAR定義的運算會執行一次,Return後面即使多次引用,它會直接獲取前面運算的存儲結果,而不會重新執行計算。這相當於大大優化了DAX公式的運算性能,更快的完成工作。

基於上面的四大好處,沒有用過VAR的你,有點心動了吧。雖然沒有VAR我們一樣可以完成工作,但這個函數我極力地推薦大家使用,只為更好。

祝好,

微信公眾號PowerBI大師


推薦閱讀:

【效率提升】Python中的並行運算
Kaggle入門系列(三)Titanic初試身手
營銷轉數據,兩年半到P7,我都做了哪些事兒?
權力的遊戲:網紅CEO之崛起
從用戶梳理到構建體系再到數據分析

TAG:PowerBI | MicrosoftExcel | 数据分析 |