Proposito
En este articulo se muestra cómo se puede crear hechos leyendo un fichero Excel en Command Manager. Se puede sustituir la creación de hechos por cualquier otro objeto con la sintaxis adecuada. En este ejemplo el Excel tiene la siguiente estructura:
- Columna A: nombre del proyecto.
- Columna B: carpeta dónde se va crear el hecho.
- Columna C: nombre con el que se va crear el hecho.
- Columna D: expresión del hecho, en este caso un campo de una tabla.
- Columna E: tabla de origen del campo de la expresión.
- Columna F: descripción del hecho.
- Columna G: estado. El procedimiento lo utiliza para crear aquellos que su estado es Pendiente de crear, el resto los ignorara.
Ficheros a descargar
El procedimiento y todos los ficheros necesarios os los podéis descargar haciendo clic aquí. Este fichero comprimido contiene:
- Fichero con extensión .cmp de Command Manager que contiene el código del procedimiento.
- Fichero de ejemplo de Microsoft Excel.
- Clase Java necesaria para el funcionamiento del procedimiento.
Explicación del código
A continuación se explica el código linea a linea o bien se puede abrir el procedimiento descargado desde MicroStrategy Command Manager (Menú Archivo > Abrir Procedimiento) donde podéis encontrar las líneas de código con el detalle de lo que realiza cada paso.
//Creado por MiguelTroyano.com // Configuramos el libro de trabajo jxl.Workbook libroTrabajo = jxl.Workbook.getWorkbook(new File(sFicheroEntrada)); // Obtenemos la primera hoja del libro de Excel jxl.Sheet primeraHoja = libroTrabajo.getSheet(0); // Determinamos el numero de filas basandonos en la primera columna jxl.Cell[] cellColumn = primeraHoja.getColumn(0); int numeroFilas = cellColumn.length; // Determinamos el numero de columnas basandonos en la primera fila jxl.Cell[] cellRow = primeraHoja.getRow(0); int numeroColumnas = cellRow.length; printOut("El documento tiene: " + numeroFilas + " filas y " + numeroColumnas + " columnas"); // Especificamos si tiene encabezado o no para empezar en la fila 0 o 1 int i = 0; if ( sEncabezado ){ i = 1; } // Se crea una variable para especificar el número de fila real de excel int x = i; x++; // Recorremos el excel fila por fila y realizamos una accion por cada fila while ( i <= numeroFilas ) { // Se declara una varaible por cada columna del excel // Columna A: proyecto, Columna B: carpeta destino , // Columna C: nombre del hecho, Columna D: expresion // Columna E: tabla de origen ,Columna F: descripcion , Columna G: estado String sValorColumnaA = primeraHoja.getCell(0, i).getContents(); String sValorColumnaB = primeraHoja.getCell(1, i).getContents(); String sValorColumnaC = primeraHoja.getCell(2, i).getContents(); String sValorColumnaD = primeraHoja.getCell(3, i).getContents(); String sValorColumnaE = primeraHoja.getCell(4, i).getContents(); String sValorColumnaF = primeraHoja.getCell(5, i).getContents(); String sValorColumnaG = primeraHoja.getCell(6, i).getContents(); // Solo se crean los hechos que su estado sea Pendiente de crear if ( sValorColumnaG.contains ( "Pendiente de crear" ) ) { String sConsulta = "CREATE FACT \"" + sValorColumnaC + "\" DESCRIPTION \"" + sValorColumnaF + "\" IN FOLDER \"" + sValorColumnaB + "\" EXPRESSION \"" + sValorColumnaD + "\" EXPSOURCETABLES \"" + sValorColumnaE + "\" FOR PROJECT \"" + sValorColumnaA + "\";"; execute(sConsulta); } // Si su estado es otro, informamos que no se crea especificando el numero de fila y el nombre del hecho. else { printOut( "El hecho con nombre '" + sValorColumnaC + "' de la fila numero " + x + " no se ha creado por que su estado es '" + sValorColumnaG +"'") ; } i++; x++; }
Si se observa el código, el procedimiento va leyendo fila por fila todas las columnas y crea un hecho con las especificaciones que contiene el excel.
El procedimiento tiene dos parametros de entrada que debes informar antes de ejecutarlo:
- sFicheroEntrada: dirección completa de la ubicación del fichero excel (xls)
- sEncabezado: se debe indicar true si el fichero excel tiene encabezado o false si no lo tiene.
Además antes de ejecutarlo también deberás indicarle donde has guardado el fichero .jar que contiene las clases necesarias para poder leer del fichero excel.
Resultado
El resultado y los mensajes de la ejecución es el siguiente:
– Es posible que no funcione con ficheros xlsx.
– Atento a los permisos de las carpetas donde guardes el fichero .xls y el .jar