DAX中TREATAS函数搭配FORMAT日期格式化报错求助
DAX TREATAS函数报错解决:日期与DateTime匹配问题
错误原因
- TREATAS参数类型错误:TREATAS的第二个参数必须是现有表的完全限定列引用(如
Contact[列名]),你传入的ADDCOLUMNS(Contact, ...)是临时生成的表,不符合函数要求。 - 语法错误:
FORMAT(Contact[Date of Birth, "yyyy-MM-dd")缺少闭合方括号,正确写法为FORMAT(Contact[Date of Birth], "yyyy-MM-dd")。
解决方案
方案1:直接转换日期类型匹配(推荐,性能更优)
无需将日期转为文本,直接把Contact[Date of Birth](DateTime类型)转换为Date类型,与Calendar[DateCol](Date类型)匹配:
EVALUATE SUMMARIZE( CALCULATETABLE( Contact, TREATAS( VALUES('Calendar'[DateCol]), -- 将DateTime转换为Date类型 DATE(YEAR(Contact[Date of Birth]), MONTH(Contact[Date of Birth]), DAY(Contact[Date of Birth])) ) ), -- 统一显示格式 FORMAT(Contact[Date of Birth], "yyyy-MM-dd") AS FormattedDate, "Count of Contacts", DISTINCTCOUNT(Contact[Id]) )
也可以用DATEVALUE简化转换:
EVALUATE SUMMARIZE( CALCULATETABLE( Contact, TREATAS( VALUES('Calendar'[DateCol]), DATEVALUE(Contact[Date of Birth]) ) ), FORMAT(Contact[Date of Birth], "yyyy-MM-dd") AS FormattedDate, "Count of Contacts", DISTINCTCOUNT(Contact[Id]) )
方案2:文本格式匹配(适合必须用文本场景)
如果一定要通过文本格式匹配,先在模型中给Contact添加计算列(避免查询中临时生成列导致TREATAS报错):
-- 在Contact表中创建计算列 FormattedDOB = FORMAT(Contact[Date of Birth], "yyyy-MM-dd")
然后使用该计算列进行TREATAS匹配:
EVALUATE SUMMARIZE( TREATAS( -- 转换Calendar日期为文本 VALUES(FORMAT('Calendar'[DateCol], "yyyy-MM-dd")), -- 引用模型中的计算列 Contact[FormattedDOB] ), Contact[FormattedDOB] AS FormattedDate, "Count of Contacts", DISTINCTCOUNT(Contact[Id]) )
内容的提问来源于stack exchange,提问作者vlad
相关产品推荐
相关产品推荐

