【问题标题】:How to control decimal precision on Power BI's DAX如何控制 Power BI DAX 上的小数精度
【发布时间】:2017-08-22 14:14:23
【问题描述】:

假设我有一个带有字段 Field1 的表“Table1”,带有 Field2 的“Table2”。我在“Table1”、“CField”中有另一个计算列,它有公式:

CField = ROUND(Table1[Field1] * RELATED(Table2[Field2]); 2)

该公式总体上运行良好,只是有时它没有给出正确的值。例如:

  • 字段1 = 50.23
  • 字段2 = 0.065

用计算器计算得到 3.26495。四舍五入到 2 位小数应该得到 3.26,但在这种情况下,PowerBI 得到 3.27。

我在这里最好的假设是 Field1 * Field2 的结果被计算为 CURRENCY,因此在四舍五入到 3.27 之前四舍五入到 3.265。

我的问题是:有没有办法强制 Power BI 保持我需要的精度并获得我想要的 3.26 的结果?

编辑:3.27 不仅仅是一个显示问题。如果我给显示的值加上小数,它会得到 3.27000。

【问题讨论】:

  • 你能分享一个小型 pbix 报告中的重现,以便我帮你修复它吗?

标签: powerbi dax powerbi-datasource


【解决方案1】:

不知何故,我能够使用有关数据类型的特定设置来重现这种情况。你可以检查一下是不是和你的情况一样。

正如你所说,这与Format 无关(即显示问题)。问题出在Data type。当所有三列都设置为Decimal Number 时,Power BI 返回3.26

但是,当 Field1 更改为 Fixed decimal number 时,Power BI 将返回 3.27

根据Power BI documentation

固定十进制数 – 具有固定的小数分隔符位置。 小数点分隔符总是右侧有四位数字,并且允许 19 位有效数字。它可以表示的最大值是 922,337,203,685,477.5807(正或负)。固定小数 数字类型在舍入可能引入错误的情况下很有用。

因此,对此的解释是,将结果 3.26495 四舍五入为 3.2650(四位小数),然后四舍五入为 3.27(通过 DAX 函数四舍五入)。

结论: 将所有Data type 更改为Decimal Number 应该可以解决舍入错误问题。


虽然我仍然不清楚为什么当Field1 的数据类型为Fixed decimal number 而不是CField 时会发生这种情况。欢迎任何补充 cmets。

【讨论】:

  • 我一直在寻找,发现CURRENCY * REAL = CURRENCY。不确定考虑到CURRENCY * CURRENCY = REAL 有多大意义。无论如何,我最终通过执行ROUND(Table1[Field1] * CURRENCY(RELATED(Table2[Field2])); 2) 来修复我的计算,这并不理想,但不会影响我的情况下的结果。我宁愿做REAL(Table1[Field1]),但这样的选择似乎不存在。
【解决方案2】:

检查您的列数据类型。在 Power BI 中,十进制实际上是一个浮点数,因此不应与 SQL Server 等其他数据库产品中的十进制数据类型相混淆。

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 2023-03-17
    • 2016-07-04
    • 2021-07-15
    • 1970-01-01
    • 2017-06-21
    • 2022-08-13
    • 1970-01-01
    相关资源
    最近更新 更多