Table of Contents

使用默认规则验证指标视图

本操作指南演示如何使用内置验证规则验证已加载的指标视图,并解读诊断信息。

Note

这些操作指南适用于 Tabular Editor 3.26.2 及更高版本。 较早版本不支持此处展示的 v1.1 指标视图功能。

为这些代码示例加载示例 Metric View

开始前,请确保你已打开 Tabular Editor 3,并已打开一个表格模型;如果没有,也可以新建一个模型。

本操作指南使用一个示例电商 Metric View 来展示销售数据:三张维度表(产品、客户、日期)与一张事实表(订单)进行联接。 使用下面任一方法来加载它(“下载并加载”或“复制并反序列化”),然后继续阅读本操作指南的其余内容。 你可以在与本示例其余部分相同的 C# Script 中运行任一命令;也可以先在单独的 C# Script 中运行该命令,再在另一个 C# Script 中运行本示例的其余部分。

下载 sample-metricview.yaml 然后按路径加载:

SemanticBridge.MetricView.Load("C:/path/to/sample-metricview.yaml");

默认验证规则

Semantic Bridge 包含内置规则,可依据 指标视图文档 中定义的规则来验证指标视图定义。 这些规则会在反序列化时自动运行——无论是直接调用 Deserialize,还是通过任何读取指标视图的方法(如 LoadImportToTabularFromFile)。 这些自动运行产生的诊断信息随后仍可通过 SemanticBridge.MetricView.ImportDiagnostics 获取。 你也可以按需对已加载的指标视图运行这些规则,本文将介绍这一做法。

使用默认规则执行验证

运行不带参数的 SemanticBridge.MetricView.Validate();,即可对已加载的指标视图运行内置规则。

var diagnostics = SemanticBridge.MetricView.Validate().ToList();

Output($"Validation complete: {diagnostics.Count} issue(s) found");

输出

验证完成:发现 0 个问题(s)

示例指标视图有效,因此此处的 Report 不会显示任何问题。

解读诊断信息

每条诊断信息包含:

  • 严重性:错误、警告或信息
  • 信息:问题描述
  • 路径:对象在指标视图层级结构中的位置
var diagnostics = SemanticBridge.MetricView.Validate().ToList();

var sb = new System.Text.StringBuilder();
sb.AppendLine("验证结果");
sb.AppendLine("------------------");
sb.AppendLine("");

if (diagnostics.Count == 0)
{
    sb.AppendLine("未发现任何问题。");
}
else
{
    foreach (var diag in diagnostics)
    {
        sb.AppendLine($"[{diag.Severity}] {diag.Message}");
        sb.AppendLine($"  路径: {diag.Path}");
        sb.AppendLine("");
    }
}

Output(sb.ToString());

输出

验证结果
------------------

未发现任何问题。

包含验证错误的示例

验证始终针对当前已加载的指标视图运行,因此你可以在脚本中故意引入违规,并确认它会被检测出来。 这里我们将某个字段的表达式清空,以触发 FieldExprRequired

var view = SemanticBridge.MetricView.Model;
view.Fields["order_year"].Expr = "";

var diagnostics = SemanticBridge.MetricView.Validate().ToList();

var sb = new System.Text.StringBuilder();
sb.AppendLine("验证结果");
sb.AppendLine("------------------");
sb.AppendLine("");

if (diagnostics.Count == 0)
{
    sb.AppendLine("未发现任何问题。");
}
else
{
    foreach (var diag in diagnostics)
    {
        sb.AppendLine($"[{diag.Severity}] {diag.Message}");
        sb.AppendLine($"  路径: {diag.Path}");
        sb.AppendLine("");
    }
}

Output(sb.ToString());

输出:

验证结果
------------------

[错误] 字段 'order_year' 的 expr 不能为空
  路径:Model.Fields["order_year"].Expr

按严重性筛选诊断信息

你可以筛选诊断信息,只查看错误:

using System.Linq;
using TabularEditor.SemanticBridge.Orchestration;

var diagnostics = SemanticBridge.MetricView.Validate().ToList();
var errors = diagnostics.Where(d => d.Severity == DiagnosticSeverity.Error).ToList();

var sb = new System.Text.StringBuilder();
sb.AppendLine($"错误数: {errors.Count}");
sb.AppendLine($"问题总数: {diagnostics.Count}");
Output(sb.ToString());

输出

错误:0
问题总数:0

后续步骤

另见