DQS - сопоставление пустых доменов

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

Соответствие информации о счете

2 ответа

Решение

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

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

К сожалению, эта функция в настоящее время не поддерживается, поэтому существуют только обходные пути, которые вы перечислили выше.

"Нулевые значения в соответствующих полях двух записей будут считаться совпадением"

источники:

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
  • найти все записи, которые имеют нулевое совпадение, и рассчитать скорректированное значение
  • обновить результаты

пример процесса

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
Другие вопросы по тегам