DQS - 匹配空域

时间:2013-03-20 14:23:10

标签: sql-server-2012 matching data-quality-services

是否可以在DQS 数据质量项目中配置匹配规则以忽略与空域的匹配? 如果两个空域值被认为是100%的匹配,我觉得很奇怪。当然,我总是可以在底层sql数据源(视图)中的所有空域中编写newid(),但这样做太过分了,也许有“正确”的方法来做到这一点......

Matching Score Details

2 个答案:

答案 0 :(得分:1)

遗憾的是,目前不支持此功能,因此仅存在您在上面列出的解决方法。

"两条记录的相应字段中的空值将被视为匹配"

来源:

http://technet.microsoft.com/en-us/library/hh213071.aspx

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/7b52419c-0bb8-4e56-b920-e68ff551bd76/can-i-set-a-matching-rule-to-only-match-if-the-value-is-not-null?forum=sqldataqualityservices

实施任何变通方法时的注意事项 - 性能将受到负面影响。对于更大的数据集,您会注意到这一点。

FWIW我实施的解决方法:

  • 将匹配结果保存到表中,包括列isMatchingScoreAdjusted default 0
  • 查找所有具有空匹配并计算调整值的记录
  • 更新结果

示例proc

DECLARE @GIVEN_NAME FLOAT = 22;

WITH adjustedscore
AS (
    SELECT c.MatchingScore
        + case when  p.GIVEN_NAME is null and c.GIVEN_NAME is null then -@GIVEN_NAME else 0 end 
        as [AdjustedMatchingScore]
        ,c.RecordId
FROM [dbo].[dqs_matches] p
INNER JOIN [dbo].[dqs_matches] c ON c.SiblingId = p.RecordId
WHERE c.IsPivot = 0
    AND p.GIVEN_NAME IS NULL
    AND c.GIVEN_NAME IS NULL
)
UPDATE m SET MatchingScore = a.AdjustedMatchingScore, isMatchingScoreAdjusted = 1
FROM adjustedscore a
INNER JOIN [dbo].[dqs_matches] m ON m.RecordId = a.RecordId
where m.isMatchingScoreAdjusted = 0

答案 1 :(得分:0)

我找到了可接受的解决方案。 复合域中的空字段不被视为匹配。

顺便说一下,如果 all 两个记录的复合域字段为空,那么这些域在100%时被视为匹配。但我对此非常满意。