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

理解 ISONORAFTER和ISAFTER

ISONORAFTER 和 ISAFTER 是布尔函数,它模拟 Start At 子句的行为,先对所有用于比较的列按声明的规则依次排序,然后对第一个满足所有条件参数的行及其之后的所有行返回 True (ISONORAFTER),或仅对之后的所有行返回 True(ISAFTER)。下面以 ISONORAFTER 为例进行说明:

ISONORAFTER

ISONORAFTER ( <Value1>, <Value2>, [<Order>], [<Value1>,<Value2>,<Order>] ... )

ISONORAFTER 接受可变数量的三元参数组,组中的前两个值是要比较的表达式,第三个参数表示排序顺序。排序可以是升序(默认)或降序。第一参数与第二参数根据排序顺序进行比较。升序时执行的比较是第一参数大于或等于第二参数。降序则是第一参数小于或等于第二参数。此函数通常用于迭代函数的筛选条件中。

参数 属性 描述
Value1 可重复 与第二参数进行比较的表达式
Value2 可重复 与第一参数进行比较的表达式
Order 可选
可重复
指定的排序. 0/FALSE/DESC – 降序; 1/TRUE/ASC – 升序.

ISONORAFTER 和 ISAFTER 在官方文档中的介绍比较简单,这里补充一些它的详细计值过程,按计算顺序描述如下:

  1. 对所有参数组中的第一参数按第三参数声明的规则进行排序,第一个参数组中的列首先排序,依次类推,得到一个排序后的表。
  2. 对排序后的结果依次使用每个参数组逐行判断,对第一个满足所有参数组的行及其之后的所有行返回 True。

需要注意的是,Order 参数有两个作用:用于指定列的排序规则,确定前两个参数的比较规则。参数组的排列顺序会影响排序结果和执行判断的顺序,进而影响返回的行数。

ISAFTER 的计值过程与 ISONORAFTER 类似,区别在于它的判断中不包含等于,只考虑大于或小于。在这两个函数的比较中,Blank()和空字符串被认为是不同的值,以升序为例,空字符串排在 Blank()后面。

示例用法

以下两种写法使用 2008 年和 10 月作为筛选条件,返回满足条件的年月组合,由于交换了 ISONAFTER 中年份和月份列的顺序,得到了不同的结果

//年份在前月份在后,返回 2008 年 10 月之后的所有年月组合

EVALUATE
FILTER (
    SUMMARIZE (
        'Date',
        'Date'[Calendar Year Number],
        'Date'[Month Number]
    ),
    ISONORAFTER (
        'Date'[Calendar Year number], 2008, ASC, 
        'Date'[Month Number], 10, ASC           
    )
)
ORDER BY
    'Date'[Calendar Year number],
    'Date'[Month Number]
//月份在前年份在后,返回包含 10-12 月的所有年月组合

EVALUATE
FILTER (
    SUMMARIZE (
        'Date',
        'Date'[Calendar Year Number],
        'Date'[Month Number]
    ),
    ISONORAFTER (    
        'Date'[Month Number], 10, ASC, 
        'Date'[Calendar Year number], 2008, ASC
    )
)
ORDER BY
    'Date'[Month Number],
    'Date'[Calendar Year number]

两种写法的结果如图所示:

当使用常数进行判断时,只要有一个参数组返回 True,ISONORAFTER 和 ISAFTER 就会返回 True

= ISAFTER(1,2,DESC,2,2,DESC)        //返回 True,因为第一组返回 True
= ISONORAFTER(1,2,DESC,2,1,DESC)    //返回 True,因为第一组返回 True

 

 

相关推荐

  • 暂无文章

13
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
5 评论数
8 被回复的评论
5 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
游客
153****1882

高飞老师,文中讲isonorafter函数常用于迭代函数的筛选条件,并进行了举例,我有个疑问:举例中的filter为迭代函数,一般理解是逐行进行条件判断,符合条件的行保留再继续判断下一行,但是文中用isonorafter作为筛选条件,好像不能用逐行判断的思路去理解,是这样的吗?

成员
卫东

老师,帮忙看下这个地方,是不是官方更新了ISONORAFTER用法,谢谢!

1666236181937.jpg
成员
bbzhdlp

高飞老师,如下图所示,是递进的关系,我做成切片器。我想通过度量值实现,我选 员工名字的时候,就显示员工姓名,我选经理姓名的时候就显示经理的姓名。不是在切片器里显示,是我单独写一个度量值,在我其他的可视化图片里作为标题显示。要怎么实现啊?

89393.png
成员
bbzhdlp

高飞老师,如图所示,上面切片器里,有BGT,ACT等维度,但是,下面的“BGT”这个度量值,不管上面切片器选 什么维度,都是等于所有维度等于”BGT”之和,这个度量值不受切片器的影响。我需要用什么函数?

微信图片_20200602170613.png
游客
159****5378

老师,如果想要过滤小于或等于 2008 年 10 月的月份,是不是参数用降序就可以。

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数