VBA对Analysis Services的Reptitive MDX查询

我有一个报告,每周运行相同的MDX查询,并将结果粘贴到工作表中,然后生成报告。 我知道如何连接到Excel中的OLAP多维数据集,但我不喜欢操纵数据透视表来匹配我的查询。

我想使用VBA连接到多维数据集,并将特定查询的结果作为值粘贴或表返回到工作表中。 我可以将MDX查询保存在单独的工作表中。 这可能吗? 我是VBA的新手,所以我不确定从哪里开始。 任何示例代码将是伟大的。

我想这个以前的问题几乎是你所需要的:
Excel VBA中的任何MDX查询?

我在前面的问题中修改了代码 – 只是写了下面的代码,好像返回一个数字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) 。 我想你需要循环访问网格。

注意 – 你需要为上面的工作添加两个引用:

  1. Microsoft ActiveX数据对象6.1库
  2. Microsoft ActiveX数据对象(多维)6.0库

(或每个可用的最新版本)