从 Metric View 中移除对象
本操作指南演示如何删除 Metric View 字段和度量值。 类似的方法适用于 Metric View 中的所有集合。
Note
这些操作指南适用于 Tabular Editor 3.26.2 及更高版本。 早期版本不支持此处展示的 v1.1 Metric View 功能。
为这些代码示例加载示例 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");
Note
这里的每个移除脚本都会影响当前已加载的 Metric View。
如果你想把这些脚本都运行一遍,请确保在每次移除操作前都先运行上面的 Deserialize。
按名称移除
获取要删除的 Metric View 字段,然后删除它。
删除对象后,请勿再尝试修改它。
你仍可读取已删除对象的属性。
对同一对象多次调用 Delete() 是安全的;第一次之后,其余调用都不会执行任何操作。
var view = SemanticBridge.MetricView.Model;
var sb = new System.Text.StringBuilder();
sb.AppendLine($"Fields before: {view.Fields.Count}");
var fieldToRemove = view.Fields["order_month"];
fieldToRemove.Delete();
fieldToRemove.Delete(); // note we can call Delete twice safely
sb.AppendLine($"Removed: {fieldToRemove.Name}");
sb.AppendLine($"Fields after: {view.Fields.Count}");
Output(sb.ToString());
输出:
移除前字段数:6
已移除:order_month
移除后字段数:5
可以看到,虽然多次调用了 Delete(),但实际只移除了一次。
移除一个度量值
移除度量值的方法相同:先获取该度量值的引用,再删除它。
var view = SemanticBridge.MetricView.Model;
var sb = new System.Text.StringBuilder();
sb.AppendLine($"移除前度量值数:{view.Measures.Count}");
var measureToRemove = view.Measures["gross_margin"];
measureToRemove.Delete();
sb.AppendLine($"已移除:{measureToRemove.Name}");
sb.AppendLine($"移除后度量值数:{view.Measures.Count}");
Output(sb.ToString());
输出:
移除前度量值数:6
已移除:gross_margin
移除后度量值数:5
移除多个 Metric View 字段
先筛选出要移除的字段,用 ToList 为它们创建快照,然后逐个删除。
先创建快照可避免在遍历集合时修改该集合。
var view = SemanticBridge.MetricView.Model;
var sb = new System.Text.StringBuilder();
sb.AppendLine($"移除前字段数:{view.Fields.Count}");
// 移除所有与日期相关的字段
string[] toRemove = ["order_date", "order_year", "order_month"];
foreach (var field in view.Fields.Where(f => toRemove.Contains(f.Name)).ToList())
{
field.Delete();
}
sb.AppendLine($"移除后字段数:{view.Fields.Count}");
sb.AppendLine();
sb.AppendLine("剩余字段:");
sb.AppendLine("-----------------");
foreach (var field in view.Fields)
{
sb.AppendLine($" {field.Name}");
}
Output(sb.ToString());
输出:
移除前字段数:6
移除后字段数:3
剩余字段:
-----------------
product_name
product_category
customer_segment
从指定表中移除 Metric View 字段
移除所有引用日期表的 Metric View 字段。
Warning
此示例无法保证会移除所有引用指定 Metric View Join 的 Metric View 字段,也无法保证只移除这些字段。 Metric View 字段可能包含几乎任意的 SQL 表达式,也可能引用之前定义的 Metric View 字段。 此示例仅用于说明。
var view = SemanticBridge.MetricView.Model;
var sb = new System.Text.StringBuilder();
sb.AppendLine($"删除前字段数:{view.Fields.Count}");
foreach (var field in view.Fields.Where(f => f.Expr.StartsWith("date.")).ToList())
{
field.Delete();
sb.AppendLine($"已删除:{field.Name} ({field.Expr})");
}
sb.AppendLine($"删除后字段数:{view.Fields.Count}");
Output(sb.ToString());
输出:
删除前字段数:6
已删除:order_date (date.full_date)
已删除:order_year (date.year)
已删除:order_month (date.month_name)
删除后字段数:3