東哥陪你學DAX
上下文系列小講堂(四)
行上下文的嵌套
來看這樣一個需求:如何顯示當前訂單是該客戶第幾次購買
很多人下意識地的在腦子里把客戶ID和訂單日期排序概而,再手工添加個遞增填充列就完事——典型的Excel思路
如果數(shù)據(jù)時刻在增加,填充列該如何更新弄喘,派人守著點鼠標嗎茅主?顯然不現(xiàn)實
在PowerBI里蒙具,可以利用“行上下文”的嵌套冒萄,來解決類似問題
首先把銷售表簡化去重
有兩種方式來實現(xiàn)“行上下文”的嵌套池摧,一種是earlier方式“Filter…Earlier…”片效,一種是變量方式“var…return…”
** Filter…Earlier… **
添加計算列“購買次數(shù)”(下圖中Filter和Earlier函數(shù)红伦,可以參見之前發(fā)的《東哥陪你學DAX》卡片)
如果仔細觀察,你會發(fā)現(xiàn)堤舒,上述公式將會出現(xiàn)兩個“行上下文
創(chuàng)建計算列一次色建,F(xiàn)ilter迭代函數(shù)一次,內(nèi)外嵌套兩層“行上下文”舌缤,看到這里是不是又一頭霧水箕戳?
我們依然按步驟來分解
創(chuàng)建計算列時某残,自動創(chuàng)建第一個“行上下文”,我們暫且稱之為“外層行上下文”陵吸,它將對本表“銷售簡表”進行迭代
迭代函數(shù)Filter將創(chuàng)建第二個“行上下文”玻墅,我們稱之為“內(nèi)層行上下文”,它對函數(shù)第一參數(shù)(仍然是本表)進行迭代
這一條尤其重要:系統(tǒng)在處理“內(nèi)層行上下文”時壮虫,“外層行上下文”將被忽略
如何在“內(nèi)層行上下文”中能訪問到“外層行上下文”澳厢?這就是“Earlier”函數(shù)的意義所在——Earlier可以突破這個限制,跳出嵌套囚似,訪問到外層上下文的當前值
如果你對上述步驟解還是感到困惑剩拢,那我就圖解一次
通過圖解,相信大家應該都能理清內(nèi)外層邏輯關(guān)系了吧
上面引用Earlier函數(shù)饶唤,現(xiàn)在已基本不再使用徐伐,一般用變量(var…return…)語法來替代,但Earlier函數(shù)對新人理解嵌套行上下文還是很有幫助的
Var…Return…
同樣還是上述示例募狂,如何用變量(var…return…)的方式來實現(xiàn)办素?
前面我們說過,當系統(tǒng)在“內(nèi)行上下文”中迭代時祸穷,外層的行上下文是隱藏的性穿,暫不起作用
由上圖便可知,利用變量把“外層行上下文”的迭代結(jié)果暫存雷滚,放到“內(nèi)層行上下文”中使用需曾,便達到了和Earlier函數(shù)一樣的效果
(未完待續(xù))