2013-03-20 3 views
1

Это способ настроить соответствующие правила в DQS Проект качества данных игнорировать соответствие пустых доменов? Мне очень странно, если два пустых значения домена считаются совпадением для 100%. Я всегда могу, конечно, написать newid() во всех пустых областей внутри основного источника данных SQL (вид), но это перебор, и может быть, есть «правильный» способ сделать это ...DQS - сопоставление пустых доменов

Matching Score Details

ответ

0

Я нашел приемлемое решение. Пустые поля внутри Составной домен не считается совпадающим.

Кстати, если все составные поля домена двух записей пусты, то эти домены считаются совпадающими на 100%. Но я вполне доволен этим.

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 по умолчанию 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 [email protected]_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