向 Metric View 添加对象
这篇操作指南演示如何向已加载的指标视图添加新对象并设置其属性。 类似的方法也适用于所有 Metric View 集合。
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");
添加字段
使用 AddField 创建并返回一个新的 Field 对象,供你进一步操作。
var sb = new System.Text.StringBuilder();
var view = SemanticBridge.MetricView.Model;
sb.AppendLine($"添加前的字段数: {view.Fields.Count}");
var field = view.AddField("customer_city", "customer.city");
sb.AppendLine($"添加后的字段数: {view.Fields.Count}");
Output(sb.ToString());
输出
添加前的字段数:6
添加后的字段数:7
添加并配置 Join
AddJoin
与 AddField 的工作方式类似:它会构造该对象,将其添加到指标视图,并返回该对象,以便你设置更多属性。
使用 JoinCardinality 枚举设置基数。
using MetricView = TabularEditor.SemanticBridge.Platforms.Databricks.MetricView;
var view = SemanticBridge.MetricView.Model;
// 添加一个联接,然后设置其余属性
var supplier = view.AddJoin("supplier", "sales.dim.supplier");
supplier.On = "source.supplier_id = supplier.supplier_id";
supplier.Cardinality = MetricView.JoinCardinality.ManyToOne;
在任何现有的 Join 上也可以调用 AddJoin 方法。
你可以用它来创建嵌套联接,例如 supplier.AddJoin("region", "sales.dim.region"),
用于对雪花维度建模。
添加并配置 度量值
AddMeasure 的工作方式与其他 Add 方法类似。
某些属性,例如字段或度量值的 Format,有各自的类型,你需要构造这些类型来设置该属性。
创建你需要的 Format 变体,例如 Format.Currency 或 Format.Percentage,并将其赋值。
using MetricView = TabularEditor.SemanticBridge.Platforms.Databricks.MetricView;
var sb = new System.Text.StringBuilder();
var view = SemanticBridge.MetricView.Model;
// 添加一个新度量值,然后为其设置货币格式
var totalCost = view.AddMeasure("total_cost", "SUM(cost)");
totalCost.Format = new MetricView.Format.Currency { CurrencyCode = "USD" };
// 读取该度量值的格式
sb.AppendLine($"{totalCost.Name} 格式: {totalCost.Format}");
Output(sb.ToString());
输出
total_cost 格式:Currency { Type = Currency, DecimalPlaces = , HideGroupSeparator = , Abbreviation = , CurrencyCode = USD }