Power BI:DAX转换8位yyyymmdd为日期遇00000000报错求解决方法
解决DAX中yyyymmdd数值转日期时"00000000"报错的问题
这个场景我太熟悉了!DATE函数对无效的日期参数(比如0年、0月)会直接抛出错误,咱们可以用两种方式解决,一种是你提到的IF判断,另一种是更健壮的错误捕获方案:
方案1:用IF语句针对性处理"00000000"
因为你的原列是数值型,"00000000"实际存储为数值0,所以我们先判断这个特殊值,再执行转换:
转换后日期 = IF( TABLE[COLUMN] = 0, -- 匹配数值型的00000000 BLANK(), -- 这里可以替换成你需要的默认值,比如DATE(1900,1,1) DATE(LEFT(TABLE[COLUMN],4), MID(TABLE[COLUMN],5,2), RIGHT(TABLE[COLUMN],2)) )
如果原列是文本型的"00000000",只需要把判断条件改成TABLE[COLUMN] = "00000000"就行。
方案2:用IFERROR做全局错误捕获(更推荐)
除了"00000000",可能还会遇到其他无效的yyyymmdd值(比如20241301这种不存在的月份),用IFERROR可以一次性处理所有无效情况,更省心:
转换后日期 = IFERROR( DATEVALUE( LEFT(TABLE[COLUMN],4) & "/" & MID(TABLE[COLUMN],5,2) & "/" & RIGHT(TABLE[COLUMN],2) ), BLANK() -- 同样可替换为自定义默认日期 )
原理是先把yyyymmdd格式的数值转成"yyyy/mm/dd"的标准日期文本,DATEVALUE能自动识别并转为日期;如果原数值是无效格式(包括00000000),IFERROR就会返回我们设置的默认值。
小补充
如果原数值存在不足8位的情况(比如123对应00000123),可以先把数值转成固定8位的文本,避免转换出错:
转换后日期 = IFERROR( DATEVALUE( LEFT(TEXT(TABLE[COLUMN],"00000000"),4) & "/" & MID(TEXT(TABLE[COLUMN],"00000000"),5,2) & "/" & RIGHT(TEXT(TABLE[COLUMN],"00000000"),2) ), BLANK() )
内容的提问来源于stack exchange,提问作者MST QNB




