行上下文筛选函数Earlier的含义及用法

2019-05-19  本文已影响0人  Data_Skill

(四) 行上下文的筛选

1. Earlier和Earlist

A. 语法

Eariler ( <ColumnName> [, <Number>] )
Earliest ( <ColumnName> )
参数 秒数
ColumnName 所需值得的列名
可选第2参数Number 往前的第几层,默认值1
Earliest因直接返回最外面一层,所以也就没有第2参数

B. 返回

标量——指定列的当前行里的值

C. 注意事项

D. 作用

返回之前层级的列数值。(相当于固定一个之前层级的数值)

E. 案例

案例数据案例数据

我们要添加一列上一天的金额。在Excel里面我们很容易,直接相对引用上一行的金额单元格就可以。当然因为第一天没有数值我们直接从第2个数值开始输入B2往下拖曳即可。


要求结果要求结果

那这种效果如何在Power Pivot里实现呢?这时就需要我们使用到表的层级的概念。
我们知道Power Pivot的计算原则,是以筛选作为计算基础。

步骤:
因为我们知道在Power Pivot中是不存在单元格的概念,只有表和列的概念。
首先:筛选出比当天日期小1天的表。Filter('表1','表1'[时间]= '表1'[时间]-1)
但是如果是这样的表达式肯定是不会筛选出结果的,所以这里涉及到2个表,一个是当前表,一个是之前表,之前表我们就需要用EARLIER来体现。往外几层,第2个参数就用数字多少表示,因为这里只涉及一层,所以第二参数可以不写。
Filter('表1','表1'[时间]=Earliter('表1'[时间])-1)))每一行都会执行这个公式来进行比较。

时间 金额 比较状态 结果
2019/5/1 100 筛选日期比2019/5/1小一天的表 不存在
2019/5/2 200 筛选日期比2019/5/2小一天的表 时间为2019/5/1的表
2019/5/3 300 筛选日期比2019/5/3小一天的表 时间为2019/5/2的表
2019/5/4 400 筛选日期比2019/5/4小一天的表 时间为2019/5/3的表
2019/5/5 500 筛选日期比2019/5/5小一天的表 时间为2019/5/4的表
2019/5/6 600 筛选日期比2019/5/6小一天的表 时间为2019/5/5的表

最后一天筛选出来的结果就是下图这样。


案例数据案例数据

其次:我们要针对这个表进行取值,我们需要的是金额这一列的数字,因为我们每天只有一条数据,我们可使用任意的取值公式。这里我们用最简单的sum,min,max等函数进行取值。

完整公式为:

Calculate(Sum('表1'[金额]),Filter('表1','表1'[时间]=Earlier('表1'[时间])-1))

如果我们用var变量来进行赋值的话会更好理解

var e_day='表1'[时间]
return
Calculate(Sum('表1'[金额]),Filter('表1','表1'[时间]=e_day-1))

e_day代表之前的表的日期

喜欢的点个赞,分享下咯。

上一篇下一篇

猜你喜欢

热点阅读