sql-server - OLE DB 无法将值转换为请求的数据类型
问题描述
以下情况发生在 SQL Server 版(2017 标准版)上,SSAS 版本为 14.0.6.443
处理过程中的错误消息最好地总结了该问题:
后端数据库访问模块中的错误。OLE DB 无法将值转换为列“dbo_Fact_Purchase_Order_Detail0_2”请求的数据类型。
OLAP 存储引擎中的错误:处理来自 SSAS PRD 数据库的“Cube_Name”多维数据集的“供应商交易”度量值组的“事实采购订单详细信息”分区时发生错误。
起初,错误似乎与数据类型有关。不同服务器上的其他 SSAS 实例可以读取数据,而有问题的 SSAS 实例不能。问题似乎出在 SSAS 或 OLE DB 连接器(来自 SSAS)中。
情况
我们正忙于安装新的开发和生产 sql server。ETL(使用 SSIS)已经工作,我们开始处理多维数据集,但进展并不顺利。
在 Visual Studio 中,我们可以将相同的 SSAS 多维数据集项目部署到新旧服务器。旧服务器能够处理多维数据集,但新服务器无法处理多维数据集。底层数据源视图仅在服务器名称上有所不同
在谷歌搜索和测试之后,我们认为/认为问题与排序规则或语言设置有关:因为我们在谷歌上发现了以下可能有用的命中:
我们尝试了以下方法:
在源数据库上执行为多维数据集处理生成的查询:成功
将 SSAS 项目部署和处理到旧的生产和开发服务器:成功
在度量值组的分区属性中使用自定义查询排除了 0.000000 值。加工成功
对比新旧服务器和SSAS数据库的设置是否相同。他们是一样的
仅处理维度是成功的
将运行SSAS服务代理的用户改为我的个人账号,处理不成功
比较上面发布的 doc.microsoft.com 链接所争论的所有设置没有差异
将旧生产服务器上的实时多维数据集备份并还原到新生产服务器并处理多维数据集处理不成功
刷新数据源视图没有帮助
检查无效值的表和数据库所有值都有效
将 0.000000 更改为一个
NULL
值没有帮助添加
Packet Size=32767
到数据源的连接字符串,没有成功我们还尝试了Native OLE DB\SQL Server Native Client 11.0而不是Native OLE DB\Microsoft OLE DB Provider for SQL Server,没有给出任何肯定的结果。
将值从 转换
Decimal
为Float
。Float
和Double
,在 SSAS 中使用,是相同的,但仍然在相同的错误上处理失败。卸载的 SSAS en 重新安装,同样的错误,没有成功 http://nisalbi.blogspot.com/2017/08/how-to-uninstall-sql-server-analysis.html
删除问题指向的维度,成功,也可能是两个明显对应的列有不同的数据定义。从 中替换它们。更正此问题,再次将它们添加到数据源视图中,它应该可以工作。在不同的服务器上工作
我们预计多维数据集应该能够成功处理,因为我们具有与数据源视图相同的数据库结构,并且我们无法发现新旧服务器之间的一般属性和连接属性有任何区别。
解决方案
推荐阅读
- reactjs - EasyAdmin 添加自定义 Web 资产
- c# - 使 Json.Net 将布尔值序列化为字符串
- go - 如何使用 Go 编程语言对文件名进行排序?
- react-native - 错误:缺少 app.json。请参阅 https://docs.expo.io/ 错误 Expo 最低限度的工作流程
- r - 从逗号分隔文本到矢量
- workbox - Workbox 4.1 backgroundSync:队列和插件
- python - Lotus Notes 首次设置禁用弹出窗口
- javascript - 如何将每个人从某个角色转移到一个频道
- android - registerResGeneratingTask 已弃用,使用 registerGeneratedResFolders(FileCollection)
- html - 使用 flex 来对齐已经有 flex 的项目?