Python使用adodbapi执行DAX日期区间查询出现语法错误如何解决
错误原因
你代码中的DAX查询语法错误源于日期值的写法不符合DAX语法规范:直接书写的01/02/2021不会被DAX识别为日期类型,会被解析为除法运算表达式,因此触发语法报错。
修复方案
方案1:使用DATE()函数构造日期(最稳妥,无格式歧义)
DAX内置DATE(年,月,日)函数可以明确构造日期值,不会受系统区域设置影响出现月日颠倒的问题,修改后的代码如下:
tablestring = 'EVALUATE(CALCULATETABLE(Data,DATESBETWEEN(Data[date_created], DATE(2021,2,1), DATE(2021,2,4))))' df = pd.read_sql(tablestring, conn)
方案2:用#包裹日期字面量
如果要直接书写日期字符串,需要用#将日期内容包裹,DAX才会将其识别为日期类型:
tablestring = 'EVALUATE(CALCULATETABLE(Data,DATESBETWEEN(Data[date_created], #01/02/2021#, #04/02/2021#)))' df = pd.read_sql(tablestring, conn)
注意:该写法需要保证日期格式和你的Power BI/SSAS模型的区域设置一致,避免出现月日识别错误的问题。
动态日期传参推荐写法
如果查询的日期间隔是Python动态生成的变量,推荐使用参数化查询,避免字符串拼接导致的格式错误或注入风险:
import datetime import pandas as pd start_dt = datetime.date(2021,2,1) end_dt = datetime.date(2021,2,4) tablestring = 'EVALUATE(CALCULATETABLE(Data,DATESBETWEEN(Data[date_created], ?, ?)))' df = pd.read_sql(tablestring, conn, params=(start_dt, end_dt))
内容的提问来源于stack exchange,提问作者Sanch。
相关产品推荐
相关产品推荐

