我工作的公司为每个客户创建了一个OLAP多维数据集数据库。我使用立方体中的值每天跟上很多事情。每当设置新的客户端多维数据集时,我都会向我使用的工作簿添加一个工作表,并使用该多维数据集创建一个数据透视表。我想创建一个宏来检查服务器是否有任何可能已添加的多维数据集。我想在下面做这样的事情,这将是最好的方式
For Each Cube in Server.Cubes
MsgBox Cube.Name
Next Cube
,但我找不到任何类似的东西。我已经搜索了几天的答案而没有运气。几乎任何通过服务器解析可用多维数据集的方法都会对我有所帮助。有任何想法吗?
答案 0 :(得分:3)
SSAS服务器具有DMVs,您可以查询该服务器以确定服务器上的多维数据集数量。然后,您可以使用VBA将其与之前表中的行数进行比较。按照these instructions进行连接,或参见下文。
在“定义”选项卡上,将连接字符串更新为
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
你最终得到的东西看起来像这样:
更新:如果您正在寻找SSAS数据库而不是立方体本身,您可以使用此查询而不是步骤7中的查询:
SELECT [catalog_name] AS SSAS_Database_Name, [date_modified]
FROM $system.DBSCHEMA_CATALOGS
如果您可以假设每个数据库只有一个多维数据集,这将非常有用,这很常见。