在Excel中使用VBA,如何获取服务器上所有OLAP多维数据集的名称?

问题描述 投票:1回答:1

我工作的公司为我们的每个客户创建了OLAP多维数据集数据库。我每天使用多维数据集中的值来处理许多事情。每当设置新的客户多维数据集时,我都会向使用的工作簿中添加工作表,并使用该多维数据集创建数据透视表。我想创建一个宏来检查服务器是否有可能添加的任何多维数据集。我想在下面做这样的事情是最好的方法

For Each Cube in Server.Cubes
    MsgBox Cube.Name
Next Cube

...但是我找不到任何东西。我已经找了几天答案了,没有运气。几乎所有通过服务器解析可用多维数据集的方法都将对我有所帮助。有任何想法吗?

excel vba olap olap-cube
1个回答
4
投票

SSAS服务器具有DMVs,您可以查询以确定服务器上的多维数据集数。然后,您可以使用VBA将其与表格中的行数进行比较。按照these instructions建立连接,或参见下文。

  1. 在Excel中创建新连接:在“获取外部数据”部分中,选择“从其他来源-> SQL Server(NOT Analysis Services)”。
  2. 输入您可以连接到的任何SQL Server的连接信息(我们将在以后的步骤中更改此信息)。
  3. 选择您有权访问的任何数据库和表。在向导中移动并选择“仅在最后保存连接”。
  4. 单击连接。找到您的连接,然后单击“属性”按钮。
  5. 在“定义”选项卡上,更新连接字符串以使其看起来像

    Provider=MSOLAP.5;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=SSASDB;Data Source=MyServer\MyInstance;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error
    
  6. 将命令类型更改为默认值

  7. 将命令文本更改为以下内容:

    SELECT 
    [CATALOG_NAME] AS SSAS_Database_Name,
    [CUBE_NAME] AS Cube_or_Perspective_Name,
    [CUBE_CAPTION] AS Cube_or_Perspective_Caption,
    [CUBE_TYPE] AS Cube_Type,
    [BASE_CUBE_NAME] AS Base_Cube
    FROM 
    $SYSTEM.MDSCHEMA_CUBES
    WHERE
    CUBE_SOURCE=1
    AND
    [BASE_CUBE_NAME] < ''
    
  8. 单击确定,然后单击关闭。

  9. 单击现有连接。选择您的连接。

  10. 在“导入数据”窗口上选择表。选择将表放在新的工作表上。

  11. 您的表应在A到E列中。在单元格G2中,将Prior Row Count:

  12. 在G3单元格中放置Current Row Count:

  13. 在单元格H2中放入0。

  14. 在单元格H3中,输入以下公式:

    =COUNTA(Table_ExternalData_1[SSAS_Database_Name])
    
  15. 编写一个宏,该宏将值从单元格H3复制到H2,然后刷新表的数据连接。我的看起来像这样:

    Sub UpdateCubeCount()
        Range("H3").Select
        Selection.Copy
        Range("H2").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("B2").Select
        Application.CutCopyMode = False
        Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
    End Sub
    
  16. 作为奖励,将条件格式添加到单元格H3。设置单元格值> $ H $ 2的格式使其具有粉红色背景和红色文本。

您最终得到的东西看起来像这样:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9wVGxRMS5qcGcifQ==” alt =“在此处输入图像描述”>

更新:如果要查找SSAS数据库而不是多维数据集本身,则可以使用此查询代替步骤7中的查询:

SELECT [catalog_name] AS SSAS_Database_Name, [date_modified] 
FROM $system.DBSCHEMA_CATALOGS

如果您可以假设每个数据库只有一个多维数据集,这非常普遍,那么这将非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.