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

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

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

【问题讨论】:

    标签: excel vba mdx olap


    【解决方案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)。我认为您将需要遍历单元组。

    注意 - 您需要添加两个引用才能使上述内容生效:

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

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

    【讨论】:

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