将 Metric View 序列化为 YAML
本操作指南演示如何将 Metric View 序列化回 YAML 格式:既可以作为字符串获取,也可以保存到文件中。
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");
序列化为字符串
使用 Serialize() 获取 YAML 表示形式。
这只是将上面加载的 YAML 重新序列化。
var yaml = SemanticBridge.MetricView.Serialize();
var sb = new System.Text.StringBuilder();
sb.AppendLine("YAML output:");
sb.AppendLine("------------");
sb.AppendLine(yaml);
Output(sb.ToString());
输出
YAML 输出:
------------
version: 1.1
source: sales.fact.orders
joins:
- name: product
source: sales.dim.product
on: source.product_id = product.product_id
cardinality: many_to_one
- name: customer
source: sales.dim.customer
on: source.customer_id = customer.customer_id
cardinality: many_to_one
- name: date
source: sales.dim.date
on: source.order_date = date.date_key
cardinality: many_to_one
fields:
- name: product_name
expr: product.product_name
- name: product_category
expr: product.category
display_name: Product Category
- name: customer_segment
expr: customer.segment
- name: order_date
expr: date.full_date
- name: order_year
expr: date.year
- name: order_month
expr: date.month_name
measures:
- name: total_revenue
expr: SUM(revenue)
display_name: Total Revenue
format:
type: currency
decimal_places:
type: exact
places: 2
currency_code: USD
- name: gross_margin
expr: SUM(revenue) - SUM(cost)
- name: order_count
expr: COUNT(*)
- name: avg_order_value
expr: AVG(revenue)
- name: revenue_to_budget
expr: (SUM(revenue) - SUM(budget)) / SUM(budget)
display_name: Revenue vs Budget
format:
type: percentage
decimal_places:
type: max
places: 1
- name: unique_customers
expr: COUNT(DISTINCT customer_id)
保存到文件
使用 Save(path) 将 YAML 直接写入磁盘。
这会将上面加载的指标视图写入磁盘。
var path = "C:/MetricViews/updated-sales-metrics.yaml";
SemanticBridge.MetricView.Save(path);
Output($"Metric View saved to: {path}");
往返式工作流
一种常见的工作流是加载、修改并保存 Metric View:
var view = SemanticBridge.MetricView.Model;
// 为字段设置显示名称,然后序列化以确认序列化/反序列化后保持一致
view.Fields["order_month"].DisplayName = "Order Month";
var yaml = SemanticBridge.MetricView.Serialize();
var sb = new System.Text.StringBuilder();
sb.AppendLine("Modified YAML:");
sb.AppendLine("--------------");
sb.AppendLine(yaml);
Output(sb.ToString());
输出:
修改后的 YAML:
--------------
version: 1.1
source: sales.fact.orders
joins:
- name: product
source: sales.dim.product
on: source.product_id = product.product_id
cardinality: many_to_one
- name: customer
source: sales.dim.customer
on: source.customer_id = customer.customer_id
cardinality: many_to_one
- name: date
source: sales.dim.date
on: source.order_date = date.date_key
cardinality: many_to_one
fields:
- name: product_name
expr: product.product_name
- name: product_category
expr: product.category
display_name: Product Category
- name: customer_segment
expr: customer.segment
- name: order_date
expr: date.full_date
- name: order_year
expr: date.year
- name: order_month
expr: date.month_name
display_name: Order Month
measures:
- name: total_revenue
expr: SUM(revenue)
display_name: Total Revenue
format:
type: currency
decimal_places:
type: exact
places: 2
currency_code: USD
- name: gross_margin
expr: SUM(revenue) - SUM(cost)
- name: order_count
expr: COUNT(*)
- name: avg_order_value
expr: AVG(revenue)
- name: revenue_to_budget
expr: (SUM(revenue) - SUM(budget)) / SUM(budget)
display_name: Revenue vs Budget
format:
type: percentage
decimal_places:
type: max
places: 1
- name: unique_customers
expr: COUNT(DISTINCT customer_id)