【问题标题】:TSQL list of business rules in MDSMDS中业务规则的TSQL列表
【发布时间】:2023-03-26 03:28:01
【问题描述】:

我在查询我的 SQL 业务规则方面需要帮助!

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

【问题讨论】:

    标签: tsql powerbi master-data-services


    【解决方案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]

    注意:我认为,您的场景中的挑战将是实体的订阅视图没有失败的确切业务规则的 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
    

    在这里,使用Model_IDEntity_IDMember_ID/MemberCode 列来识别失败的特定模型、实体和行。

    BusinessRuleNameConditionTextActionText 列将为您的用户提供有关失败的业务规则的更多信息。

    注意:

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

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

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

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

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

    【讨论】:

    • 您好,感谢您的意见。我成功查询了我的业务规则,但第二个查询的结果:system_user_validation 为空?是因为数据暂时存储在这个视图中吗?我的存储过程包含结果。那么我将如何从当前为空的视图中查询验证问题的结果,或者将存储过程中临时表的结果保存到新表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多