从数据到信息
从信息到洞察

FIRSTNONBLANK 和 LASTNONBLANK

这两个函数可以返回列表中的最小值或最大值,并排除空值。与 MIN/MAX 不同的是,它们可以根据你指定的逻辑进行计算,且支持文本格式。

FIRSTNONBLANK / LASTNONBLANK

FIRSTNONBLANK ( < ColumnName>, < Expression> )
LASTNONBLANK ( < ColumnName>, < Expression> )

<ColumnName>在当前筛选上下文中每行计值<Expression>,返回<Expression>不为空的第一个或最后一个值。其行为类似于 SUMX 或其他类似函数,因为它们都是迭代函数:为列参数设置行上下文,然后使用该行上下文计值表达式。

可用作 CALCULATE 筛选器的表函数

FIRSTNONBLANK 和 LASTNONBLANK 返回标量值,但同时也可以作为 CALCULATE 函数的筛选器参数,因为本质上它们返回的是单行表。其第一参数等价于:

CALCULATETABLE ( DISTINCT ( <ColumnName> ) )
如果你只需要获得标量值,可以使用 LASTNONBLANKVALUE

迭代函数的上下文转换

如果<表达式>和<列>共用同一张表的数据,不需要特别处理就可以正常计值。但是当<表达式>使用<列>所在表以外的其他表时,你必须通过使用 RELATEDTABLECALCULATETABLECALCULATE 进行上下文转换。这是所有与日期相关的计算的最佳实践,而且每次使用单独的日期表时这种情况都很常见。比如要正确地获得给定度量值或表的最后一个非空日期值,你必须使用如下表达式:

LASTNONBLANK ( Dates[Date], CALCULATE ( COUNT ( Inventory[Quantity] ) ) )

它返回在当前筛选上下文中,库存表数量列不为空的最近日期,你也可以用另一个等价公式:

LASTNONBLANK ( Dates[Date], COUNTROWS ( RELATEDTABLE ( Inventory ) ) )

这个表达式返回当前筛选上下文中,库存表中有相关记录的最后一个日期。

LASTNONBLANK 与 LASTDATE 的区别

FIRSTNONBLANK/LASTNONBLANK 函数接受任何数据类型作为其第一参数,而 FIRSTDATE/LASTDATE 函数则需要列必须使用日期类型。如果日期值所在的列使用了另一种数据类型,你希望获得它在筛选上下文中的第一个或最后一个值时,需要使用 FIRSTNONBLANK/LASTNONBLANK 而不是 FIRSTDATE/LASTDATE,将任何非空表达式作为第二个参数传递。当然,你也可以考虑在这种情况下使用 TOPN 函数。

TopDate := 
TOPN (
    1, 
    VALUES ( Date[DateKey] ), 
    [Internet Total Sales] 
)

如果两个或两个以上的日期具有相同的最高销售额,则 TopDate 度量值将报错,因为 TOPN 返回了一个包含一列和两行或更多行的表,不能被转换为标量值。你可以对公式做如下改动:

TopDate := 
FIRSTNONBLANK (
    TOPN (
        1, 
        VALUES ( Date[DateKey] ), 
        [Internet Total Sales]
    ), 
    1 
)

理解 LASTNONBLANK 的第二参数

此处为隐藏内容 VIP会员和付费用户可见

排序规则

FIRSTNONBLANK 和 LASTNONBLANK 根据自身的排序顺序迭代列的值,此时你需要考虑列的数据类型。比如,您可以对任何数据类型使用 FIRSTNONBLANK 和 LASTNONBLANK,而不仅仅是数值。

此处为隐藏内容 VIP会员和付费用户可见

说点什么

avatar
1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
  订阅本文评论  
提醒
DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数