Eliminar un objeto de una Metric View
Este procedimiento muestra cómo eliminar dimensiones de Metric View de una Metric View cargada. El mismo enfoque se aplica a todas las colecciones de una Metric View.
Deserializar Metric View para estos ejemplos de código
Esta guía paso a paso usa una Metric View de ejemplo de comercio electrónico que representa datos de ventas, con tres tablas de dimensiones (producto, cliente y fecha) unidas a una tabla de hechos (pedidos). Ejecuta primero el siguiente fragmento si quieres seguir el código en el resto de esta guía
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
Cada script de eliminación que se muestra aquí afecta a la Metric View cargada en ese momento.
Si quieres ejecutar todos estos scripts, asegúrate de ejecutar el comando Deserialize anterior antes de cada eliminación.
Eliminar por nombre
Localiza la dimensión de la Metric View y elimínala de la colección:
var view = SemanticBridge.MetricView.Model;
var sb = new System.Text.StringBuilder();
sb.AppendLine($"Dimensiones antes: {view.Dimensions.Count}");
var dimToRemove = view.Dimensions.FirstOrDefault(d => d.Name == "order_month");
if (dimToRemove != null)
{
view.Dimensions.Remove(dimToRemove);
sb.AppendLine($"Eliminada: {dimToRemove.Name}");
}
sb.AppendLine($"Dimensiones después: {view.Dimensions.Count}");
Output(sb.ToString());
Salida:
Dimensiones antes: 6
Eliminada: order_month
Dimensiones después: 5
Observa que, si ejecutas el script anterior dos veces seguidas, no se elimina nada más; los recuentos de antes y después son ambos 5.
Eliminar varias dimensiones de una Metric View
Usa LINQ para filtrar y reconstruir la colección:
using MetricView = TabularEditor.SemanticBridge.Platforms.Databricks.MetricView;
var view = SemanticBridge.MetricView.Model;
var sb = new System.Text.StringBuilder();
sb.AppendLine($"Dimensiones antes: {view.Dimensions.Count}");
// Eliminar todas las dimensiones relacionadas con fechas
string[] toRemove = ["order_date", "order_year", "order_month"];
var toKeep = view.Dimensions
.Where(d => !toRemove.Contains(d.Name))
.ToList();
// Vaciar y volver a rellenar
view.Dimensions.Clear();
foreach (var dim in toKeep)
{
view.Dimensions.Add(dim);
}
sb.AppendLine($"Dimensiones después: {view.Dimensions.Count}");
sb.AppendLine();
sb.AppendLine("Dimensiones restantes:");
sb.AppendLine("---------------------");
foreach (var dim in view.Dimensions)
{
sb.AppendLine($" {dim.Name}");
}
Output(sb.ToString());
Salida:
Dimensiones antes: 6
Dimensiones después: 3
Dimensiones restantes:
---------------------
product_name
product_category
customer_segment
Eliminar dimensiones de Metric View de una tabla específica
Elimina todas las dimensiones de Metric View que hacen referencia a la tabla de fechas.
Warning
No se garantiza que este ejemplo elimine todas, y solo, las dimensiones de Metric View que hagan referencia a un Metric View Join determinado. Las dimensiones de Metric View pueden incluir expresiones SQL casi arbitrarias y también pueden hacer referencia a dimensiones de Metric View definidas anteriormente. Este ejemplo es solo con fines ilustrativos.
var view = SemanticBridge.MetricView.Model;
var sb = new System.Text.StringBuilder();
sb.AppendLine($"Dimensiones antes: {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($"Eliminado: {dim.Name} ({dim.Expr})");
}
sb.AppendLine($"Dimensiones después: {view.Dimensions.Count}");
Output(sb.ToString());
Salida:
Dimensiones antes: 6
Eliminado: order_date (date.full_date)
Eliminado: order_year (date.year)
Eliminado: order_month (date.month_name)
Dimensiones después: 3