2015-09-16 2 views
0

У меня есть запрос MDX, который возвращает список значений, где есть избыточность. Я хотел бы получить отличные значения. Я попытался использовать функцию Distinct несколькими способами, но не работает.Как получить различные значения для списка, возвращаемого MDX?

Вот запрос:

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

+0

... Я добавил версию «AdvWrks» - надеюсь, что я не испортил ваш вопрос? – whytheq

ответ

1

Вот это техника, которая работает против куба 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]; 
+0

whytheq - Хорошая попытка. – SouravA

+0

@SouravA - это работает, и мне это очень нравится - к сожалению, еще одно усилие mdx без обратной связи с вопросомчиком. – whytheq

0

Вы можете использовать GENERATE отсеять дубликаты из набора. Сервер My 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.

Смежные вопросы