Использование MDX кроме не работает - PullRequest
2 голосов
/ 13 января 2012

У меня есть следующая проблема:

Select
    {
        [Measures].[PerformanceTotalYtd]

    } on columns,

    Non Empty{  
       Except(([Desk].[DeskName].[Trade].Members,[Time].[Year-Month-Day].[Day].&[2012]&[1]&[10]),([Desk].[DeskName].[Trade].Members,[Time].[Year-Month-Day].[Day].&[2012]&[1]&[09]))
    } on rows

from [Cube]

where ([Entity].[Entity].&[9], [Audience].[View].&[GOD])

Существует измерение с таблицей имен. Это измерение имеет иерархию с именем DeskName. Самый низкий уровень - это торговля.

Письменный стол: -Общий -Сегмент -БизнесАреа -Департамент -Портфолио 4-го уровня -Деск -Трейд

С помощью запроса, показанного ниже, я хочу показать все сделки, имеющие меру "PerformanceTotalYtd"! = NULL на дату 2012/01/10, за исключением сделок с мерой "PerformanceTotalYtd"! = NULL на дату 2012/01/09!

Пример:

Сделки с показателями PerformanceTotalYtd на 2012/01/10:

ABC 12,99

DEF 3,22

GHI 55,60

Сделки с показателями PerformanceTotalYtd на 2012/01/09:

ABC 80,00

DEF 8,78

Я хочу получить следующий Результат, потому что торговля "GHI" не существует на 2012/01/09 и является новой:

GHI 55,60

Мой запрос, показанный ниже, имеет такой результат:

ABC 12,99

DEF 3,22

GHI 55,60

Не удаляет существующие Сделки из 2012/01/09.

У меня есть решение в SQL, но я хочу сделать его в MDX:

    SELECT DD.Code, Sum(PerformanceTotalYtd) as TOTAL
      FROM [Reporting_DB].[Star].[Fact_PerformanceTotal] FIS
            inner join Star.Dimension_Desk DD on FIS.DeskID = DD.DeskID
      WHERE FIS.TimeID = 20120110 and FIS.EntityID = 9 AND DD.Code not in ( SELECT DD.Code
FROM [Reporting_DB_HRE].[Star].[Fact_PerformanceTotal] FIS inner join Star.Dimension_Desk DD on FIS.DeskID = DD.DeskID WHERE FIS.TimeID = 20120109 and FIS.EntityID = 9 group by DD.Code)group by DD.Code

Кто-нибудь может мне помочь, пожалуйста? Я не могу найти решение.

Извините за мой плохой английский!

Alex

Ответы [ 2 ]

2 голосов
/ 13 января 2012

Я нашел похожий пример в кубе Adventure Works: Набор {[Customer].[City].&[Bell Gardens]&[CA], [Customer].[City].&[Bellevue]&[WA], [Customer].[City].&[Bellflower]&[CA]} имеет 3 значения для [Measures].[Internet Sales Amount] в [Date].[Calendar Year].&[2002] и только 2 значения в [Date].[Calendar Year].&[2004]. Поэтому нам нужно показать значение показателя для члена в 2002 году, где значение показателя == ноль в 2004 году. Следующий запрос MDX достигает желаемого результата:

with set S as '{[Customer].[City].&[Bell Gardens]&[CA], [Customer].[City].&[Bellevue]&[WA], [Customer].[City].&[Bellflower]&[CA]}'
select
[Measures].[Internet Sales Amount] on 0,
non empty { Filter(S, IsEmpty(([Date].[Calendar Year].&[2004], [Measures].[Internet Sales Amount]))) } on 1
from [Adventure Works]
where ([Date].[Calendar Year].&[2002])

Я попытался соответствующим образом изменить ваш пример, но не могу его проверить. Вот оно:

select
{ [Measures].[PerformanceTotalYtd] } on 0,
non empty { Filter([Desk].[DeskName].[Trade].Members, IsEmpty(([Time].[Year-Month-Day].[Day].&[2012]&[1]&[09], [Measures].[PerformanceTotalYtd]))) } on 1
from [Cube]
where ([Entity].[Entity].&[9], [Audience].[View].&[GOD], [Time].[Year-Month-Day].[Day].&[2012]&[1]&[10])

Вкратце: используйте фильтр вместо Except.

1 голос
/ 16 января 2012

У меня есть решение для моей проблемы.Следующий запрос показывает тот же результат, что и запрос Дмитрия Поляницы!Хорошего дня, ребята!

with
    set [Trades Today] as NonEmpty([Desk].[DeskName].[Trade].Members,  ([Measures].[PerformanceTotalYtd], [Time].[Year-Month-Day].[Day].&[2012]&[1]&[10]))
    set [Trades Yesterday] as NonEmpty([Desk].[DeskName].[Trade].Members,  ([Measures].[PerformanceTotalYtd], [Time].[Year-Month-Day].[Day].&[2012]&[1]&[9]))
    set [Trades Difference] as Except([Trades Today], [Trades Yesterday])

Select
    {
        [Measures].[PerformanceTotalYtd]

    } on columns,

    Non Empty{  
       [Trades Difference]
    } on rows

from [Cube]

where ([Entity].[Entity].&[9], [Audience].[View].&[GOD])
...