Open Business Intelligence

La red del Business Intelligence

Hola.

Estoy construyendo un DW, donde mi fuente de datos son 4 archivos excel, los cuales almacenan los puntajes de las pruebas de lenguaje, matemática y naturales de los alumnos de mi país, así como la cantidad de alumnos que dan esas pruebas, tanto por region, departamento, comuna y establecimiento educacional, respectivamente.

En mi tabla de hechos he puesto como métrica los puntajes y la cantidad de alumnos que rinden las pruebas, pero a la hora de crear las dimensiones es donde tengo una duda.

¿Sería mejor crear una dimensión llamada por ejemplo, "ubicacion", cuyos campos sean region, departamento, comuna y establecimiento, o cada uno de estos campos nombrados anteriormente hacerlos como dimension?

Les cuento además, que en cuanto a la variable de tiempo, la he puesto como campo dentro de un modelo de ER, y como dimensión en otro... aún no estoy decido cuál elegir, aunque solo cuento con los años en que se toman estas pruebas, por lo que estoy más inclinado a dejarla como campo dentro de la tabla de hechos.

Como dato final, estoy usando Pentaho Data Integration (Kettle) para la creación de las tablas que formarán el DW, y Pentaho Schema Workbench (PSW) para la creación del cubo multidimensional.

Voy a probar ambos modelos de ER en Kettle y en PSW, pero me gustaría que me dieran sus opiniones, para construir el DW de la mejor forma.

Bueno, les dejo los dos esquemas de ER que he hecho, abarcando las posibilidades nombradas arriba.

De antemano gracias.
Saludos.

Visitas: 1442

Archivos adjuntos

Responde a esto

Respuestas a esta discusión

Hola Francisco,
respecto a la dimensión "Ubicación", yo la establecería como una sola, con todos los campos region, departamento, comuna y establecimiento dentro de ella. Yo declararía una jerarquía Ubicación con cuatro niveles, cada uno de ellos correspondientes con cada uno de los campos que mencionas.
El tiempo, yo la pondría como dimensión. De esta forma se pueden agrupar las métricas definidas por el año correspondiente. Si lo pones como métrica dentro de la tabla de hechoa, en la vista que generes aparecerá como un dato más dentro de la fila y no podrás agrupar por años. Otra forma sería no poner el campo tiempo como dimensión y declararlo como dimensión degenerada, pero eso no tiene mucho sentido.
Kettle es una buena herramienta para la extracción de datos y carga en la base de datos.
El Schema Workbench te puede ayudar a editar el esquema y ver los errores que no veas a simple vista, pero te puede jugar alguna mala pasada, cuidadín. No existe ninguna herramienta decente para la creación de esquemas multidimensionales.

Espero que te pueda orientar algo.
Un saludo.
Hola.
Gracias por responder.

Te cuento que ya hice el DW, tal cual lo explicas arriba, con una dimensión ubicación y otra de tiempo. Todo va saliendo bien.

Una duda que aún no puedo resolver completamente, es si para crear un DW con Kettle, se deben usar obligatoriamente las opciones de data warehouse que ofrece dicho programa, como son "Dimension lookup/update" y "Combination lookup/update".

Saludos.
No, por supuesto que no. El paso de Lookup Update ayuda a generar dimensiones, sobre todo si son de tipo muy cambiante. Si los valores de dicha dimensión van a ser actualizados con mucha frecuencia, este paso de kettle, genera las correspondientes versiones de los valores, es decir, cuando modificas un valor en esa dimensión, este paso no elimina la fila anterior, sino que genera una nueva fila con una nueva versión, además realiza los cambios en la fecha de validez de esta fila. Con esta metodología se posibilita el control histórico de los datos, pero no sé si tu caso necesita de tal característica.
Si no quieres usar este paso, puedes realizar combinaciones con el resto de herramientas de manipulación de bases de datos proporcionados, y resolver tus problemáticas de forma personalizada.
Un saludo.
Excelente tu respuesta, me ayudo bastante a clarificar mi duda. Si bien yo hice en primera instancia este DW con las otras opciones de Kettle, como "select values" y "table output", siempre tuve la duda si estaba bien hecho.

Bueno, gracias nuevamente.

Voy a recopilar algunas cosas que estoy haciendo y las subiré, para que en caso que tengas tiempo, las mires un poco.

Saludos.
Hola nuevamente.

Vuelvo para mostrar parte de mi trabajo. Todo sigue saliendo bien, pero me gustaría aclarar una duda.

