前言
本文通过一个简单但完整的实验,来梳理 Dynamics CRM 中的货币字段(Currency Field) 是如何工作的,以及它在多币种场景下的表现规则。
在本文的实验环境中:
基础货币(Base Currency) 设置为 美元(USD)
新建了两个用于演示的实体:
- Invoice
- Invoice Detail
两个实体之间是一对多关系(Invoice → Invoice Detail)
基本概念
在 Dynamics CRM 中,货币(Currency)是一种特殊的字段类型,用于存储与金额相关的数据。
一个容易被忽略但非常重要的点是:
当你在实体中创建一个“货币字段”时,系统实际上会在后台自动创建 4 个字段。
以我在 Invoice Detail 实体中新建的 Amount 货币字段为例,系统在后台生成了以下字段:
- gdh_amount 👉 存储 实际输入的货币值
- gdh_amount_Base 👉 存储 根据汇率换算后的基础货币金额
此外,还会自动关联两个字段:
- 币种(Currency)
- 汇率(Exchange Rate)

新建币种(Currency)
进入路径:
打开 Power Platform 管理中心 –> 选择 “环境” –> 进入 “设置” –> 选择 “币种”

在弹出的页面,新添币种

为了这次实验,我添加了两个币种:人民币 和 日元,新建的信息如下:
| 货币名称 | 货币代码 | 货币符号 | 汇率 | 货币精度 |
|---|---|---|---|---|
| US Dollar | USD | $ | 1.0000 | 2 |
| RMB | CNY | ¥ | 7.2500 | 2 |
| JPY | JPY | JPY ¥ | 147.6300 | 2 |
💡1. 汇率 更新时,Dynamics CRM 不会重新计算所有货币字段
💡2. 汇率 由系统管理员设定
新建实验数据:多币种金额如何换算?
在 Invoice Detail 中,我分别创建了三条记录,使用不同币种填写 Amount 字段:
| No. | Currency | Amount | Amount(Base) | Exchange Rate |
|---|---|---|---|---|
| SASD-00001260 | JPY | JPY ¥ 1,000.00 | $6.77 | 147.6300000000 |
| SASD-00001259 | US Dollar | $1,000.00 | $1,000.00 | 1.0000000000 |
| SASD-00001258 | RMB | ¥ 1,000.00 | $137.93 | 7.2500000000 |

可以清楚看到:
当币种是 基础货币(USD) 时,Amount 与 Amount(Base) 完全一致
当币种不是基础货币时,系统会根据:
Amount(Base) = Amount ÷ Exchange Rate
自动完成换算,无需任何自定义逻辑或插件。
货币字段 + 汇总(Rollup)会发生什么?
接下来,我们在 Invoice 实体中新建一个货币类型的汇总字段:
Example - Total Amount
该字段用于汇总当前 Invoice 下所有 Invoice Detail 的金额。

汇总规则说明
汇总字段的配置规则如下:
- 汇总来源:Invoice Detail
- 汇总字段:Amount
- 汇总方式:Sum

汇总结果

最终你会发现:
系统并不是直接“把不同币种的 Amount 相加”
实际执行逻辑是:
1️⃣ 将子表金额统一转换为 Base 金额
2️⃣ 汇总 Amount(Base)
3️⃣ 再根据当前 Invoice 的币种和汇率,换算为显示金额
也就是说:汇总字段的计算核心,永远围绕 Amount(Base) 展开
💡CRM 中的 汇总字段是定时计算的,可在系统作业中设置频率,最快每 1 小时计算一次,也可以在字段旁点击“小键盘”图标,手动触发 重新计算

关于用户默认货币(User Default Currency)
因为我们设置的基础货币是美元,其实在 CRM 中,每个用户都可以设置自己的默认货币,如果用户为自己设置了默认货币,那么在新建 Invoice 记录时,币种字段就会默认赋值用户自己设置的默认货币

例如,我为 test06 用户设置默认货币为日元,然后去新建一条 Invoice 记录

可以看到,在新建表单中的币种字段已经默认赋值为日元

参考资料
如果本文对你有所帮助,可以请我喝杯咖啡
(完)