---
title: "应用数据映射模式"
date: "2015-12-28"
categories: 
  - "data-integration"
tags: 
  - "data-integration"
  - "data-mapping"
  - "mapforce"
description: 利用 Altova MapForce，探索高效的数据映射模式，从而简化数据转换任务。 了解精确匹配和条件匹配的策略。
---
Status: #blog

Tags:  #data-integration #data-mapping #mapforce

Categories: [data-integration](/blog/zh/category/data-integration.md)
# 应用数据映射模式

Altova MapForce 包含强大的映射组件，这些组件对应于用于满足[数据转换](https://www.altova.com/zh/mapforce.html)需求的设计模式。 提前分析数据映射的挑战，并遵循一些简单的指导原则，可以发现[数据映射](https://www.altova.com/zh/mapforce.html)模式，从而简化映射设计的创建，并最终获得最佳解决方案。 "MapForce 示例"项目提供了示例映射文件和数据集，这些文件和数据集展示了许多常见的数据映射模式。 查阅这些示例，并使用 MapForce 内置的执行引擎运行它们，是帮助您为自己的项目选择最佳模式的另一种有效方法。

![shutterstock_240957604 (这只是一个文件名，没有实际意义，因此直接翻译为文件名即可。)](/blog/images/shutterstock_240957604.jpg)

<!--more-->

**精确匹配 vs. 条件匹配**

首先，确定您的输入和输出之间是严格一一对应的关系，还是需要分析更复杂的情况，例如从...到...的范围，或者需要使用条件语句（如if-else）。

精确匹配功能允许您通过一个简单的双列表格来表达您的需求。算法的工作原理是：“在左列中查找与给定输入值完全匹配的项，然后使用该行右列中的值。” 请注意，左列中的所有项目必须是唯一的，而右列中可能存在重复的值。

![Altova MapForce 示例：使用值映射进行数据转换](https://lh3.ggpht.com/-HD2lZmhuXL0/T9ZpDLpo6nI/AAAAAAAAA0g/NeTxGqno0ao/clip_image0013.png?imgmax=800 "Altova MapForce value-map example")

精确匹配的例子包括将月份名称映射到数字，或者将ISBN转换为书籍标题。

**精确匹配选项**

如果表格中的条目数量固定且相对较少（例如，最多20个，或者在特殊情况下最多200个），可以使用“值映射”组件。典型的应用场景包括将月份名称转换为数字，或者将一种代码转换为另一种代码（例如，将“F”转换为“XX”，将“M”转换为“XY”）。

您甚至可以重命名“value-map”组件的输入和结果列的名称。只需在“value-map”属性对话框中，双击“input”或“result”名称（或者点击铅笔图标），然后开始输入即可。 这样可以更轻松地识别映射中多个“value-map”组件的用途。

![数据映射中的价值映射属性](https://lh3.ggpht.com/-stfUPR9mn4E/T9ZpDfwrzrI/AAAAAAAAA0o/94wsYpN9SfA/clip_image0023.png?imgmax=800 "Value-map properties")

“MapArticle.mfd” 示例展示了如何使用“value-map”组件。

有时我们会收到询问，为什么没有一个设置可以将未知的输入值原样传递到输出。 答案是，如果输入和输出端的数据类型不同，这样做就无法实现。 例如，如上所示，将整数映射到字符串就是一个例子。

解决方案是取消选中“Otherwise”选项（这样，对于未知输入，value-map将返回一个空序列），然后在输出端使用核心函数库中的“substitute-missing”节点，将这个空序列替换为原始输入值。

**更大的查找表**

对于大量数据条目或经常变化的查找表，使用数据库查询是最佳解决方案。这意味着查找表的实际值不会直接包含在映射中，而是存储在数据库中。为了实现这种模式，需要在映射中添加一个数据库组件和一个SQL-WHERE组件。DB_PhoneList.mfd示例展示了这种策略。

如果您无法使用数据库，并且数据量不大，您也可以使用其他组件来代替，例如 XML 或 CSV，以及一个过滤组件，就像在示例文件 CompletePO.mfd 中看到的。但是，这种方案在运行时可能比使用带有 WHERE 子句的数据库更慢。

对于某些需求，您甚至可能需要调用 Web 服务来查找值。示例文件 BookISBNConvertWS.mfd 和 CurrencyConverter.mfd 展示了如何使用 Web 服务进行数据查询。

![MapForce Web服务组件在数据映射中的应用](https://lh5.ggpht.com/-2wRWs-erBg0/T9ZpD4K3NiI/AAAAAAAAA0w/WttxTBN75S0/clip_image0033.png?imgmax=800 "MapForce Web service component")

**条件匹配**

如果需要进行比精确匹配更复杂的条件判断，例如检查输入值的范围，可以使用“if-else”组件，就像在示例文件“ClassifyTemperatures.mfd”中展示的那样。

![MapForce 的条件语句组件](https://lh4.ggpht.com/-Djdv-ktABMk/T9ZpEDSp8lI/AAAAAAAAA04/Xp3oHEVGi9E/clip_image0043.png?imgmax=800 "MapForce if-else component")

在“如果-否则”组件中，红色的加号允许您添加更多测试条件，每个条件都基于不同的逻辑函数。 “否则”输入框允许您定义在所有逻辑测试条件都不满足时，结果应该是什么。

**复杂映射与组件重用**

如果您的数据转换需求涉及多个输入和输出，您可以轻松地在一个映射中包含多个值映射和条件判断组件。

您可以复制上述任何组件，方法是在单个设计中或在不同的映射文件中使用复制和粘贴。此外，您还可以将此处描述的任何解决方案封装在用户自定义函数中，以便重复使用。您可以将您自己的函数保存到用户函数库中，以便在其他项目中使用，或者与同事共享。

**亲自体验一下，看看如何在您自己的数据转换项目中轻松应用 MapForce 的数据映射方案！** [下载免费的30天试用版](https://www.altova.com/zh/download/mapforce/data_mapping_enterprise.html) **关于 MapForce 的信息。**
