Obtener lista de hechos y sus características con Command Manager e importarlo en Excel

Con el siguiente ejemplo podremos conseguir un fichero de texto que contenga todos los hechos de un proyecto determinado. El fichero de texto contendrá las siguientes características de los hechos; Nombre, ID, Ubicación, Expresión y sus tablas de origen.

Con este excel podremos tener un mayor control de los objetos existentes y puede ser útil por ejemplo, para una auditoria. Vamos a ver paso por paso como podéis reutilizar este procedimiento.

Pasos a seguir

Descargar el fichero de ejemplo

Podéis descargarlos el procedimiento para listar los hechos y sus propiedades de una carpeta concreta haciendo clic aquí, o bien podéis descargaros el procedimiento para obtener el listado de los hechos y sus propiedades de todo un proyecto haciendo clic aquí. Una vez descargado debes guardarlo en la carpeta por defecto de los procedimientos de MicroStrategy Command Manager. Por defecto, la ubicación es C:\Program Files (x86)\MicroSrategy\Command Manager\Outlines\Procedure_Outlines\User_Procedures\

Explicación del código

Si se abre el procedimiento desde MicroStrategy Command Manager (Menú Archivo > Abrir Procedimiento) podéis encontrar las líneas de código con el detalle de lo que realiza cada paso. En caso de no conocer el lenguaje de programación, no te preocupes y saltate este paso ya que el procedimiento esta listo para usar.

//Creado por MiguelTroyano.com

// Cabecera del CSV
printOut("Nombre&ID&Ruta&Expresion&Tabla&Asignada");

// Obtenemos todos los hechos de un proyecto
ResultSet rsHechos = executeCapture("LIST ALL FACTS FOR  PROJECT '" + sNombreProyecto + "';"); 
ResultSet rsPropiedades = null;

// Nos posicionamos en el primer hecho encontrado
rsHechos.moveFirst();  

// Mientras que existan hechos seguimos adelante 
while (!rsHechos.isEof()){
	
	// Se declaran las varibables para guardar el nombre y la ruta del hecho
	String sNombreHecho = rsHechos.getFieldValueString(DisplayPropertyEnum.NAME);         
	String sRutaHecho = rsHechos.getFieldValueString(DisplayPropertyEnum.PATH);   

	// Obtenemos todas las propiedades de los hechos
	rsPropiedades = executeCapture("LIST PROPERTIES FOR FACT '" + sNombreHecho + "' IN FOLDER '" + sRutaHecho + "' FOR PROJECT '" + sNombreProyecto + "';");
	
	// Nos posicionamos en la primera propiedad del hecho correspondiente
	rsPropiedades.moveFirst();
	
	// Se decara una variable para almacenar el ID del hecho
	String sIdentificadorHecho = rsPropiedades.getFieldValueString(DisplayPropertyEnum.ID);     

	// Accedemos al Result Set SCHEMA_EXPRESSION_LIST
	ResultSet rsExpresion = (ResultSet)rsPropiedades.getFieldValue(DisplayPropertyEnum.SCHEMA_EXPRESSION_LIST);                
	
	// Si el resultado del Result Set no esta vacio continuamos
	if(rsExpresion != null){
		
		// Almacenamos las variables en una sola
		String sResultado_parte1 = sNombreHecho + "&" + sIdentificadorHecho + "&" + sRutaHecho;
		
		// Nos posicionamos en el primer elemento
		rsExpresion.moveFirst();
		
		// Mientras que encontremos elementos entramos en el bucle
		while(!rsExpresion.isEof()){
				
			// Concatenamos el resultado 1 con la expresión y lo almacenamos en resultado 2
			String sResultado_parte2 = (sResultado_parte1 + "&" + rsExpresion.getFieldValueString(0));

			// Accedemos al Result Set SCHEMA_CANDIDATE_TABLE_LIST para obtener las tablas origen
			ResultSet rsTablaOrigen = (ResultSet) rsExpresion.getFieldValue(DisplayPropertyEnum.SCHEMA_CANDIDATE_TABLE_LIST);                
			
			// Si el conjunto de datos es diferente de nulo entramos en el bucle
			if(rsTablaOrigen != null){
				
				// Nos posicionamos en el primer resultado
				rsTablaOrigen.moveFirst();
				
				// Mientras que sigan existiendo resultados entramos en el bucle
				while(!rsTablaOrigen.isEof()){
					
					// Concatenamos el resultado de la variable Resultado_parte2 con las tablas de origen del hecho
					printOut(sResultado_parte2 + "&" + rsTablaOrigen.getFieldValueString(0) + "&" + rsTablaOrigen.getFieldValueString(1) );
					
					// Nos posicionamos en la siguiente tabla origen por si tiene más de una
					rsTablaOrigen.moveNext();
				}   

				// Nos posicionamos en la siguiente expresion por si tiene más de una
				rsExpresion.moveNext();
			}   

		}

	}
	
	// Nos posicionamos en el siguiente hecho por si tiene más de uno
	rsHechos.moveNext();
}

Si se observa el código, esta preparado para que los diferentes valores se separen con el delimitado & a pesar de que el delimitador mas común en CSV sea el punto y coma. Esto es así porque este carácter puede entrar en conflicto con la expresión de un hecho y detectar que son columnas diferentes al importatrlo en Excel.

Otro detalle a tener en cuenta es que si un hecho tiene más de una tabla de origen mapeada, aparecerá tantas veces como tablas de origen tenga.

Preparar la ejecución

Para ejecutar el procedimiento lo podríamos realizar desde el propio Command Manager, pero en esta ocasión lo vamos a ejecutar por la línea de comandos para guardar directamente el resultado en un fichero de texto.

Crea un script y un fichero por lotes para realizar la ejecución. Si no sabes cómo realizarlo lee el siguiente articulo donde detalla cada paso.

Preparar el fichero de resultados

Una vez que ha finalizado la ejecución del procedimiento nos habrá devuelto un fichero de texto que necesitamos modificarlo para que Excel lo lea correctamente. Abre el fichero de resultados y elimina las 6 primeras líneas.

Haz lo mismo con las 6 últimas líneas.

Busca y remplaza la palabra CEST por CEST&. Este paso es muy importante para que al abrirlo en Excel detecte la fecha entera como una columna independiente y la podamos borrar sino nos interesa.

Importar el fichero de texto en Excel

Abre Excel y desde el menú Datos selecciona Obtener datos externos y continuación la opción Desde un archivo de texto

En el asistente que se abre indicarle que el fichero de texto esta delimitado y que la primera fila contiene el encabezado.

Después de pulsar en el botón Siguiente de la ventana anterior, marca la casilla Otro e indicarle que tu delimitador de columnas es el símbolo & y pulsa en Siguiente.

En la siguiente imagen puedes ver una vista previa de las columnas que va a importar. Puedes observar que gracias a que hemos sustituido en pasos anteriores la palabra CEST por CEST& nos ha reconocido la columna entera de fecha. Sino la necesitas indicarle que no la importe.

Por último, solicitara que indiquemos dónde deseamos insertar los datos.

Resultado

Escribir un comentario