You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于多条件创建DAX列时遇类型不匹配错误求助

DAX计算列类型不匹配问题解决

原始数据

交易类型(TR Type)交易代码(TR Code)BK交易文本(TR Txt)
CD4561.91E+13ST
CD12341CDC
CD12341CDC
CD1231CDC
CD12341CDC
DT1231CDC
DT12341CDC
DT12341CDC
DT12341CDC

需求说明

需要创建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()
)

关键说明

  1. 类型统一:如果TR Code、BK是文本类型,就用引号把比较值括成文本(比如"123");如果是数值类型,直接用整数(比如123),确保两边类型一致。
  2. 字段名修正:原始代码里的[BK Trx #]对应表格的[BK],[TR Text]对应[TR Txt],"CRD"对应需求的"CD",必须完全匹配数据源字段名。
  3. BMDS条件处理:用REPLACE把BK的前导零替换成空格,再用LTRIM去除,最后用LEN判断长度;如果BK是数值类型,先转文本:LEN(LTRIM(REPLACE(TEXT([BK], "0"), "0", " "))) >6。

内容的提问来源于stack exchange,提问作者LogicAndArt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:37:51