目标是将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 Studio和http://silverlight.galantis.com的Ranet Olap Library Components
我现在想要实现的是使用MDX设置Excel单元格。方法如下:
这会使用立方体数据填充单元格,但只有一行,我无法弄清楚如何使其成为多行和层次结构,请参阅对话框后面的唯一一行数据:
在生成MDX查询的工具中,它是多行的:
我知道这是一个很长的尝试,并试图让这个工作,我怀疑它甚至可能,但我已经没有想法了。
我尝试了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!
如果你到这里感谢阅读,欢迎任何想法:)
答案 0 :(得分:0)
您可以构建Excel插件(请参阅this other post)。
此插件可能基于ADOMD.NET来连接多维数据集并使用您自己的MDX查询进行查询。
给定CellSet,您将能够提取给定的单元格并将其插入Excel表格中的任何位置。
答案 1 :(得分:0)
Ranet PivotGrid可以在层次结构中显示非分组数据 (会员组模式) MDX查询结果可以导出到Excel。但是,它不会与数据公式相关联。处理Mdx查询并生成Excel文件可能是代码。