从 Metric View 中移除对象
本文演示如何从已加载的 Metric View 中移除其维度。 类似的方法适用于 Metric View 中的所有集合。
对这些代码示例的 Metric View 进行反序列化
本操作指南使用一个示例电商 Metric View 来表示销售数据,其中三个维度表(product、customer、date)连接到一个事实表(orders)。 如果你想在阅读本操作指南其余部分时跟着代码一起操作,请先运行下面的代码片段
SemanticBridge.MetricView.Deserialize("""
version: 0.1
source: sales.fact.orders
joins:
- name: product
source: sales.dim.product
on: source.product_id = product.product_id
- name: customer
source: sales.dim.customer
on: source.customer_id = customer.customer_id
- name: date
source: sales.dim.date
on: source.order_date = date.date_key
dimensions:
- name: product_name
expr: product.product_name
- name: product_category
expr: 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)
- name: order_count
expr: COUNT(order_id)
- name: avg_order_value
expr: AVG(revenue)
- name: unique_customers
expr: COUNT(DISTINCT customer_id)
""");
Note
这里的每个移除脚本都会影响当前已加载的 Metric View。
如果你想把这些脚本都运行一遍,请确保在每次移除操作前都先运行上面的 Deserialize。
按名称移除
找到要移除的 Metric View 维度,并将其从集合中移除:
var view = SemanticBridge.MetricView.Model;
var sb = new System.Text.StringBuilder();
sb.AppendLine($"Dimensions before: {view.Dimensions.Count}");
var dimToRemove = view.Dimensions.FirstOrDefault(d => d.Name == "order_month");
if (dimToRemove != null)
{
view.Dimensions.Remove(dimToRemove);
sb.AppendLine($"Removed: {dimToRemove.Name}");
}
sb.AppendLine($"Dimensions after: {view.Dimensions.Count}");
Output(sb.ToString());
输出:
Dimensions before: 6
Removed: order_month
Dimensions after: 5
注意:如果你连续运行两次上述脚本,不会再移除任何内容;移除前后计数都会是 5。
移除多个 Metric View 维度
使用 LINQ 进行筛选并重建集合:
using MetricView = TabularEditor.SemanticBridge.Platforms.Databricks.MetricView;
var view = SemanticBridge.MetricView.Model;
var sb = new System.Text.StringBuilder();
sb.AppendLine($"Dimensions before: {view.Dimensions.Count}");
// Remove all date-related dimensions
string[] toRemove = ["order_date", "order_year", "order_month"];
var toKeep = view.Dimensions
.Where(d => !toRemove.Contains(d.Name))
.ToList();
// Clear and repopulate
view.Dimensions.Clear();
foreach (var dim in toKeep)
{
view.Dimensions.Add(dim);
}
sb.AppendLine($"Dimensions after: {view.Dimensions.Count}");
sb.AppendLine();
sb.AppendLine("Remaining dimensions:");
sb.AppendLine("---------------------");
foreach (var dim in view.Dimensions)
{
sb.AppendLine($" {dim.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($"Dimensions before: {view.Dimensions.Count}");
var toRemove = view.Dimensions
.Where(d => d.Expr.StartsWith("date."))
.ToList();
foreach (var dim in toRemove)
{
view.Dimensions.Remove(dim);
sb.AppendLine($"Removed: {dim.Name} ({dim.Expr})");
}
sb.AppendLine($"Dimensions after: {view.Dimensions.Count}");
Output(sb.ToString());
输出:
移除前维度数:6
已移除:order_date (date.full_date)
已移除:order_year (date.year)
已移除:order_month (date.month_name)
移除后维度数:3