This Blog

Syndication

Search

Tags

Community

Email Notifications

Archives

Enlaces Recomendados

.NET Framework 3.5 Chart Controls: Como consumir los datos de un cubo de Analysis Services!

Hace unos meses que tenía pendiente escribir este post sobre como consumir los datos de un cubo de SQL Server Analysis Services (SSAS) dentro de los .NET Framework 3.5 Chart Controls. La verdad es que el tema tiene sus truquillos, aunque por suerte y gracias a alguna ayudita de los chic@s de CIC, conseguí hacer una pequeña prueba de como mostrar datos de un cubo de SSAS en un control de tipo gráfico de los Chart Controls…y de aquí a llevarlo a SharePoint coser y cantar ;-). Básicamente los pasos a seguir de forma resumida son los siguientes:

  • En primer lugar, añadir a nuestra capa de presentación un control de tipo Chart. En mi caso, cogí un proyecto de tipo Web.
  • Añadir a nuestro proyecto una referencia a Microsoft.AnalysisServices.AdmdClient para poder conectaros al cubo y devolver los datos necesarios.

image

  • En la vista de código de nuestra página ASP.NET añadir las referencias necesarias para configurar por un lado el chart control y acceder por otro al cubo de SSAS.

using System.Data;

using Microsoft.AnalysisServices.AdomdClient;

using System.Web.UI.DataVisualization;

using System.Web.UI.DataVisualization.Charting;

using System.Drawing;  

  • Configurar de forma adecuada los distintos parámetros del cubo como escala, tipo de gráfico, etiquetas de los ejes, etc. Como esta parte es un tanto pesada, no os replico el código.
  • Probar la consulta al cubo SSAS dentro del SQL Server Management Studio para asegurarnos de que los datos que devuelve son los que esperamos.

image

  • En mi caso, la consulta es:

SELECT NON EMPTY { [Measures].[Internet Sales Amount] }

ON COLUMNS, NON EMPTY { ([Customer].[Country].[Country].ALLMEMBERS *

                        [Customer].[State-Province].[State-Province].ALLMEMBERS *

    [Customer].[City].[City].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION,

    MEMBER_UNIQUE_NAME ON ROWS FROM [Adventure Works] CELL PROPERTIES VALUE,

    BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME,

    FONT_SIZE, FONT_FLAGS

  • Replicar la consulta anterior en un método de la página ASP.NET. En este caso el método tendría que contener al menos el siguiente código:

                CadenaConsulta =

                    "SELECT NON EMPTY { [Measures].[Internet Sales Amount] }"+

                    " ON COLUMNS, NON EMPTY { ([Customer].[Country].[Country].ALLMEMBERS *" +

                    " [Customer].[State-Province].[State-Province].ALLMEMBERS *" +

                    " [Customer].[City].[City].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION," +

                    " MEMBER_UNIQUE_NAME ON ROWS FROM [Adventure Works] CELL PROPERTIES VALUE, BACK_COLOR," +

                    " FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS"; 

               CadenaConexion =

                    "Provider=MSOLAP.4;Data Source=SHAREPOINT-SSRS;Integrated Security=SSPI;" +

                    "Data Source=SHAREPOINT-SSRS;Initial Catalog=Adventure Works DW";  

                 //Nos creamos un objeto de tipo CellSet para guardar los resultados de la consulta:

                CellSet CS_Auxiliar; 

                //Establecemos la conexión:

                AdomdConnection ADOM_Conexion =

                    new AdomdConnection();

                ADOM_Conexion =

                    this.Establecer_Conexion();                

                //nos creamos un objeto de tipo ADOMDCommand:

                AdomdCommand ADOM_Control =

                    new AdomdCommand();

                ADOM_Control =

                    new AdomdCommand(CadenaConsulta, ADOM_Conexion);  

                // Con el método ExecuteCellSet ejecutaremos la consulta que tenemos en ADOMDConsulta.

                // Los resultados se guardarán en un objeto de tipo CellSet:

                CS_Auxiliar =

                    ADOM_Control.ExecuteCellSet();  

                // Cerramos la conexión:

                this.Cerrar_Conexion(ADOM_Conexion);  

                // Retornamos el objeto CS_Consulta:

                return CS_Auxiliar;

  • Cómo se puede observar en el código anterior, simplemente:
    • He “pegado” en código la consulta que había probado en el SQL Server Management Studio.
    • A continuación especifico la cadena de conexión al cubo de SSAS. La clave de esta cadena está en especificar el proveedor adecuado (MSOLAP.4 para SSRS 2008), el servidor, fuente de datos y cubo.
    • A continuación se declaramos un objeto de tipo CellSet en el que almacenaremos los resultados devueltos al ejecutar la consulta al cubo de SSAS.
    • Creamos una instancia de AdomdConnection para conectarnos al cubo.
    • Abrimos la conexión al cubo.
    • Creamos una instancia de AdomdCommand a partir de la cadena de consulta al cubo y la cadena de conexión al mismo.
    • A continuación llamamos al método ExecuteCellSet() del objeto anterior para ejecutar la consulta y el resultado lo guardamos en el objeto de tipo CellSet.
    • Finalmente, cerramos la conexión al cubo.
    • Devolvemos el objeto CellSet puesto que será el que utilicemos para alimentar el chart control.
  • Los métodos para abrir y cerrar la conexión al cubo son los siguientes:

        // Método para abrir la conexión:

        private AdomdConnection Establecer_Conexion()

        {

            //Con el objto conexión establecemos la conexión a través de la propiedad

            //cadena de conexión que nos ha pasado el usuario:

            AdomdConnection ACon_Conexion=null;

            try

            {

                ACon_Conexion =

                    new AdomdConnection(CadenaConexion);  

                //Ahora abrimos esa conexión:

                ACon_Conexion.Open();

                string version =

                    ACon_Conexion.ClientVersion;  

                //Retornamos la conexión:

                return ACon_Conexion;

            }

            catch (Exception  ex)

            {

                return ACon_Conexion;

            }

         

        // Método para cerrar la conexión:

        private void Cerrar_Conexion(AdomdConnection ACon_Conexion)

        {

            ACon_Conexion.Close();

        }

  • Finalmente, si visualizamos nuestra página ASP.NET, el resultado que obtendremos es el siguiente:

image

Y hasta aquí llega este ejemplo sobre como mostrar datos de un cubo de SSAS en un chart control. Espero que el post os haya resultado interesante.

Published 23/9/2009 23:43 por Juan Carlos González Martín

Comparte este post:

Comentarios

# re: .NET Framework 3.5 Chart Controls: Como consumir los datos de un cubo de Analysis Services!@ Friday, November 20, 2009 10:06 PM

Hola Juan Carlos:

Sabes si mediante estos controles o de alguna otra forma puedo mostrar un cubo generado con Analisys Service 2008?.

He generado un cubo con varias dimensiones, el cual puedo probarlo en una hoja de excel y dentro del mismo proyecto de Analisys Service, pero queria tener esa funcionalidad en una aplicacion .Net de Escritorio o Web.

Espero me entiendas, no solo mostrar en forma grafica los datos, sino poder hacer los analisis, y cruce de datos entre la tabla de hechos y la de dimensiones.

Saludos y gracias desde ya por la atencion a la pregunta.

Miguel

Miguel Salvador