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

En el anterior articulo vimos como listar hechos con sus propiedades y prepararlo para importarlo en excel. En esta ocasión vamos hacer algo similar, pero con atributos. El fichero de texto que generara Command Manager contendrá las siguientes características de los atributos; Nombre, ID, Representación, Tabla Lookup, 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 atributos y sus propiedades de una carpeta concreta haciendo clic aquí, o bien podéis descargaros el procedimiento para obtener el listado de los atributos y sus propiedades de todo un proyecto haciendo clic aquí.

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 fichero
printOut("Nombre&ID&Representacion&TablaLookup&Ruta&Expresion&TablaOrigen");

// Obtenemos todos los atributos de un proyecto
ResultSet rsAtributos = executeCapture("LIST ALL ATTRIBUTES FOR PROJECT '" + sNombreProyecto + "';"); 
ResultSet rsPropiedades = null;

// Nos posicionamos en el primer atributo encontrado
rsAtributos.moveFirst();  

// Mientras que existan atributos entramos en el bucle  
while (!rsAtributos.isEof()){

	// Se declaran las varibables para guardar el nombre y la ruta del atributo
	String sNombreAtributo = rsAtributos.getFieldValueString(DisplayPropertyEnum.NAME);         
	String sRutaAtributo = rsAtributos.getFieldValueString(DisplayPropertyEnum.PATH);              
	
	// Obtenemos todas las propiedades de los atributos
	rsPropiedades = executeCapture("LIST PROPERTIES FOR ATTRIBUTE '" + sNombreAtributo + "' IN FOLDER '" + sRutaAtributo + "' FOR PROJECT '" + sNombreProyecto + "';");
	
	// Nos posicionamos en la primera propiedad del atributo correspondiente
	rsPropiedades.moveFirst();
	
	// Se decara una variable para almacenar el ID del atributo
	String sIdentificadorAtributo = rsPropiedades.getFieldValueString(DisplayPropertyEnum.ID);
	
	// Accedemos al Result Set ATTRIBUTE_FORM
	ResultSet rsAttributeForms = (ResultSet)rsPropiedades.getFieldValue(DisplayPropertyEnum.ATTRIBUTE_FORM);
	rsAttributeForms.moveFirst();   

	// Mientras que existan resultados entramos en el bucle 
	while(!rsAttributeForms.isEof()){
		
		// Accedemos al Result Set ATTRIBUTE_EXPRESSION_LIST
		ResultSet rsExpresion = (ResultSet) rsAttributeForms.getFieldValue(DisplayPropertyEnum.ATTRIBUTE_EXPRESSION_LIST);                
		
		// Si el resultado del Result Set no esta vacio continuamos
		if(rsExpresion != null){
		
			// Almacenamos las variables en una sola
			String sResultado_parte1 = sNombreAtributo + "&"+ sIdentificadorAtributo + "&" + rsAttributeForms.getFieldValueString(DisplayPropertyEnum.ATTRIBUTE_FORM_NAME) + "&" 
					+  rsAttributeForms.getFieldValueString(DisplayPropertyEnum.ATTRIBUTE_LOOKUP_TABLE) + "&" + sRutaAtributo ;
							
			// 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 ATTRIBUTE_MAPPING_TABLE_LIST para obtener las tablas origen
				ResultSet rsExpresion2 = (ResultSet) rsExpresion.getFieldValue(DisplayPropertyEnum.ATTRIBUTE_MAPPING_TABLE_LIST);                
				
				// Si el conjunto de datos es diferente de nulo entramos en el bucle
				if(rsExpresion2 != null){
				
				// Nos posicionamos en el primer resultado
				rsExpresion2.moveFirst();
					
					// Mientras que sigan existiendo resultados entramos en el bucle
					while(!rsExpresion2.isEof()){
						
						// Concatenamos el resultado de la variable Resultado_parte2 con las tablas de origen del atributo
						printOut(sResultado_parte2 + "&" + rsExpresion2.getFieldValueString(0));
						
						// Nos posicionamos en la siguiente tabla origen por si tiene más de una
						rsExpresion2.moveNext();
				}   
				
				// Nos posicionamos en la siguiente expresion por si tiene más de una
				rsExpresion.moveNext();
			}   

		}

		}
		
		// Nos posicionamos en el siguiente elemento por si tiene más de uno
		rsAttributeForms.moveNext();
	}
	
	// Nos posicionamos en el siguiente atributo por si tiene más de uno
	rsAtributos.moveNext();
}

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

Otro detalle a tener en cuenta es que si un atributo tiene más de una tabla de origen mapeada, aparecerá en el fichero en tantas filas 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

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.