Yo tengo 3 archivos en excel que necesito ocupar. Lo que he hecho hasta ahora, ha sido unir manualmente esos 3 archivos en uno, y desde ahí empezar la creación del DW (como verán en el dibujo). Lo que me gustaría, sería crear el DW usando independientemente esos 3 archivos, pero he probado algunas combinaciones y no me funciona. Si alguno de ustedes ha trabajado o sabe cómo lograr crear un DW a partir de varios archivos independientes, que me ayude por favor.

pd: adjunto unas imágenes para que vean lo que hice.

Saludos.

esquema ER simce.jpg
Archivos adjuntos
Hola Francisco,
hay muchas posibles soluciones a este problema que tienes en particular. Así, rápidamente se me ocurre lo siguiente:

1. Leer cada fichero excel de manera independiente e introducir los datos contenidos en ellos en tablas independientes en la base de datos. Es decir, leer un fichero mediante el paso de lectura de excel y hacer un "table output" a una tabla temporal. Esto por cada uno de los ficheros. En total nos saldrán tres tablas temporales. Estas tablas temporales servirán para manejar la información de una manera más cómoda y segura porque trabajar con excel directamente es lento y guarro. Ten en cuenta que no hace falta que definas la estructura de las tablas por tí mismo. Simplemente con conectar el paso de "Excel Input" con el paso "Table Output", en este segundo paso aparece un botón "SQL", que da la sentencia de creación de la tabla de acuerdo a la estructura del fichero excel. Puede que tengas que retocar los tipos de datos que te genera porque el proceso utilizado no es del todo preciso. También marcaría el flag "Truncate Table" para borrar las tablas antes de cada ejecución.

2. Una vez tengas estos datos en tablas independientes puedes hacer un join de éstas por los campos adecuados para aglutinar toda la información en una única tabla global. Si no deseas hacer un join, puedes tratar los datos directamente desde ellas.

3. Respecto a la captura que pones de ejemplo de la transformación en kettle, yo cambiaría un poco el proceso. En mi caso, haría una transformación independiente que creara las dimensiones. La tabla de dimensión creada deberá contener los datos en sí mismos, y un atributo clave que debe ser único y que servirá como referencia desde la tabla de hechos. Este campo es preferible que sea de tipo entero, pues después las búsquedas serán mucho más eficientes. Este modelo parece que concuerda con el modelo E/R que has adjuntado.

4. Por último, haría otra transformación independiente donde:
- Lea iterativamente la tabla o tablas de datos obtenidas desde los ficheros excel.
- Para cada fila en la tabla, buscar los campos id de las dimensiones correspondientes. Es decir, si en la fila leida hay una fecha y una ubicación, se deberá buscar en la tabla de dimensión de tiempo el id correspondiente a la fecha de la fila y en la tabla de dimensión de ubicación el id correspondiente a la ubicación leída. Estas búsquedas se pueden realizar con el paso "Database Lookup" Estos ids los mantenemos en el flujo.
- Al final del flujo, se hace un "select values", como bien tienes tú, eligiendo los datos que se desean guardar en la tabla de hechos, sustituyendo los campos de fecha y ubicación por sus correspondientes ids obtenidos de las tablas de dimensión.
- La inserción en la tabla de hechos final la haría con un paso "Insert/Update", de forma que puedes especificar los campos clave de la tabla para insertar o actualizar valores segúnh el caso. Por ejemplo, le pones que los campos clave son id_tiempo e id_ubicacion. Al entrar datos en este paso, buscará coincidencias para la pareja de valores recibidos, si no encuentra la coincidencia, inserta la fila, y si encuentra la coincidencia, puede actualizar los datos ( si lo especificas así ). De esta forma, automáticamente se actualizan las filas con posibles cambios en los datos. Si no utilizas este paso y usas el paso "Table Output" ( como tienes en el ejemplo ), se darán errores en caso de filas duplicadas.

6. Estas dos transformaciones las enlazamos en un único trabajo general.

Esto es sólo una posible idea de creación de transformación. Si lo que tú has hecho funciona pues estará bien. Sólo he intentado darte alguna solución a tu problema que puedes fusionar con lo que ya tenías creado.

Espero haberte ayudado.
Un saludo.
Hola Edu.

De verdad que te agrezco mucho la ayuda y el tiempo que te tomaste para ver el trabajo que he estado haciendo.

Sobre las opciones que me propones, las voy a llevar a cabo después de que termine mi tesis, ya que estoy contra el tiempo y debo entregarla esta semana.

Te cuento además, que lo que he hecho hasta ahora funciona bien, y la razón debe ser porque no he tenido que actualizar los campos de las tablas constantemente.

Bueno, te agradezco nuevamente la buena voluntad y te estaré informando cómo me va con tus recomendaciones.

Saludos.

Responder a debate

RSS

Distintivo

Cargando…

© 2024   Creado por Emilio.   Tecnología de

Emblemas  |  Reportar un problema  |  Términos de servicio