基于多条件创建DAX列时遇类型不匹配错误求助
DAX计算列类型不匹配问题解决
原始数据
| 交易类型(TR Type) | 交易代码(TR Code) | BK | 交易文本(TR Txt) |
|---|---|---|---|
| CD | 456 | 1.91E+13 | ST |
| CD | 123 | 41 | CDC |
| CD | 123 | 41 | CDC |
| CD | 123 | 1 | CDC |
| CD | 123 | 41 | CDC |
| DT | 123 | 1 | CDC |
| DT | 123 | 41 | CDC |
| DT | 123 | 41 | CDC |
| DT | 123 | 41 | CDC |
需求说明
需要创建DAX计算列,按以下规则分类:
- BD:交易类型=CD,交易代码=123,BK=41,交易文本不包含"DCD"
- MD:交易类型=CD,交易代码=123,BK=41,交易文本包含"DCD"
- LD:交易类型=CD,交易代码=125,BK=54
- BMDS:交易类型=CD,交易代码=123,BK去除前导零后位数超过6位
原始代码
Column = SWITCH(TRUE(), [TR Type] = "CRD" && [TR Code] = 123 && [BK Trx #] = 41 && NOT(CONTAINSSTRING([TR Text], "CDC")), "BD", [TR Type] = "CRD" && [TR Code] = 123 && [BK Trx #] = 41 && CONTAINSSTRING([TR Text], "CDC"), "MD", [TR Type] = "CRD" && [TR Code] = 123 && [BK Trx #] = 54, "ST" )
问题
运行代码后报错:DAX比较操作不支持文本类型与整数类型的值进行比较
问题分析与修复
报错核心是数据类型不匹配:DAX不允许直接用文本和整数做比较(比如字段TR Code是文本类型,但代码里用整数123去比较)。另外原始代码还有字段名错误、条件不匹配的问题,一起修正:
修正后的代码
分类列 = SWITCH(TRUE(), -- BD条件:统一类型+修正字段名 [TR Type] = "CD" && [TR Code] = "123" && [BK] = "41" && NOT(CONTAINSSTRING([TR Txt], "DCD")), "BD", -- MD条件 [TR Type] = "CD" && [TR Code] = "123" && [BK] = "41" && CONTAINSSTRING([TR Txt], "DCD"), "MD", -- LD条件 [TR Type] = "CD" && [TR Code] = "125" && [BK] = "54", "LD", -- BMDS条件:去除前导零后判断长度 [TR Type] = "CD" && [TR Code] = "123" && LEN(LTRIM(REPLACE([BK], "0", " "))) > 6, "BMDS", -- 无匹配时返回空(可根据需求修改) BLANK() )
关键说明
- 类型统一:如果
TR Code、BK是文本类型,就用引号把比较值括成文本(比如"123");如果是数值类型,直接用整数(比如123),确保两边类型一致。 - 字段名修正:原始代码里的
[BK Trx #]对应表格的[BK],[TR Text]对应[TR Txt],"CRD"对应需求的"CD",必须完全匹配数据源字段名。 - BMDS条件处理:用
REPLACE把BK的前导零替换成空格,再用LTRIM去除,最后用LEN判断长度;如果BK是数值类型,先转文本:LEN(LTRIM(REPLACE(TEXT([BK], "0"), "0", " "))) >6。
内容的提问来源于stack exchange,提问作者LogicAndArt
相关产品推荐
相关产品推荐

