warehouse ventas una tabla multidimensional modelo jerarquia indicadores hechos hacer estrella esquema ejemplo dimensiones datawarehouse data como database ssis ssas etl business-intelligence

database - ventas - La mejor práctica para poblar tablas de hechos y dimensiones desde plano plano transaccional



modelo multidimensional data warehouse (3)

Hacemos esto usando una tarea de flujo de datos para copiar información desde el último tiempo de ejecución del paquete en tablas de etapas temporales, luego actualizamos el archivo / almacén con datos de esas tablas de etapas basadas en una clave, luego insertamos aquellas filas que aún no existen . Truncar la tabla de etapas preparada para la próxima vez, agregue una carga de auditoría. ¿Trabajo hecho?

Quiero llenar un esquema / cubo en estrella en SSIS / SSAS.

Preparé todas mis tablas de dimensiones y mi tabla de hechos, claves principales, etc.

La fuente es una tabla "plana" (nivel de elemento) y mi problema ahora es cómo dividirla y obtenerla de una en las tablas respectivas.

Hice un poco de google pero no pude encontrar una solución satisfactoria al problema. ¡Uno imaginaría que este es un problema / situación bastante común en el desarrollo de BI ?!

Gracias, alexl


Para empezar, depende de si desea realizar una transferencia de datos inicial simple o algo más sofisticado (por ejemplo, incremental). Voy a suponer que estás haciendo una transferencia de datos inicial.

Supongamos que su tabla de artículos tiene columnas de la siguiente manera: id, cat1, cat2, cat3, cat4, ... Suponiendo que las categorías 1-4 tengan columnas id, cat_name , puede cargar dim_cat1 (la tabla de dimensiones de la categoría de elemento 1) de la siguiente manera:

insert into dim_cat1 (cat_name) select distinct cat1 from item_table;

Puede hacer lo mismo para todas las otras categorías / tablas de dimensiones. Supongo que sus tablas de dimensiones han generado ID automáticamente. Ahora, para cargar la tabla de hechos:

insert into fact_table (id, cat1_id, cat2_id, cat3_id, cat4_id, ...) select id, dc1.id from item_table it join dim_cat1 dc1 on dc1.cat_name = it.cat1 join dim_cat2 dc2 on dc2.cat_name = it.cat2 join dim_cat3 dc3 on dc3.cat_name = it.cat3 join dim_cat4 dc3 on dc4.cat_name = it.cat4 ...

Si tiene una cantidad sustancial de datos, podría tener sentido crear índices en los nombres de las categorías en la tabla item_table y quizás en las tablas de dimensiones.

Por cierto, esta es una respuesta independiente de la base de datos, no trabajo con SSIS / SSAS: es posible que tenga herramientas disponibles que optimicen partes de este proceso para usted, pero realmente no es tan difícil / consume mucho tiempo escribir en SQL simple.


Frecuentemente construyo cubos contra los almacenes de datos operativos en lugar de esquemas de estrellas. El rendimiento casi siempre será mejor con un esquema de estrella, pero para prototipos / pruebas, no tengas miedo de desarrollar cubos contra los datos que NO TIENES el esquema de estrella que deseas .