https://zhuanlan.zhihu.com/p/64400583
前面利用PowerBI做數據分析的時候都是對整列的字段進行操作,並沒有做更細化的分析,比如分析數據的每一行、提取某一行的數據,這在Excel中很容易實現,因為Excel公式是對單元格操作。那么在PowerBI中能不能按行分析呢,答案當然是肯定的,並且比Excel更加靈活,借助這個函數:EARLIER
.
EARLIER語法
EARLIER(<column>, <number>)
- 第一個參數是列名
- 第二個參數一般可省略
- EARLIER函數提取本行對應的該列的值,實際上就是提取本行和參數列交叉的單元格
這個函數是指定行上下文重要工具,下面靠幾個實例來理解這個函數。
EARLIER應用實例
有一張訂單表:
利用EARLIER做以下幾種分析:
01 | 求兩個訂單的時間間隔
相當於用下一個訂單的日期減去當前訂單的日期,為了相減的方便,新建列[下個訂單日期],先把下一行的訂單日期提取過來,輸入DAX公式:
= SUMX(FILTER('訂單表','訂單表'[序號]=
EARLIER('訂單表'[序號])+1),
'訂單表'[訂單日期])
這個公式的意思是,利用EARLIER獲取當前行的序號,然后找到當前序號+1的那一行的訂單日期,結果如下,
然后新建一列,用兩列日期相減得到間隔的天數,
間隔 = IF([下個訂單日期]=BLANK(),
BLANK(),
[下個訂單日期]-[訂單日期])
這里用IF判斷主要因為最后一列為空值,避免出現不合理的數值,
02 | 求每個訂單日期的累計銷售金額
新建列[累計銷售額],
= SUMX (FILTER('訂單表','訂單表'[序號]<=EARLIER('訂單表'[序號])),
'訂單表'[銷售金額])
利用EARLIER求當前行的序號,然后把小於等於當前序號的所有行的銷售額累加。
03 | 求截至目前訂單,每種產品的銷量
新建列[產品累計銷量],
= SUMX(FILTER(
'訂單表','訂單表'[序號]<=EARLIER('訂單表'[序號])
&&'訂單表'[產品名稱]=EARLIER('訂單表'[產品名稱])),
'訂單表'[銷售數量])
不僅利用EARLIER篩選小於當前行的序號,還利用它求得當前行的產品名稱,然后同時符合這兩個條件的銷量才累加,結果正是我們期望的,
以上幾個實例都是先獲得本行的記錄,然后做各種聚合預算,本行的記錄可以稱為行上下文,EARLIER函數正是獲取行上下文的最好工具之一。