SSAS Tabular部署失败:OleAut日期非法错误排查求助
解决SSAS Tabular部署时的OleAut日期错误问题
针对你遇到的部署报错:
Failed to save modifications to the server. Error returned: 'Not a legal OleAut date.. The exception was raised by the IDataReader interface.
The database operation was cancelled because of an earlier failure.
结合System.Data.OracleClient已过时的背景,给出以下具体解决步骤:
替换过时的Oracle数据提供程序
System.Data.OracleClient已被微软弃用,其对Oracle日期类型的映射存在兼容性问题,是引发OleAut日期错误的核心原因。替换为Oracle官方的ODP.NET(Oracle Data Provider for .NET):- 下载安装Oracle官方的ODP.NET驱动(优先选择托管版本
Oracle.ManagedDataAccess.Client,无需额外安装Oracle客户端); - 在SSAS Tabular项目的数据源设置中,将提供程序从
System.Data.OracleClient切换为Oracle.DataAccess.Client或Oracle.ManagedDataAccess.Client; - 重新测试数据源连接,确认能正常读取数据后再尝试部署。
- 下载安装Oracle官方的ODP.NET驱动(优先选择托管版本
显式处理Oracle日期/时间戳类型
即使日期值在有效范围内,Oracle的TIMESTAMP类型(含小数秒)与SSAS的日期类型映射可能触发OleAut验证失败。在Oracle查询中显式转换日期列:- 若为
TIMESTAMP类型,截断小数秒转为标准DATE:TRUNC(your_timestamp_column) AS your_date_column - 或强制转换为DATE类型:
CAST(your_date_column AS DATE) AS your_date_column
同时在SSAS项目中确认列的数据类型与查询返回的类型匹配(比如将原DateTime类型改为DateTime2,若需保留小数秒)。
- 若为
排查隐藏的无效日期值
再次检查Oracle数据表中的日期列,重点排查:- 小于
01-01-1900或大于31-12-9999的极端值,用Oracle查询验证:SELECT * FROM your_table WHERE your_date_column < TO_DATE('01-01-1900', 'DD-MM-YYYY') OR your_date_column > TO_DATE('31-12-9999', 'DD-MM-YYYY') - 空值或默认值异常:部分场景下空值会被转换为OleAut不识别的占位符,可在查询中用
NVL替换空值为合法日期(如NVL(your_date_column, TO_DATE('01-01-1900', 'DD-MM-YYYY')))。
- 小于
调整部署验证逻辑
全处理与部署的元数据验证规则不同,尝试以下操作:- 在SSAS项目中刷新数据源架构,确保表结构和列类型与Oracle端完全同步;
- 先执行增量部署(仅部署修改的对象),而非全量解决方案部署;
- 手动在SSAS服务器上创建数据源,再通过“从数据源导入”方式重建表,避免元数据映射错误。
内容的提问来源于stack exchange,提问作者user9517769
相关产品推荐
相关产品推荐

