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

我工作的公司为我们的每个客户创build一个OLAP Cube数据库。 我使用立方体中的值每天跟上很多事情。 无论何时设置新的客户端多维数据集,我都会在工作簿中添加一个工作表,并使用该多维数据集创build数据透视表。 我想创build一个macros来检查服务器是否有可能添加的多维数据集。 我想下面这样做是最好的方法

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

,但是我找不到这样的东西。 我已经search了几天没有运气的答案。 几乎任何方式来parsing通过服务器看可用的立方体将帮助我。 有任何想法吗?

SSAS服务器具有可以查询的DMV ,以确定服务器上的多维数据集数量。 然后,您可以使用VBA将其与表中的行数进行比较。 按照这些说明进行连接,或见下文。

  1. 在Excel中创build一个新的连接:在获取外部数据部分,select从其他来源 – > SQL Server(不分析服务)。
  2. input您可以连接的任何SQL Server的连接信息(我们将在稍后的步骤中更改此信息)。
  3. select你有权访问的任何数据库和表。 移动向导并select仅保存连接。
  4. 点击连接。 find您的连接,然后单击属性button。
  5. 在定义选项卡上,更新连接string看起来像

    Provider = MSOLAP.5;集成安全性= SSPI;持久安全信息= True;初始目录= SSASDB;数据源= MyServer \ MyInstance; MDX兼容性= 1;安全选项= 2; MDX缺less成员模式=错误

  6. 将命令types更改为默认值

  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. 单击确定,然后单击closures。

  9. 点击现有连接。 select你的连接。

  10. 在导入数据窗口上select表格。 select将您的表放在新的工作表上。

  11. 你的表格应该在A到E列。在G2单元格中放上Prior Row Count:

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

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

  14. 在单元格H3中,input以下公式: =COUNTA(Table_ExternalData_1[SSAS_Database_Name])

  15. 编写一个macros,将单元格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的红色文本。

你最终会看到如下的东西: 在这里输入图像说明

更新:如果您正在查找SSAS数据库而不是立方体本身,则可以使用此查询而不是步骤7中的查询:

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

如果您可以假设每个数据库只有一个多维数据集,这将非常有用,这是相当常见的。