Tableau Desktop中如何将日期差显示为年、月、日格式
在Tableau Desktop中实现“X年Y个月Z天”的日期差格式
你之前的日计算部分核心问题是DATEADD函数的参数嵌套错误,导致括号不匹配、函数调用失败。以下是修正后的完整计算字段代码:
-- 计算年数 STR(DATEDIFF('year', [start_dt], [end_dt])) + '年' + ' ' + -- 计算剩余月数(扣除年数后的月份差) STR(DATEDIFF('month', DATEADD('year', DATEDIFF('year', [start_dt], [end_dt]), [start_dt]), [end_dt])) + '个月' + ' ' + -- 计算剩余天数(扣除年数和月数后的天数差) STR(DATEDIFF('day', DATEADD('month', DATEDIFF('month', DATEADD('year', DATEDIFF('year', [start_dt], [end_dt]), [start_dt]), [end_dt]), DATEADD('year', DATEDIFF('year', [start_dt], [end_dt]), [start_dt])), [end_dt])) + '天'
关键修正说明:
- 天数计算时,需要先将
[start_dt]依次加上已算出的年数和剩余月数,再与[end_dt]计算天数差,你之前的嵌套逻辑漏掉了DATEADD的第三个日期参数,导致函数报错。 - 统一了中文单位(年/个月/天),匹配你想要的展示格式。
可选优化(过滤零值项):
如果希望年/月/天为0时不显示对应项,可以用IF语句判断:
IF DATEDIFF('year', [start_dt], [end_dt]) > 0 THEN STR(DATEDIFF('year', [start_dt], [end_dt])) + '年' + ' ' END + IF DATEDIFF('month', DATEADD('year', DATEDIFF('year', [start_dt], [end_dt]), [start_dt]), [end_dt]) > 0 THEN STR(DATEDIFF('month', DATEADD('year', DATEDIFF('year', [start_dt], [end_dt]), [start_dt]), [end_dt])) + '个月' + ' ' END + IF DATEDIFF('day', DATEADD('month', DATEDIFF('month', DATEADD('year', DATEDIFF('year', [start_dt], [end_dt]), [start_dt]), [end_dt]), DATEADD('year', DATEDIFF('year', [start_dt], [end_dt]), [start_dt])), [end_dt]) > 0 THEN STR(DATEDIFF('day', DATEADD('month', DATEDIFF('month', DATEADD('year', DATEDIFF('year', [start_dt], [end_dt]), [start_dt]), [end_dt]), DATEADD('year', DATEDIFF('year', [start_dt], [end_dt]), [start_dt])), [end_dt])) + '天' END
内容的提问来源于stack exchange,提问作者Shobi
相关产品推荐
相关产品推荐

