Ssas 从集合中排除(全部)

Ssas 从集合中排除(全部),ssas,mdx,Ssas,Mdx,我正在使用下面的方法,但我认为可能有一种更简单的方法将所有成员排除在结果之外 WITH SET [Non_All_Distributors] AS {FILTER( [Distributor Name].members, (InStr(1, [Distributor Name].CurrentMember.NAME, "All") = 0) )} SET [Non_All_Countrie

我正在使用下面的方法,但我认为可能有一种更简单的方法将
所有
成员排除在结果之外

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]  
只用

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包含属性的所有成员。(只有当您没有进行特殊配置(如将属性设置为不可聚合)时,这才是正确的,但我假设是标准情况,因为您的层次结构中有
所有
成员

除了更简单之外,此语句的运行速度会快得多,因为在许多情况下,
Filter
是真正的性能杀手。

我将使用函数和AFTER选项,如下所示;这样,您就可以获得all成员下面层次结构的所有成员:

  select 
     [Measures].[Amount] on 0,  
     Descendants([Customers].[Geography].[All], 1, AFTER ) on 1

  from [Sales]
(已编辑:请求使用MSAS Adv.Works:删除距离参数)


+1-很棒的东西Frank…我不需要维度名称,只需使用以下内容就可以了
[Distributor name].[Distributor name]
-我不设计多维数据集。在e问题上-因为我可以使用
[Distributor name].[Distributor name]
这是否意味着
[Distributor name]
是一个维度?!@whytheq否,我不会假设
[分销商名称]
是维度。AnalysisServices只是试图巧妙地从部分名称猜测用户可能的意思。这在许多情况下可能是正确的,但有时是错误的,或者可能导致故障,以防多维数据集在将来演化,并且存在另一个具有相同名称的属性的维度,并且可能在大型多维数据集上可能是错误的花一点时间查找与名称匹配的潜在元素。因此,我倾向于编写完整的名称,即使这些名称可能相当长。+1虽然似乎无法实现这一点-如果我使用此
子体([Operator].[Operator].[Distributor name].[All],1,后面)
然后查询运行时没有报告错误,但没有返回任何数据。
[Operator].[Operator].[Distributor Name]
是完整路径,即[dimension].[hierarchy].[level]。其级别为2。我已编辑了响应;请确保在单独的select中正确选择[All]成员,而不包含任何后代等:[dim].[hierarchy].[All]应该选择它:“all”在MDX中有特殊的含义。
select
 Measures].[Order Count] on 0,
 Descendants( [Geography].[Geography].[All], , AFTER ) on 1

from [Adventure Works]