# 合成钥

当两个或多个内部表格拥有两个或多个共同字段时，这意味着存在复合的关键字段关系。QlikView 通过自动创建合成钥来处理此问题。这些关键字段是一种匿名字段，表示所有发生的复合关键字段的组合。

如果在加载数据时收到有关合成钥的警告，建议您在表格查看器中查看数据结构。您应自己想想数据模型是否正确。有时（但并非总是），由于脚本中的错误，会出现合成钥。

多个合成钥通常是数据模型不正确的症状，但也不是绝对。但是，如果您具有基于其他合成钥的合成钥，则肯定表明数据模型不正确。

警告注释当合成钥数量增加时（这取决于数据总数，表格结构和其他因素），QlikView 可能会，也可能不会处理，并且最终可能会耗用过量的时间和/或内存。在此情况下，您需要通过删除所有合成钥来重新编写您的脚本。

![Two tables, IntervalMatchLength and LengthRange, have the Start and End fields in common. They are connected by the $Syn 1 field, which leads to the $Syn 1 Table, which contains only $Syn 1 and Start and End.](https://help.qlik.com/zh-CN/qlikview/September2025/Subsystems/Client/Content/Resources/Images/ex_gen_SyntheticKeys_dmv.png)

## 处理合成钥

如果需要避免合成钥，有多种方法可在加载脚本中解决此问题：

* 确认仅使用逻辑上链接两个表格的字段作为关键字。

  * 诸如“Comment”、“Remark”和“Description”等字段可能存在于多个表格，但不相关，因此不应用作关键字。
  * “Date”、“Company”和“Name”等字段可能位于多个表格中并且具有相同值，但仍具有不同的角色（订单日期/发货日期、客户公司/供应商公司）。在此情况下，不应将它们用作关键字。

* 确保未使用冗余字段，即，确保仅必要的字段进行连接。如果数据被用作密钥，确保不加载多个内部表格的相同日期的 year，month 或 day\_of\_month。

* 如有必要，通常使用 AutoNumber 脚本函数中的字符串 concatenation 自行创建非复合关键字段。