在 Excel 中使用 VBA,如何获取服务器上所有 OLAP Cube 的名称?
Posted
技术标签:
【中文标题】在 Excel 中使用 VBA,如何获取服务器上所有 OLAP Cube 的名称?【英文标题】:Using VBA in Excel, how do I get the names of all OLAP Cubes on a server? 【发布时间】:2015-03-04 20:27:59 【问题描述】:公司为我们的每个客户创建一个 OLAP 多维数据集数据库。我使用多维数据集中的值来跟上许多事情。每当设置新客户的多维数据集时,我都会在我使用的工作簿中添加一个工作表,并使用该多维数据集创建一个数据透视表。
我想检查服务器是否有任何可能已添加的多维数据集。
我认为这样的方法是最好的方法。
For Each Cube in Server.Cubes
MsgBox Cube.Name
Next Cube
我找不到任何类似的东西。我搜索了几天的答案。有什么方法可以通过服务器解析查看可用的多维数据集?
【问题讨论】:
【参考方案1】:SSAS 服务器有DMVs,您可以查询它以确定服务器上的多维数据集数。然后您可以使用 VBA 将其与之前表中的行数进行比较。关注these instructions进行连接,或见下文。
-
在 Excel 中创建新连接:在“获取外部数据”部分中,选择“来自其他源”->“SQL Server(不是 Analysis Services)”。
输入您可以连接的任何 SQL Server 的连接信息(我们将在后面的步骤中更改此信息)。
选择您有权访问的任何数据库和表。浏览向导并在最后选择仅保存连接。
单击连接。找到您的连接并单击“属性”按钮。
在“定义”选项卡上,将连接字符串更新为如下所示
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
将命令类型更改为默认
将命令文本更改为以下内容:
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] < ''
单击“确定”,然后单击“关闭”。
单击现有连接。选择您的连接。
在导入数据窗口中选择表。选择将您的表格放在新的工作表上。
您的表格应该在 A 到 E 列中。在单元格 G2 中输入 Prior Row Count:
在单元格 G3 中输入Current Row Count:
在单元格 H2 中放入 0。
在单元格 H3 中,输入以下公式:
=COUNTA(Table_ExternalData_1[SSAS_Database_Name])
编写一个宏,将单元格 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
如果您可以假设每个数据库只有一个多维数据集,这将非常有用,这很常见。
【讨论】:
非常感谢您的回复。我使用上面的方法设置了一个表,但这不是我想要的。每当我说“Cube”时,我可能使用了错误的术语。每个客户端拥有的“立方体”都显示在 SSAS_Database_Name 列中,因此它只显示我选择的那个。如何让此列表显示 A 列中所有服务器可用的“目录”或 SSAS 数据库?这就是我需要的。 好的,我在最后提出了一个对你有帮助的问题。 哇,做到了。我们的数据库管理员说这不是一件容易的事。我迫不及待地想给他看这个。非常感谢! 上面的这个方法效果很好。我现在在许多不同的应用程序中使用它。使用同样的方法,有没有办法拉出立方体内所有维度和度量的列表? 是的,有用于度量 ($SYSTEM.MDSCHEMA_MEASURES) 和维度 ($SYSTEM.MDSCHEMA_DIMENSIONS) 的 DMV。我的答案中的link 有对它们的查询。您可以查询数据库中的特定多维数据集或所有多维数据集。以上是关于在 Excel 中使用 VBA,如何获取服务器上所有 OLAP Cube 的名称?的主要内容,如果未能解决你的问题,请参考以下文章
Excel 在 VBA 中,如何获取 Function 的返回值
VBA - 如何在 Excel 2010 的目录中获取最后修改的文件或文件夹