0

我需要帮助来查询我在 SQL 中的业务规则!

我在 MDS Web 服务中创建了几个业务规则来验证我的主数据,并发现我的 2% 的数据不符合规则。现在我创建了一个 SQL 订阅视图来报告 PowerBI 中的无效数据。在我的 PowerBI 报告中,我需要告诉业务用户为什么数据无效,但我不能,因为订阅视图只告诉数据在哪里无效,而不是为什么数据无效。所以我需要知道如何在 SQL 中从 MDS 数据库中查询我的业务规则,并将其与我的 PowerBI 数据模型进行映射。有没有办法从 MDS 数据库中查询业务规则列表?

4

1 回答 1

0

好的,所以有多种方法可以解决这个问题。这里有一些解决方案,请选择一个适合您的场景。

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]

注意:我认为,您的场景中的挑战将是实体的订阅视图没有失败的确切业务规则的 ID。所以我不确定你将如何将这两个联系在一起(失败行 -> 业务规则列表)。另请记住,每一行可能有超过 1 个失败的业务规则。

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

在这里,使用 columnsModel_ID和/来标识失败的特定模型、实体和行。Entity_IDMember_IDMemberCode

Columns BusinessRuleName, ConditionText&ActionText将为您的用户提供有关失败的业务规则的附加信息。

笔记:

  • 使用此视图的一个问题是,即使您的失败条件在第二天由用户解决,该视图仍将显示在某个日期验证失败。(通过列DateCreated)。
  • 另请注意,如果同一行上的多个业务规则验证失败(会有不同的 BusinessRuleID/Name 等),则相同的失败数据行将在此处出现多次。只是需要注意的一点。
  • 同样,如果同一行在不同时间再次失败,则可能会出现多次。要解决此问题,并且如果您的最终报告可以这样做,请在 DateCreated 列上添加 WHERE 子句,以便您只能看到今天失败的任何行。注释掉的代码行也是<--CAST(DateCreated as DATE) = CAST(GETDATE() as DATE) AND>如此。如果您不能使用它,只需确保数据行是不同的。但是,如果您这样做,请记住,如果某项昨天失败(并且仍处于失败状态),它可能不会显示。

我的建议是使用稍微修改过的解决方案#2:

从您的订阅视图中获取失败行的列表(数据行的 ValidationStatus 实际上仍然是 'Failed'),然后加入并viw_SYSTEM_USER_VALIDATION确保您只选择具有MAX(DateCreated)值的行(当然对于相同的数据行和业务规则)。

祝你好运,如果您在解决此问题时发现任何其他问题,请在这里与我们所有人分享您的学习。

最后,如果您觉得这很有用,请记得将其标记为答案 :)

于 2018-07-05T21:13:07.083 回答