在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将其与表中的行数进行比较。 按照这些说明进行连接,或见下文。
- 在Excel中创build一个新的连接:在获取外部数据部分,select从其他来源 – > SQL Server(不分析服务)。
- input您可以连接的任何SQL Server的连接信息(我们将在稍后的步骤中更改此信息)。
- select你有权访问的任何数据库和表。 移动向导并select仅保存连接。
- 点击连接。 find您的连接,然后单击属性button。
-
在定义选项卡上,更新连接string看起来像
Provider = MSOLAP.5;集成安全性= SSPI;持久安全信息= True;初始目录= SSASDB;数据源= MyServer \ MyInstance; MDX兼容性= 1;安全选项= 2; MDX缺less成员模式=错误
-
将命令types更改为默认值
-
将命令文本更改为以下内容:
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] < ''
-
单击确定,然后单击closures。
-
点击现有连接。 select你的连接。
-
在导入数据窗口上select表格。 select将您的表放在新的工作表上。
-
你的表格应该在A到E列。在G2单元格中放上
Prior Row Count:
-
在单元格G3中放入
Current Row Count:
-
在单元格H2中放置0。
-
在单元格H3中,input以下公式:
=COUNTA(Table_ExternalData_1[SSAS_Database_Name])
-
编写一个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
- 作为奖励,将条件格式添加到单元格H3。 将其格式化为具有粉红色背景和规则单元格值> $ H $ 2的红色文本。
你最终会看到如下的东西:
更新:如果您正在查找SSAS数据库而不是立方体本身,则可以使用此查询而不是步骤7中的查询:
SELECT [catalog_name] AS SSAS_Database_Name, [date_modified] FROM $system.DBSCHEMA_CATALOGS
如果您可以假设每个数据库只有一个多维数据集,这将非常有用,这是相当常见的。