2

私は次の問題を抱えています:

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という名前の階層があります。最低レベルは貿易です。

デスク:-Total -Segment -BusinessArea -Department -4th Level Portfolio -Desk -Trade

以下に示すクエリで、メジャー "PerformanceTotalYtd"!= NULLの2012/01/10の日付の取引を除き、メジャー "PerformanceTotalYtd"!=NULLのすべての取引を表示したいと思います。 01/09!

例:

2012/01/10のMeasurePerformanceTotalYtdとの取引:

ABC 12,99

DEF 3,22

GHI 55,60

2012/01/09のMeasurePerformanceTotalYtdとの取引:

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

誰か助けてくれませんか?解決策が見つかりません。

私の悪い英語でごめんなさい!

アレックス

4

2 に答える 2

2

アドベンチャーワークスキューブで同様の例を見つけました。セット{[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年のメジャー値== nullです。次の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の代わりにFilterを使用します。

于 2012-01-13T11:34:15.377 に答える
1

問題の解決策があります。次のクエリは、Dmitry Polyanitsa のクエリと同じ結果を示しています。お前ら、良い一日を!

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])
于 2012-01-16T08:29:14.333 に答える