VBA 对 Analysis Services 的 Reptitive MDX 查询
VBA Reptitive MDX query to Analysis Services
我有一份报告,其中我每周 运行 进行相同的 MDX 查询,并将结果粘贴到工作sheet 中以生成报告。我知道如何连接到 excel 中的 OLAP 多维数据集,但我不喜欢操纵数据透视表 table 来匹配我的查询。
我想使用 VBA 连接到多维数据集和 return 作品中特定查询的结果 sheet 作为值粘贴,或者 table。我可以将 MDX 查询保存在单独的 sheet 中。这可能吗?我是 VBA 的新手,所以我不确定从哪里开始。任何示例代码都会很棒。
我认为上一个问题正是您所需要的:
Any MDX query within Excel vba?
我把之前那个问答里的代码改写了一下,好像是return一个数字ok了:
Sub getFromCube()
Dim strConn As String
strConn = _
"Provider=MSOLAP.6;" & _
"Data Source=imxxxxxx;" & _ '<<<name of your server here
"Initial Catalog=AdventureWorksDW2012Multidimensional-EE;" & _ '<<<name of your Adv Wrks db here
"Integrated Security=SSPI"
Dim pubConn As ADODB.Connection
Set pubConn = New ADODB.Connection
pubConn.CommandTimeout = 0
pubConn.Open strConn
Dim cs As ADOMD.Cellset
Set cs = New ADOMD.Cellset
Dim myMdx As String
myMdx = _
" SELECT" & _
" NON EMPTY" & _
" [Customer].[Customer Geography].[State-Province].&[AB]&[CA] ON 0," & _
" NON EMPTY" & _
" [Measures].[Internet Sales Amount] ON 1" & _
" FROM [Adventure Works];"
With cs
.Open myMdx, pubConn
ActiveSheet.Range("A1") = cs(0, 0)
.Close
End With
End Sub
如果您查看上一个问题,您会发现获取数据单元格集非常容易,但将其粘贴到工作表中并不是那么简单。为简单起见并快速检查一切是否按预期工作,我只是使用了这个 ActiveSheet.Range("A1") = cs(0, 0)
。我认为您将需要遍历单元集。
注意 - 您需要添加两个引用才能使上述内容生效:
- Microsoft ActiveX 数据对象 6.1 库
- Microsoft ActiveX 数据对象(多维)6.0 库
(或您可用的每个版本的最新版本)
我有一份报告,其中我每周 运行 进行相同的 MDX 查询,并将结果粘贴到工作sheet 中以生成报告。我知道如何连接到 excel 中的 OLAP 多维数据集,但我不喜欢操纵数据透视表 table 来匹配我的查询。
我想使用 VBA 连接到多维数据集和 return 作品中特定查询的结果 sheet 作为值粘贴,或者 table。我可以将 MDX 查询保存在单独的 sheet 中。这可能吗?我是 VBA 的新手,所以我不确定从哪里开始。任何示例代码都会很棒。
我认为上一个问题正是您所需要的:
Any MDX query within Excel vba?
我把之前那个问答里的代码改写了一下,好像是return一个数字ok了:
Sub getFromCube()
Dim strConn As String
strConn = _
"Provider=MSOLAP.6;" & _
"Data Source=imxxxxxx;" & _ '<<<name of your server here
"Initial Catalog=AdventureWorksDW2012Multidimensional-EE;" & _ '<<<name of your Adv Wrks db here
"Integrated Security=SSPI"
Dim pubConn As ADODB.Connection
Set pubConn = New ADODB.Connection
pubConn.CommandTimeout = 0
pubConn.Open strConn
Dim cs As ADOMD.Cellset
Set cs = New ADOMD.Cellset
Dim myMdx As String
myMdx = _
" SELECT" & _
" NON EMPTY" & _
" [Customer].[Customer Geography].[State-Province].&[AB]&[CA] ON 0," & _
" NON EMPTY" & _
" [Measures].[Internet Sales Amount] ON 1" & _
" FROM [Adventure Works];"
With cs
.Open myMdx, pubConn
ActiveSheet.Range("A1") = cs(0, 0)
.Close
End With
End Sub
如果您查看上一个问题,您会发现获取数据单元格集非常容易,但将其粘贴到工作表中并不是那么简单。为简单起见并快速检查一切是否按预期工作,我只是使用了这个 ActiveSheet.Range("A1") = cs(0, 0)
。我认为您将需要遍历单元集。
注意 - 您需要添加两个引用才能使上述内容生效:
- Microsoft ActiveX 数据对象 6.1 库
- Microsoft ActiveX 数据对象(多维)6.0 库
(或您可用的每个版本的最新版本)