liuyong2730

2020-06-28   阅读量: 1850

powerbi 的earlier函数是什么意思,网上找了些资料,终于弄明白了

扫码加入数据分析学习群

powerbi里的筛选器函数是非常重要的一类函数,在很多情况下扮演关键角色,如果不能理解他们,很多分析就无法进行。

earlier是其中比较让人产生误解和难掌握的一个。

earlier字面的意思是更早的,但是实际使用中很难从这个意义上去理解。

如果要理解这个函数,就需要对dax函数的底层逻辑有本质的认识。

Power BI 中函数处理的对象最小单位是列,意味着每一次计算都是对列中第一行到最后一行的的迭代循环计算。如filter()函数,给定表和参数列,就会对表中每一行筛选,如果参数列值符合条件,就保留,最后返回所有符合条件的行。

以官方说明中的例子为例,来理解earlier函数为什么叫earlier函数。

这个例子是计算销售额排名。

dax函数写法是 SubcategoryRanking=COUNTROWS(FILTER(ProductSubcategory, EARLIER(ProductSubcategory[TotalSubcategorySales])<ProductSubcategory[TotalSubcategorySales]))+1此处的earlier的作用是返回循环计算时的当前行的TotalSubcategorySales的值,这么说还是抽象,如果拆解成程序表示,就容易理解了。 以第一行的SubcategoryRanking为例演示程序计算过程: CountRows=0 for i in TotalSubcategorySales (此处i是当前行的值) for j in TotalSubcategorySales (此处j用来传递TotalSubcategorySales列的每一行值) if i<j CountRows=CountRows+1 next j next i return CountRows (返回TotalSubcategorySales大于当前行的行数到当前行的 SubcategoryRanking 列)外层循环中的i的值就是由EARLIER() 负责来传递的。所以在这里earlier体现了其字面更早的意思,即先有了i,再开始第二次循环的。 官方说明中对earlier的解释是 “属性值/返回值:外部计算传递的数字所在列的当前行值 ” 。数字所在列在此例中就是TotalSubcategorySales这一列,当前行的值就是由earlier负责传递。

而之所以用earlier来表示当前值,是因为dax函数的参数形式是整个字段,要是写成[TotalSubcategorySales] < [TotalSubcategorySales],程序也不好区分到底哪个表示当前行的值了。image.png

24.9626 3 2 关注作者 收藏

评论(0)


暂无数据

推荐课程