Sql server 通过LinkServer的MDX OPENQUERY-结果me 2.999999999E-2

Sql server 通过LinkServer的MDX OPENQUERY-结果me 2.999999999E-2,sql-server,mdx,openquery,Sql Server,Mdx,Openquery,我正在使用存储过程从OLAPCube获取结果,使用LinkServer对象和OPENQUERY构造 查询工作正常。但对于计算出的lifetimeCapacity measure之和,结果是2.9999999999999E-2,当我在SSMS MDX查询面板中直接运行相同的MDX时,效果很好。我不知道我是怎么处理的,为什么会这样。请帮我处理这个案子 不应使用浮点类型。对于保存该值的变量,请在存储过程中使用decimal或double(SQL类型)decimal(8,2),或者如果直接从查询返回,则

我正在使用存储过程从
OLAP
Cube获取结果,使用LinkServer对象和
OPENQUERY
构造


查询工作正常。但对于计算出的lifetimeCapacity measure之和,结果是2.9999999999999E-2,当我在SSMS MDX查询面板中直接运行相同的MDX时,效果很好。我不知道我是怎么处理的,为什么会这样。请帮我处理这个案子

不应使用浮点类型。对于保存该值的变量,请在存储过程中使用decimal或double(SQL类型)
decimal(8,2)
,或者如果直接从查询返回,则对其强制转换

这将使这些计算四舍五入到最接近的0.01,该值为0.03


增加类型的第二个参数以增加精度的小数位数。

它是浮点型的,因此首先通过强制转换让sql server知道它是浮点型的…然后执行进一步的转换:

SELECT
    CONVERT(DATETIME, CONVERT(CHAR(20),"[Date].[Date - Calendar Month].[Member_Caption]"))  AS [Date]
    , CONVERT(NUMERIC(18,2),CAST(ISNULL("[Measures].[SomeNumericMeasure]", 0.0) AS FLOAT))  AS SomeNumericMeasure
FROM 
    OPENQUERY
    ...
    ...

如果您期望的数字是
0.03
(所有问题报告都应具有实际和预期的行为),这将归结为浮点不精确。在对olap多维数据集使用openquery时,我们遇到了这个问题;不确定这是否是最佳解决方案,但最初将其转换为浮点,然后再转换为十进制似乎是可行的。我不相信直接转换是可行的。您的意思是在合并的MDX查询中我如何做到这一点。我有ap使用了各种格式的字符串,但这不起作用