You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动