使用默认规则验证指标视图
本操作指南演示如何使用内置验证规则验证已加载的指标视图,并解读诊断信息。
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,还是通过任何读取指标视图的方法(如 Load 或 ImportToTabularFromFile)。
这些自动运行产生的诊断信息随后仍可通过 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