前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PowerBI公式-Earlier函数

PowerBI公式-Earlier函数

作者头像
公众号PowerBI大师
发布2019-08-07 10:43:48
3.7K0
发布2019-08-07 10:43:48
举报

Earlier 函数

这是一个让很多初学者困惑的函数,尤其是看到下面这样的句型。许多人是在学习了DAX很久之后才领悟了Earlier的使用方法,其实我认为有时候我们把它想复杂了。

Earlier = 当前行

我们第一阶段学习的Filter是一个行上下文函数,Earlier也是一个行上下文函数。主观地讲,Earlier这个函数的命名很容易让人困惑,英文直译为“更早”,它的本义是指前面用到的行上下文,基于这个语义的命名没毛病,然而这个概念很抽象,在使用中是很难体会到更早的含义。

所以学习这个公式最好方法是我们先忽略它的命名,把它看做CurrentRow,即Earlier=当前行, 至少99%的应用情况可以这样去理解,相信我,这是入门理解Earlier公式的最快办法。我们现在就来看看是不是这样。

前些日子有一位读者问了我一个关于顺序计数的问题,正好就用它来做个举例说明。下面的表每行都是一位顾客的订单,索引是以时间顺序排序,我们想要添加一列,求每笔订单是该顾客的第几次购买。

不难想到的一个方法是先筛选一张表(使用Filter),筛选条件是与当前行顾客同名字,索引号<=当前行的索引号,再求这张表的行数。有了这个逻辑,可以顺畅地写一个公式。

我们可以更进一步分解Filter这个动作,当走到第7行时,公式中的earlier([顾客名字])就是指当前行的顾客名字,即"李达康"。Filter公式逻辑我们学过,它对表做逐行扫描,第一行"侯亮平"不等于"李达康",排除;第二行,顾客名字是"李达康",所以保留。

以此类推,直至把表中的每一行扫描完,保留所有顾客名字为"李达康"的表。&&指的是同时满足条件,同理,它限定了条件为索引号<=当前索引号,即索引号小于等于7。最后得到3行表,计数为3。

通过这个例子,我想你应该已经明白了Earlier的基本用法,值得强调的是:

Calculate([度量值], Filter('表',[列]=Earlier([列]))

是一个非常好用的句型, 它与索引列结合起来用还可以去关联上一行或上几行。

Calculate([度量值], Filter('表',[索引]=Earlier([索引]-1))

祝好,

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI大师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档