3

我正在使用以下内容,但我认为可能有一种更简单的方法可以将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]  
4

2 回答 2

5

只需使用

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在许多情况下它是一个真正的性能杀手。

于 2013-09-12T17:15:47.090 回答
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]
于 2013-09-12T22:40:14.893 回答