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窗口函数
按CountryLead(sum([GDP]),1)OVER(partition by Year order by Country)
按YearLead(sum([GDP]),1)OVER(partition by Country order by Year)
先按Country, 再按YearLead(sum([GDP]),1)OVER(order by Country, Year)
先按Year,再按CountryLead(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

 在这种情况下,特定维度中设定的【相对于】直接以显示的方式提供了目标行所在的位置。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