使用MDX查询列出维度成员

18
有没有一种方法可以列出维度成员,而不需要获取每个成员的默认度量?
4个回答

33

你可以在相反的轴上选择什么也不选:

SELECT
  { } on 0,
  { DESCENDANTS([Dimension].[Hierarchy]) } on 1
FROM [Cube]

查询一个空集会防止SSAS在相反的轴上添加默认的度量。


1
这是一种很好的方法,可以填充SSRS参数,而不会让用户等待主查询重新加载。 - Justin Lange
3
您可以将其简化:null 是多余的,无论如何 MDX 解析器都会将其删除,导致结果为空集。 - FrankPl
@FrankPI,当您在SSAS中不选择相反的轴时,它会添加默认度量。此查询返回不同的结果-仅查询的轴,而没有任何度量。null绝对不是多余的。 - Tullo_x86
2
@Tullo null 是多余的。但是在列轴上的空集不是。你可以写成(从我的角度来看更清晰)SELECT { } on 0, ... - FrankPl

1
你可以使用以下SQL语法而不是MDX,从SQL Server 2008访问Magnus提到的目录视图(顺便说一下 这里有相关文档):
SELECT *
  FROM $system.MDSCHEMA_MEMBERS
 WHERE ...

Analysis Services 能够理解的 SQL 语言非常有限:无法进行连接操作,WHERE 条件只能包含类似于 [HIERARCHY_UNIQUE_NAME] = '[Date].[Order Date]' 的子句,并使用 AND 连接。不支持 GROUP BY 和 ORDER BY。但是,您仍然可以查询立方体元数据。
根据访问 Analysis Services 的接口不同,可能会出现一些问题,因为这些元数据以结果集格式而不是单元集格式返回。

1

我以前在没有数据的情况下查询的方式是:

WITH MEMBER Measures.Amount AS 0 
SELECT { 
   [-dimensionName-].[-hierachyName-].Members 
} ON COLUMNS 
FROM [-cubeName-]

但是在观察 SQL Profiler 中 BIDS 的工作后,我学到了

SELECT { 
   [-dimensionName-].[-hierachyName-].Members 
} ON COLUMNS 
FROM [$-dimensionName-]

e.g.

SELECT { Organization.Organization.Members } ON COLUMNS FROM [$Organization]

如果您只想倾倒层次结构的内容而不用担心数据,那么这条路线是否存在意外副作用就不确定了,但它是另一个选择。

-1
您可以使用 ADOMD 的 Catalog 对象来查询立方体,找出其包含的度量/维度等信息。这完全不涉及 MDX。

你有一个链接可以解释如何做吗?或者你能发布一个代码示例吗? - Ahmed
我不知道你在用什么编程语言!几年前我使用经典的ASP来完成这个任务。对于.NET,请尝试从这里开始:http://msdn.microsoft.com/en-us/library/microsoft.analysisservices.adomdclient.cubedef.aspx - Magnus Smith
这个回答与问题不符。 - Matthias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接