Table of Contents

将 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)

后续步骤

另见