(四) 行上下文的筛选
1. Earlier和Earlist
A. 语法
Eariler ( <ColumnName> [, <Number>] )
Earliest ( <ColumnName> )
参数 | 秒数 |
---|---|
ColumnName | 所需值得的列名 |
可选第2参数Number | 往前的第几层,默认值1 |
Earliest因直接返回最外面一层,所以也就没有第2参数 |
B. 返回
标量——指定列的当前行里的值
C. 注意事项
- 只有存在表的层级,才会起作用,如果不存在层级则会出错。
- 不建议使用,可以使用var变量赋值给与替代。
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代表之前的表的日期
网友评论