对 Analysis Services 的 VBA Reptitive MDX 查询

Posted

技术标签:

【中文标题】对 Analysis Services 的 VBA Reptitive MDX 查询【英文标题】:VBA Reptitive MDX query to Analysis Services 【发布时间】:2015-06-26 10:19:20 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

我认为上一个问题几乎是您所需要的:Any MDX query within Excel vba?

我修改了上一个问题答案中的代码,只是写了以下内容,它似乎返回了一个数字:

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 库

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

【讨论】:

很有用,谢谢分享!您知道是什么决定了将其粘贴到工作表中的速度吗?我曾经将来自不同程序的数据粘贴到电子表格中,并希望使用它来自动化它,但如果复制+粘贴速度更快,它可能不值得 @ErikRasmussen 不太确定 - 尝试根据您的需要调整此代码并查看它是否更快可能会很有趣。即使手动完成更快,您也可能会学到一些有助于未来更大自动化任务的东西。

以上是关于对 Analysis Services 的 VBA Reptitive MDX 查询的主要内容,如果未能解决你的问题,请参考以下文章

一起来体验企业级商务智能解决方案Azure Analysis Services

Analysis Services 属性层次结构和属性关系

SQL Analysis Services OLAP TIME 维度

DB 排序规则与 Analysis Services 排序规则不同

使用 Python 查询 SQL Server Analysis Services (SSAS) 多维数据集数据

使用 IronPython 在 SQL Server Analysis Services 上执行查询