Table of Contents

Remove an object from a Metric View

This how-to demonstrates how to remove Metric View dimensions from a loaded Metric View. Similar approaches apply to all collections in a Metric View.

Deserialize Metric View for these code samples

This how-to uses a sample e-commerce Metric View representing sales data with three dimension tables (product, customer, date) joined to a fact table (orders). Run the snippet below first, if you'd like to follow along with the code in the rest of this how-to

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

Each removal script here affects the currently loaded Metric View. If you want to run all of these, make sure to run the Deserialize above before each removal.

Remove by name

Find the Metric View dimension and remove it from the collection:

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());

Output:

Dimensions before: 6
Removed: order_month
Dimensions after: 5

Observe that if you run the script above twice in a row, there is no additional removal; the before and after counts are both 5.

Remove multiple Metric View dimensions

Use LINQ to filter and rebuild the collection:

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());

Output:

Dimensions before: 6
Dimensions after: 3

Remaining dimensions:
---------------------
  product_name
  product_category
  customer_segment

Remove Metric View dimensions from a specific table

Remove all Metric View dimensions that reference the date table.

Warning

This example is not guaranteed to remove all and exclusively Metric View dimensions which reference a given Metric View Join. Metric View Dimensions may include near-arbitrary SQL expressions, and may also reference previously defined Metric View Dimensions. This example is for illustrative purposes only.

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());

Output:

Dimensions before: 6
Removed: order_date (date.full_date)
Removed: order_year (date.year)
Removed: order_month (date.month_name)
Dimensions after: 3

See also