Renombrar objetos en una Metric View
En este procedimiento se muestra cómo renombrar las dimensiones de una Metric View mediante un patrón de copia y modificación para realizar transformaciones en bloque. Los mismos patrones se aplican 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)
""");
El patrón de copia y modificación
Como los nombres de las dimensiones de una Metric View son propiedades de objetos dentro de una colección, el enfoque más limpio es:
- Crear nuevos objetos
Dimensionde la Metric View con los nombres modificados - Vaciar la colección original
- Agregar los nuevos objetos
Esto evita problemas al modificar objetos mientras se recorre la colección.
Convertir snake_case a Title Case
Transforme los nombres de las dimensiones de una Metric View de product_name a Product Name:
using System.Globalization;
using MetricView = TabularEditor.SemanticBridge.Platforms.Databricks.MetricView;
var view = SemanticBridge.MetricView.Model;
var textInfo = CultureInfo.CurrentCulture.TextInfo;
var sb = new System.Text.StringBuilder();
sb.AppendLine("BEFORE");
sb.AppendLine("------");
foreach (var dim in view.Dimensions)
{
sb.AppendLine($" {dim.Name}");
}
// Create renamed dimensions
var renamed = view.Dimensions.Select(dim => new MetricView.Dimension
{
Name = textInfo.ToTitleCase(dim.Name.Replace('_', ' ')),
Expr = dim.Expr
}).ToList();
// Replace the collection
view.Dimensions.Clear();
foreach (var dim in renamed)
{
view.Dimensions.Add(dim);
}
sb.AppendLine();
sb.AppendLine("AFTER");
sb.AppendLine("-----");
foreach (var dim in view.Dimensions)
{
sb.AppendLine($" {dim.Name}");
}
Output(sb.ToString());
Salida:
ANTES
------
product_name
product_category
customer_segment
order_date
order_year
order_month
DESPUÉS
-----
Nombre del producto
Categoría del producto
Segmento de cliente
Fecha de pedido
Año de pedido
Mes de pedido
Renombrar con un diccionario de mapeo
Aplica cambios de nombre específicos mediante una búsqueda:
using MetricView = TabularEditor.SemanticBridge.Platforms.Databricks.MetricView;
var view = SemanticBridge.MetricView.Model;
// Definir asignaciones de cambio de nombre
var renames = new Dictionary<string, string>
{
{ "product_name", "Product" },
{ "product_category", "Category" },
{ "customer_segment", "Segmentos" },
{ "order_date", "Date" },
{ "order_year", "Year" },
{ "order_month", "Month" }
};
var sb = new System.Text.StringBuilder();
// Crear dimensiones renombradas
var renamed = view.Dimensions
.Select(
dim => new MetricView.Dimension
{
Name = renames.TryGetValue(dim.Name, out var newName) ? newName : dim.Name,
Expr = dim.Expr
})
.ToList();
// Reemplazar la colección
view.Dimensions.Clear();
foreach (var dim in renamed)
{
view.Dimensions.Add(dim);
}
sb.AppendLine("Dimensiones renombradas:");
sb.AppendLine("-------------------");
foreach (var dim in view.Dimensions)
{
sb.AppendLine($" {dim.Name,-20} <- {dim.Expr}");
}
Output(sb.ToString());
Salida:
Dimensiones renombradas:
-------------------
Product <- product.product_name
Category <- product.category
Segmentos <- customer.segment
Date <- date.full_date
Year <- date.year
Month <- date.month_name