Список бизнес-правил TSQL в MDS

Мне нужна помощь с запросом моих бизнес-правил в SQL!

Я создал пару бизнес-правил в веб-службе MDS для проверки моих основных данных и обнаружил, что 2% моих данных не соответствуют правилам. Теперь я создал представление подписки SQL, чтобы сообщать о недопустимых данных в PowerBI. В моем отчете PowerBI мне нужно сообщить бизнес-пользователю, почему данные недействительны, но я не могу, поскольку представление подписки сообщает только о том, где данные недействительны, но не о том, почему данные недействительны. Поэтому мне нужно знать, как я могу запросить свои бизнес-правила из базы данных MDS в SQL и сопоставить их с моей моделью данных PowerBI. Есть ли способ запросить список бизнес-правил из базы данных MDS?


person Reza Azimi    schedule 05.07.2018    source источник


Ответы (1)


Итак, есть несколько способов сделать это. Вот несколько решений, пожалуйста, выберите то, которое подходит для вашего сценария.

1. SQL — список всех бизнес-правил

Следующий запрос извлечет список всех активных бизнес-правил, созданных в MDS.

SELECT *
  FROM [MDM].[mdm].[viw_SYSTEM_SCHEMA_BUSINESSRULES]
  WHERE Model_Name = 'YourModelName'
  AND BusinessRule_StatusName = 'Active'

Вы можете, конечно, дополнительно фильтровать по Entity_Name и т. д. Важными столбцами в вашем случае будут:

  • [BusinessRule_Name]
  • [BusinessRule_Description]
  • [BusinessRule_RuleConditionText]
  • [BusinessRule_RuleActionText]

Примечание. Проблема в вашем сценарии, я думаю, будет заключаться в том, что представление подписки объекта не имеет идентификаторов конкретных бизнес-правил, которые не удалось выполнить. Поэтому я не уверен, как вы свяжете эти 2 вместе (неудачные строки -> Список бизнес-правил). Также помните, что в каждой строке может быть несколько невыполненных бизнес-правил.

2. используя вид viw_SYSTEM_USER_VALIDATION

Это представление имеет исторический список всех бизнес-правил (+информация о строке), которые не удалось выполнить. Вы можете использовать представление следующим образом:

SELECT 
    DISTINCT ValidationIssue_ID, Version_ID, VersionName, Model_ID, ModelName, Entity_ID, EntityName, Hierarchy_ID, HierarchyName, Member_ID, MemberCode, MemberType_ID, MemberType, ConditionText, ActionText, BusinessRuleID, BusinessRuleName, PriorityRank, DateCreated, NotificationStatus_ID, NotificationStatus
FROM [MDM].[mdm].[viw_SYSTEM_USER_VALIDATION]
 WHERE --CAST(DateCreated as DATE) = CAST(GETDATE() as DATE) AND
    ModelName = 'YourModelName'
    --AND EntityName IN ('Entity_1','Entity_2') -- Use this to Filter on specific Entities

Здесь используйте столбцы Model_ID, Entity_ID и Member_ID/MemberCode, чтобы определить конкретную модель, объект и строку, в которой произошел сбой.

Столбцы BusinessRuleName, ConditionText и ActionText дадут вашим пользователям дополнительную информацию о невыполненном бизнес-правиле.

Примечание.

  • Одна из проблем с использованием этого представления заключается в том, что даже если, скажем, ваше состояние сбоя было устранено пользователем на следующий день, представление все равно будет показывать, что в определенную дату проверка не удалась. (через столбец DateCreated).
  • Также обратите внимание, что одна и та же ошибочная строка данных будет отображаться здесь несколько раз, если несколько бизнес-правил в одной и той же строке не прошли проверку (будут разные BusinessRuleID/Name и т. д.). Просто кое-что, чтобы принять к сведению.
  • Точно так же одна и та же строка может появляться несколько раз, если она снова и снова терпит неудачу в разное время. Чтобы обойти это, и если ваш окончательный отчет может с этим справиться, добавьте предложение WHERE в столбец DateCreated, чтобы вы могли видеть только те строки, которые не прошли сегодня. Закомментированная строка кода <--CAST(DateCreated as DATE) = CAST(GETDATE() as DATE) AND> делает то же самое. Если вы не можете использовать это, просто убедитесь, что строка данных различна. Однако, если вы это сделаете, помните, что если что-то не удалось вчера (и все еще находится в состоянии «Не удалось»), оно может не отображаться.

Мое предложение состояло бы в том, чтобы использовать слегка измененную версию решения № 2:

Получите список неудачных строк из представления подписки (статус ValidationStatus строки данных на самом деле все еще "Failed"), затем ПРИСОЕДИНЯЙТЕСЬ к viw_SYSTEM_USER_VALIDATION, убедившись, что вы выбрали только строку с MAX(DateCreated) значение (конечно, для той же строки данных И бизнес-правила).

Удачи, и если вы найдете что-то еще при решении этой проблемы, поделитесь своими знаниями здесь со всеми нами.

Наконец, если вы нашли это полезным, пожалуйста, не забудьте отметить это как ответ :)

person SilverTry    schedule 05.07.2018
comment
Привет, спасибо за вклад. Мне удалось запросить мои бизнес-правила, но результат второго запроса: system_user_validation был пуст? это потому, что данные временно хранятся в этом представлении? Моя процедура хранения содержит результат. Итак, как я собираюсь запросить результат проверки либо из представления, которое в настоящее время пусто, либо сохранить результат временной таблицы в моей процедуре хранения в новую таблицу. - person Reza Azimi; 06.07.2018