0

私は MDX を初めて使用するので、助けが必要です。SSRS には、SSAS キューブからプルするデータセットがあります。データセットには常に 6 か月分のデータが含まれます。私ができる必要があるのは、max(timeID) の値を 2 番目の max(timeID) の値と比較し、max(timeID) の値 > 2 番目の max(timeID) の値がインジケーターで矢印が上がるなど...

したがって、以下のデータセットでは、20130301 の値 10 から 20130201 の値 8 を引きます。結果は正の数になり、インジケーターは上向きの緑色の矢印になります。0 の場合は直線になり、負の場合は矢印が赤く下向きになります。インジケーターの扱い方は理解しています - それは問題ではありません。それは私が助けを必要としている MDX です。

20130201 8 20130301 10 20121201 4

私はそれをSQLで書くことができ、それはこのようになります。

    Select Item, case when sum(Time1ContentCount) > sum(Time2ContentCount) then 3 when sum(Time1ContentCount) = sum(Time2ContentCount) then 2 when sum(Time1ContentCount) sum(Time2ContentCount) then 1 end as Indicator, sum(Time1ContentCount) as Time1Count, sum(Time2ContentCount) as Time2Count from (Select timeID, dc.Item,  Case when timeID = (Select max(timeID) from FactUsage) then count(fu.Contentid) else 0 END as Time1ContentCount,  Case when timeID = (Select max(timeID) from FactUsage where timeID <>(Select max(timeID) from FactUsage)) then count(fu.Contentid) else 0 END as Time2ContentCount  from  factUsage fu  INNER JOIN dimContent dC on dc.ContentID = fu.ContentID  WHERE TimeID in (Select distinct top 6 timeid from factUsage order by timeID desc) Group by  timeID, Item) a group by Item

助けてくれてどうもありがとう!

編集: インジケーターのステートメントを次のように変更しました。

WITH Member MEASURES.Indicator AS ( 
        IIF(( [Measures].[Activity], [Time].[Time ID].LastChild ) > 
   ( [Measures].[Activity], [Time].[Time ID].LastChild.PrevMember),3,
            (IIF(([Measures].[Activity], [Time].[Time ID].LastChild ) = 
                ([Measures].[Activity], [Time].[Time ID].LastChild.PrevMember), 2,1))))


SELECT {Measures.Indicator} on 0
FROM [DW]

SSMS のキューブに対してクエリとして実行すると機能しますが、インジケーターに入れようとしましたが、機能しません。IIF ステートメントを追加するだけでは機能しません。クエリまたはキューブ自体に追加しようとすると、そこからプルできるようになり、メモリ不足エラーが発生します。

4

1 に答える 1

0

MDX 式またはレポート ビルダーでどの程度編集できるかはわかりませんが、一連の 2 つの値の差を取得するには、CurrentMember の差であるメジャーを (レポートで) 作成できます。と前のメンバー。時系列 (timeid) はキーでソートされるため、常に正しい順序になります (または、スキーマとアーキテクチャを修正する必要があります)。

したがって、基本的に、次のことができます。

WITH 
MEMBER MEASURES.GrowthTime AS ( 
        ( [Measures].[Value], [TimeID].CurrentMember ) - 
        ( [Measures].[Value], [TimeID].PrevMember )
)
MEMBER MEASURES.GrowthRatio AS (
        ( [Measures].[Value], [TimeID].CurrentMember ) /
        ( [Measures].[Value], [TimeID].PrevMember )
)
SELECT { Measures.Value, Measures.GrowthTime, Measures.GrowthRatio } on 0,
[TimeID].CHILDREN on 1
FROM Cube

あなたの立方体構造がわからないので、これは疑似です。TimeID の場合は、次のよう[DimensionName].[AttributeName].CurrentMemberにします。PrevMember

于 2013-05-28T19:02:16.307 に答える