通过MDX生成数据透视表

时间:2012-06-19 05:25:36

标签: .net excel ssas mdx pivot-table

目标是将Excel单元格链接到SQL Analysis Server 2008。

用户不希望使用Excel数据透视表连接到多维数据集,因为他们需要对数据进行计算。这会导致大量问题,主要是在扩展和折叠数据透视表层次结构时,引用的单元格变为#Ref's。我向他们展示了如何关闭+/-以使其只读,但这并不理想。

其次我们不喜欢数据透视表生成工具,我们都更喜欢使用OWC制作的SQL 2005,2008 depreciated in sql2012中的多维数据集浏览器depriciated in Excel 2007 onwards

所以我有点发脾气。我一直在研究生成MDX的大量工具。有几个突出的问题是Mosha Pasumansky's awesome MDX Studiohttp://silverlight.galantis.comRanet Olap Library Components

我现在想要实现的是使用MDX设置Excel单元格。方法如下:

  1. Excel>数据标签>连接>连接到多维数据集
  2. 数据透视表,使用现有连接
  3. 将数据添加到数据透视表
  4. 双击数据透视表中的值以向下钻取,将创建一个新的工作表,其中包含数据的2d表示。
  5. 数据标签>连接>选择excel为钻取创建的连接。
  6. 点击属性>在命令文本字段中定义并粘贴MDX查询>行
  7. 这会使用立方体数据填充单元格,但只有一行,我无法弄清楚如何使其成为多行和层次结构,请参阅对话框后面的唯一一行数据:

    enter image description here

    在生成MDX查询的工具中,它是多行的:

    enter image description here

    我知道这是一个很长的尝试,并试图让这个工作,我怀疑它甚至可能,但我已经没有想法了。

    我尝试了PowerPivot工具,这很糟糕,它的多维数据集浏览器与SQL多维数据集浏览器的工作方式不同,只能添加列!它就像向后退到标准的数据透视表。

    所以在这一点上我试图在内置的Excel中找到一个漂亮的数据透视表“浏览器” - 它似乎没有市场上的任何东西?这就是为什么我使用第三方工具来获取MDX并插入Excel(通过VSTO以编程方式)。

    我尝试了另一件没有运气的事情,但我想提到的是Display the MDX query of an Excel 2007 PivotTable

    Private Sub Workbook_Open()
       Dim ptcon As CommandBar
    
       'See the following for list of menus in excel
       'http://support.microsoft.com/support/kb/articles/Q213/5/52.ASP
       'Title: XL2000: List of ID Numbers for Built-In CommandBar Controls
       Set ptcon = Application.CommandBars("PivotTable context menu")
    
    insertDisplayMDX:
       Dim cmdMdx As CommandBarControl
       For Each btn In ptcon.Controls
           If btn.Caption = "MDX Query" Then GoTo doneDisplayMDX
       Next btn
    
       ' Add an item to the PivotTable context menu.
       Set cmdMdx = ptcon.Controls.Add(Type:=msoControlButton, temporary:=True)
    
       ' Set the properties of the menu item.
       cmdMdx.Caption = "MDX Query"
       cmdMdx.OnAction = "DisplayMDX"
    
    doneDisplayMDX:
    
    End Sub
    
    'And this is the DisplayMDX subroutine, that you can insert in a separate module.
    
    Sub DisplayMDX()
        Dim mdxQuery As String
        Dim pvt As PivotTable
        Dim ws As Worksheet
    
        Set pvt = ActiveCell.PivotTable
        mdxQuery = pvt.MDX
    
        ' Add a new worksheet.
        Set ws = Worksheets.Add
        ws.Range("A1") = mdxQuery
    End Sub
    

    不幸的是,pvt.MDX属性是ReadOnly!

    如果你到这里感谢阅读,欢迎任何想法:)

2 个答案:

答案 0 :(得分:0)

您可以构建Excel插件(请参阅this other post)。

此插件可能基于ADOMD.NET来连接多维数据集并使用您自己的MDX查询进行查询。

给定CellSet,您将能够提取给定的单元格并将其插入Excel表格中的任何位置。

答案 1 :(得分:0)

Ranet PivotGrid可以在层次结构中显示非分组数据 (会员组模式) MDX查询结果可以导出到Excel。但是,它不会与数据公式相关联。处理Mdx查询并生成Excel文件可能是代码。