[已解决] [DAX]如何用IN判断一组值是否出现在一列中

  [复制链接]
查看187118 | 回复156 | 2020-9-16 05:53:59 | 显示全部楼层 |阅读模式
例如有表X,表中有一Type列,列中的值可能有A,B,C及其他值
求:如果此列中含有A或B则返回值1,否则如果含有C则返回值2,否则返回值3,最好使用IN或者CONTAINSROW的写法。
我写的这种写法是错误的,不知道应该怎么改:

  1. =SWITCH(TRUE(),VALUES(X[Type]) IN {A,B},...)
复制代码
另外这两个函数对参数是表还是标量值有要求吗?A IN B 和 B IN A结果上一样吗?是否支持通配符来部分匹配?
回复

使用道具 举报

小型 | 2020-9-16 06:01:59 | 显示全部楼层
  1. =SWITCH(

  2. TRUE(),

  3.     X[Type] IN {"A","B"}, 1,

  4.     X[Type] IN {"C"}, 2,

  5.     3

  6. )
复制代码

9904012147541.jpg
回复

使用道具 举报

dglxha | 2020-9-16 06:07:59 | 显示全部楼层
谢谢大佬回复!
就是说IN之前的一定要有行上下文,或者是个标量值,是吗?
其实我的情况是在计算列中根据当前行的用户对应的CALCULATETABLE(VALUES(X[Type])),用一楼的规则判断这名用户的属性,我现在的写法类似COUNTROWS(FILTER(,))>=1,可以改成IN的写法吗,或者更简单的写法?
回复

使用道具 举报

play_girl1 | 2020-9-16 06:12:59 | 显示全部楼层
谢谢大佬回复!
就是说IN之前的一定要有行上下文,或者是个标量值,是吗?
其实我的情况是在计算列中根 ...


in 里面是单个值组成的 前面就要是单个值,在 values 的参数要求是列而行上下文起作用的话结果就应该是一个值
所以 VALUES(X[Type])中 X[Type]就不是行上下文作用后的值

听起来像是把最初的行上下文转换为筛选条件 筛选出一个表,再在这个表的每一行进行判断
回复

使用道具 举报

sea611 | 2020-9-16 06:18:00 | 显示全部楼层
in 里面是单个值组成的 前面就要是单个值,在 values 的参数要求是列而行上下文起作用的话结果就应该 ...


好吧,必须单个值,我明白了,那么我说的这种“对每个客户筛选出一个表,根据表中有没有出现过某一个值来决定这个用户的属性”,这种计算列的公式用什么写法比较好呢?
回复

使用道具 举报

davliu888 | 2020-9-16 06:23:00 | 显示全部楼层
好吧,必须单个值,我明白了,那么我说的这种“对每个客户筛选出一个表,根据表中有没有出现过某一个值来 ...


我不知道那种比较好,dax 基本不怎么用 还得现去找函数,你是要解决问题,还是研究,管他什么方法,解决就好,研究的话,另说
回复

使用道具 举报

崎岖 | 2020-9-16 06:25:00 | 显示全部楼层
我不知道那种比较好,dax 基本不怎么用 还得现去找函数,你是要解决问题,还是研究,管他什么方法,解决 ...


谢谢指点!
回复

使用道具 举报

游大海 | 2020-9-16 06:30:00 | 显示全部楼层
计算列天生自带行上下文环境,如果是写度量值,需要自己构造行上下文环境,DAX里大部分函数都可以做到这点。
回复

使用道具 举报

christam | 2021-6-10 22:45:24 来自手机 | 显示全部楼层
珍爱生命,果断回帖。
回复

使用道具 举报

d501 | 2021-6-15 22:38:26 | 显示全部楼层
努力~~各位。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则