none
Creando Addin Excel C# para consultar Cubo

    Pregunta

  • Hola a todos:

    He creado un cubo en Analysis Services y tengo que consultarlo a traves de un Plugin Excel en C#. Hasta el momento he intentado con este codigo pero salen errores.

        try
                {
    
                
    
                string connection =
    @"OLEDB;Provider=MSOLAP;Location=MYPC\ANALYSISSERVICES;Initial Catalog=MyBIProject";
              //  string command = "SELECT [Measures].[Monto] ON COLUMNS,  [Cliente].[Nombres].[Nombres] ON ROWS  FROM [Test BI]";
    
                Excel.Application objAplicacion;
                objAplicacion = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
    
    
    
                Excel.PivotCache pivotCache =
                    objAplicacion.ActiveWorkbook.PivotCaches().Add(
                    Excel.XlPivotTableSourceType.xlExternal, Type.Missing);
                pivotCache.Connection = connection;
                pivotCache.MaintainConnection = true;
                pivotCache.CommandText = "Test BI";
                pivotCache.CommandType = Excel.XlCmdType.xlCmdCube ;
       
    
                Excel.Worksheet sheet = (Excel.Worksheet)objAplicacion.ActiveSheet;
                Excel.PivotTables pivotTables = (Excel.PivotTables)sheet.PivotTables(Type.Missing);
                Excel.PivotTable pivotTable = pivotTables.Add(
                    pivotCache, objAplicacion.ActiveCell, "PivotTable1",
                    Type.Missing, Type.Missing);
    
    
                pivotTable.SmallGrid = false;
                pivotTable.ShowTableStyleRowStripes = true;
                pivotTable.TableStyle2 = "PivotStyleLight1";
    
                pivotTable.CubeFields["Cliente"].Orientation = Excel.XlPivotFieldOrientation.xlRowField;
    
                //Excel.PivotField pageField =
                //    (Excel.PivotField)pivotTable.PivotFields("Nombres");
                //pageField.Orientation = Excel.XlPivotFieldOrientation.xlPageField;            //Excel.PivotField rowField =
                //    (Excel.PivotField)pivotTable.PivotFields("FullName");
                //rowField.Orientation = Excel.XlPivotFieldOrientation.xlRowField;
    
    
                //pivotTable.AddDataField(
                //    pivotTable.PivotFields("2004"), "Sum of 2004", Excel.XlConsolidationFunction.xlSum);
    
                }
                catch (System.Runtime.InteropServices.COMException ex)
                {
    
                }

    el codigo lo encontre en este blog

    http://blogs.msdn.com/b/andreww/archive/2008/07/25/creating-a-pivottable-programmatically.aspx

    viernes, 13 de junio de 2014 15:08

Respuestas

Todas las respuestas

  • Hola.

    Sin saber ni los errores que recibes, ¿qué podríamos aportar? ¿Quieres que movamos el hilo a un foro de desarrollo?


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    viernes, 20 de junio de 2014 15:47
    Moderador
  • Mediante este codigo he logrado obtener la informacion

                Excel.Application app;
                app = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
    
           Microsoft.Office.Interop.Excel.Workbook wkbk = (Microsoft.Office.Interop.Excel.Workbook)app.Workbooks.Add(Type.Missing);
    
           Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)wkbk.ActiveSheet;
    
           string connection = @"OLEDB;Provider=MSOLAP.1; Location=MIPC\ANALYSISSERVICES;Connect Timeout=60; Initial Catalog=TestBI;Client Cache Size=25"; ;
    
           string command = "Test BI";
    
           Microsoft.Office.Interop.Excel.PivotCache pivotCache;
    
           pivotCache = wkbk.PivotCaches().Add(Microsoft.Office.Interop.Excel.XlPivotTableSourceType.xlExternal,Type.Missing);
    
           pivotCache.Connection = connection;
    
           pivotCache.MaintainConnection = true;
    
           pivotCache.CommandType = Microsoft.Office.Interop.Excel.XlCmdType.xlCmdCube;
    
           pivotCache.CommandText = command;
    
    
           
           Microsoft.Office.Interop.Excel.PivotTables pvtTables = (Microsoft.Office.Interop.Excel.PivotTables)sheet.PivotTables(Type.Missing);
    
           Microsoft.Office.Interop.Excel.PivotTable pvt = pvtTables.Add(pivotCache , sheet.Cells[8,3], "PivotTable1", Type.Missing, Type.Missing);
    
           Excel.CubeFields o = pvt.CubeFields;
    
    
           pvt.CubeFields["Vendedor"].Orientation =   Microsoft.Office.Interop.Excel.XlPivotFieldOrientation.xlPageField ;

    La informacion aparece en la seccion campos de tabla dinamica, ahora como hago para construir la tabla dinamica, es decir, mediante codigo c# indicar cuales son las filas y valores, para que el usuario no tenga la necesidad de arrastrar los campos.

    viernes, 20 de junio de 2014 16:44
  • Hola.

    Lo que quieres hacer requiere de conocimientos de SSAS, pero sobre todo de C#. Te paso link a la ayuda de AMO:

    http://technet.microsoft.com/en-us/library/ms345093.aspx


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.com
    Sígueme en twitter en http://twitter.com/qwalgrande

    sábado, 21 de junio de 2014 9:25
    Moderador
  • Pero no he podido crear la tabla dinamica, lo extraño es que con el codigo que expongo en mi comentario no funciona al ejecutar visual studio pero cuando ejecuto solamente excel y el complemento aparecen los campos de la tabla dinamica en la hoja excel.

    martes, 24 de junio de 2014 14:50