我正在使用以下内容,但我认为从结果中排除All
成员的方法可能更为简单?
WITH
SET [Non_All_Distributors] AS
{FILTER(
[Distributor Name].members,
(InStr(1, [Distributor Name].CurrentMember.NAME, "All") = 0)
)}
SET [Non_All_Countries] AS
{FILTER(
[Geography Country].members,
(InStr(1, [Geography Country].CurrentMember.NAME, "All") = 0)
)}
SELECT
NON EMPTY
[Dimension].[Hierarchy].DEFAULTMEMBER
ON COLUMNS,
NON EMPTY
[Non_All_Distributors]
*
[Non_All_Countries]
*
Tail([Date].[Date - Calendar Month].[Calendar Day].Members,60)
*
{
[Measures].[Revenue],
[Measures].[NumClients]
}
ON ROWS
FROM [OURCUBE]
答案 0 :(得分:3)
只需使用
SELECT
NON EMPTY
[Dimension].[Hierarchy].DEFAULTMEMBER
ON COLUMNS,
NON EMPTY
[dimension of Distributor Name].[Distributor Name].[Distributor Name].Members
*
[dimension of Geography Country].[Geography Country].[Geography Country].Members
*
Tail([Date].[Date - Calendar Month].[Calendar Day].Members,60)
*
{
[Measures].[Revenue],
[Measures].[NumClients]
}
ON ROWS
FROM [OURCUBE]
此处无需定义集合。您可以直接在rows子句中声明分发者和国家/地区成员。
通过重复属性名称,您可以将[dim].[attrib name]
引用的属性层次结构限制为All
成员下面的级别,该成员恰好与该属性具有相同的名称。属性层次结构有两个级别:级别0包含“全部”成员,级别1包含属性的所有成员。 (只有当您没有执行特殊配置(例如将属性设置为不可聚合)时才会出现这种情况,但我认为是标准情况,因为您的层次结构中有All
个成员。
除了更简单之外,这个语句运行得更快,因为在许多情况下Filter
是一个真正的性能杀手。
答案 1 :(得分:1)
我会使用Descendants函数和AFTER选项如下;这样,您可以获得所有成员下面的层次结构的所有成员:
select
[Measures].[Amount] on 0,
Descendants([Customers].[Geography].[All], 1, AFTER ) on 1
from [Sales]
(编辑:请求使用MSAS Adv.Works:删除距离参数)
select
Measures].[Order Count] on 0,
Descendants( [Geography].[Geography].[All], , AFTER ) on 1
from [Adventure Works]