文章背景:在工作中,有时需要提取同一日期的最后一条记录。比如每个客户的最后一次下单记录,或者每个产品最后一次卖出记录等。
以下面这个销售表为例,
如何将上表中每个客户的最后一次购买记录提取出来呢?下面给出DAX的做法。
(1)在销售表中添加一个最后下单记录
的计算列。
最后下单日期 =
var lastdealdate =
CALCULATE(
max('销售表'[日期]),
ALLEXCEPT('销售表','销售表'[客户])
)
var currentday = '销售表'[日期]
var result = if(currentday = lastdealdate,"是")
return result
这个计算列的逻辑是,先找出每个客户的最后一次下单日期,然后判断每一行该客户的订单日期是否等于最后下单日期,如果等于,就返回是
。
这样就在表中新增了一列最后下单日期,直接筛选就可以提取最后一次下单的记录表。
(2)也可以通过DAX新建表,一次性把最后下单记录提取出来。
最后下单表 =
var table_temp =
ADDCOLUMNS(
'销售表',
"最后下单记录",
var lastdealdate =
CALCULATE(
max('销售表'[日期]),
ALLEXCEPT('销售表','销售表'[客户])
)
var currentday = '销售表'[日期]
var result = if(currentday = lastdealdate,"是")
return result
)
var result = FILTER(table_temp, [最后下单记录] = "是")
return result
延伸阅读:
(1)ALLEXCEPT ( <TableName>, <ColumnName>, [ <ColumnName>, [ … ] ] )
返回表中受指定列筛选器影响的行以外的所有行,当用作 CALCULATE 调节器时,移除<TableName>的扩展表中已应用的任何筛选器,只保留<ColumnName>的直接筛选条件。
(2)ADDCOLUMNS 返回包含原始列和所有新添加列的表。由于新列使用的标量表达式沿着第一参数的每行计值,所以 ADDCOLUMNS 也是迭代函数。
参考资料:
[1] 在Power BI中如何提取最后一条记录(https://www.sohu.com/a/445963078_584557)
[2] 理解ALL类函数(https://www.powerbigeek.com/understanding-all-functions/)
[3] 理解 ADDCOLUMNS(https://www.powerbigeek.com/understanding-addcolumns/)