如何获取MDX返回的列表的不同值?

时间:2015-09-16 20:18:16

标签: distinct mdx

我有一个MDX查询,它返回有冗余的值列表。我想获得不同的价值观。我曾尝试过多种方式使用Distinct功能,但它无法正常工作。

以下是查询:

WITH 
  MEMBER [Measures].[MU] AS 
    Mid
    (
      Right
      (
        [AG].[Dept].CurrentMember.Member_Caption
       ,4
      )
     ,
      Instr(Right([AG].[Dept].CurrentMember.Member_Caption,4),"_") + 1
    ) 
SELECT 
  {[Measures].[MU]} ON COLUMNS
 ,[AG].[MU].Children HAVING 
  [Measures].[MU] <> "tive" ON ROWS
FROM [MyCube];

第三行基本上是取一个字符串并获取它的最后一部分。子部分侧重于我所关注的层次结构部分。有部分过滤掉列表中的值。

目前结果如下:

F
A
B
C
C
D
E
A
E
F
C

我希望列表是这样的:

A
B
C
D
E
F

有任何想法或建议吗?请帮忙。

编辑

添加AdvWrks示例:

WITH 
  MEMBER [Measures].[aLetter] AS 
      Left
      (
        [Geography].[Country].CurrentMember.Member_Caption
       ,1
      )

SELECT 
  {[Measures].[aLetter]} ON COLUMNS
 ,[Geography].[Country].[Country].MEMBERS ON ROWS
FROM [Adventure Works] ;

它返回以下内容,我认为游戏的目的是更改脚本,以便不包括英国或美国:

enter image description here

2 个答案:

答案 0 :(得分:2)

这是一种针对AdvWrks多维数据集的技术:

WITH 
  MEMBER [Measures].[aLetter] AS 
    Left
    (
      [Geography].[Country].CurrentMember.Member_Caption
     ,1
    ) 
  SET [orderGeo] AS 
    Order
    (
      [Geography].[Country].[Country].MEMBERS
     ,[Measures].[aLetter]
     ,BDESC
    ) 
  MEMBER [Measures].[aRk] AS 
    Rank
    (
      [Geography].[Country].CurrentMember
     ,[orderGeo]
     ,[Measures].[aLetter]
    ) 
  SET [distinctCountries] AS 
    Filter
    (
      [orderGeo] AS x
     ,
      x.CurrentOrdinal = [Measures].[aRk]
    ) 
SELECT 
  [Measures].[aLetter] ON 0
 ,[distinctCountries] ON 1
FROM [Adventure Works];

答案 1 :(得分:0)

您可以使用GENERATE清除集合中的重复项。我的Adventure Works服务器已关闭,因此这是我当前的多维数据集服务器中的一个简单示例。

WITH SET duplicates AS
{
 [Client].[Status].&[Current],
 [Client].[Status].&[Current],
 [Client].[Status].&[Terminated],
 [Client].[Status].&[Terminated]
}


SET noduplicates AS 
    GENERATE
        (
            duplicates, 
            {[Client].[Status].CURRENTMEMBER}
        )

SELECT noduplicates ON 1,
{} ON 0
FROM [SomeCube]

成员将自然订购(如多维数据集设计中所指定)。如果您想要特定的排序,则必须输入ORDER子句。

注意:如果第三个参数以GENERATE提供,ALL也可以保留重复项。