1. LOOKUP函數
用法:LOOKUP(expression,[offset])
說明:返回距離當前行offset偏移量的目標行中的表達式的值。使用FIRST()+n或LAST()-n作爲偏移量時則返回距離分區第一行或最後一行n個偏移量的目標行的表達式的值。若不使用FIRST()或LAST()時,則返回距離當前行n個偏移量的目標行的表達式的值。如果沒有輸入offset參數,則這個時候計算依據只能使用特定維度
2.實驗
創建三個LOOKUP計算字段,分別設置不同的offset。 本次實驗中使用到的初始數據如下:
具體地,三個LOOKUP計算字段如下:
1) 將value_next和value_next_1計算依據設置爲【表向下】,其計算結果如下:
2) 將value_next和value_next_1的計算依據設置爲【區向下】,其計算結果爲:
對比這兩個實驗結果可以發現,在LOOKUP函數中加入FIRST()之後,目標行就固定不變了,不會隨着當前行的改變而改變。
3) 對value_next和value_next_1設置特定維度表計算
- 按Country,其結果如下:
- 按Year,其結果如下:
- 先按Year,再按Country(設置位置:右擊字段名,然後【編輯表計算】,選擇【特定維度】)。其計算結果如下:
- 先按Country, 再按Year,其計算結果如下:
LOOKUP函數所要實現的功能和SQL中的窗口函數基本相同。因爲我對窗口函數比較熟悉,所以這裏就打算將上述4個結果用SQL的窗口函數來實現。(MySQL中的窗口函數可以參https://blog.csdn.net/yeshang_lady/article/details/102728513 ) 。對於value_next,具體如下:
LOOKUP函數 | SQL窗口函數 |
---|---|
按Country | Lead(sum([GDP]),1)OVER(partition by Year order by Country) |
按Year | Lead(sum([GDP]),1)OVER(partition by Country order by Year) |
先按Country, 再按Year | Lead(sum([GDP]),1)OVER(order by Country, Year) |
先按Year,再按Country | Lead(sum([GDP]),1)OVER(order by Year, Country) |
value_next_1所對應的窗口函數與value_next基本相同,只不過value_next_1對應的目標行是固定的。從以上的對應關係可以看出,在LOOKUP函數中設定的特定維度提供了排序依據。
4) 對於value_next_2,需要設置 【計算依據】和【相對於】兩個:
- 按Country,相對於Australia VS 按Country, 相對於Brazil
- 按Year, 相對於1960 VS 按Year, 相對於1961
- 先按Year 相對於1960,在按Country,相對於Australia VS 先按Country,相對於Australia,再按Year,相對於1960
在這種情況下,特定維度中設定的【相對於】直接以顯示的方式提供了目標行所在的位置。