0

SSAS 2008 R2 データベース内の不動産データで使用するための非常に単純なファクト/ディメンション スキーマがあります。

家が最初に販売された時期、販売価格、および月ごとに販売された後の家の価値を概説する結果セットを構築したいと考えています。

次の寸法と寸法を考慮してください。

寸法:


DimHouseNumber

家屋番号


DimValuationDate

評価日


DimSoldDate

販売日

対策:

SoldAmount
CurrentValue
CountofHouse

  1. [DimHouseNumber].[HouseNumber] 属性階層は番地を表します
  2. [DimSoldDate].[SoldDate] 属性階層は、家が売却された日付を表します。
  3. [DimValuationDate].ValuationDate 属性階層は、家が売却された後に評価された日付を表します。
  4. [SoldAmount] メジャーは、元の家が販売された金額を表します。
  5. [CurrentValue] メジャーは、問題の [DimValuationDate].ValuationDate 属性階層メンバーに基づいて、売却された後の家屋の現在の価値を表します。

上記のディメンションとメジャーに基づいて、考えられるすべてのタプルとメジャーを含む次の結果セットを考えてみましょう。


家番号 | 販売日 | 販売金額 | 評価日 | 現在の価値

 1                  1/3/2011        $100,000.00     1/31/2011           $100,000.00
 1                  1/3/2011        $100,000.00     2/28/2011           $110,000.00
 1                  1/3/2011        $100,000.00     3/31/2011           $112,000.00
 2                  1/20/2011       $50,000.00      1/31/2011           $51,000.00
 2                  1/20/2011       $50,000.00      2/28/2011           $53,000.00
 2                  1/20/2011       $50,000.00      3/31/2011           $75,000.00

上記のように、基礎となるファクト テーブルの構成方法に基づいて問題の番地が評価されるたびに、販売日と販売額の値が同じままであることがわかります。

対応するファクト テーブルに挿入されるレコードは、住宅が売却された後の毎月の評価額を表します。

そうは言っても、上記の結果セットを以下に示すものに変えたいと思います。


家番号 | 評価日 | 現在の価値

 1                    1/3/2011        $100,000.00 
 1                    1/31/2011       $100,000.00 
 1                    2/28/2011       $110,000.00 
 1                    3/31/2011       $112,000.00 
 2                    1/20/2011       $50,000.00 
 2                    1/31/2011       $51,000.00 
 2                    2/28/2011       $53,000.00 
 2                    3/31/2011       $75,000.00 

上でわかるように、家が売却されたときの価値を含めて、時系列のタイムラインを作成しようとしています.

基本的に、売却される家ごとに、家の価値と評価日をまとめた 1 つのレコードが必要です。

上記の 2 つの結果セットの違いは、上の 2 番目の結果セットには、家が売却された日付と、「評価」期間の一部として売却された金額が含まれていることです。上記の最初の結果セットには、家が売却された後の日付のみが含まれています。

上記の 1 番目の結果セットに含まれるデータに基づいて、上記の 2 番目の結果セットを生成する必要があります。

残念ながら、OLTP 側または SSAS キューブ自体でソース データを変更する余裕はなく、これには MDX のみのソリューションが必要です。

上記で概説したディメンションとメジャーに基づいて、これを達成するために必要な MDX ステートメントを誰かに見せていただければ幸いです。

あなたが助けて大歓迎です!

4

2 に答える 2

0

[DimValuationDate] で利用可能なすべての日があると仮定すると、次の計算メジャーを試すことができます。

with 
    member [Measures].[Value] as 
           iif( not isEmpty( ( [Measures].[Current Value], [DimValuationDate].currentMember )),
                ( [Measures].[Current Value], [DimValuationDate].currentMember ),
                iif( not isEmpty( ([Measures].[Sold Amount], LinkMember( [DimValuationDate].currentMember, [DimSoldDate] ))),
                     ([Measures].[Sold Amount], LinkMember( [DimValuationDate].currentMember, [DimSoldDate] )),
                     null
                )
            )

select 
    [Measures].[Value] on 0,
    non empty [DimHouseNumber].members * [DimValuationDate].members on 1

from 
    [my-cube]
于 2012-05-20T00:54:29.150 に答える
0

これは単純な UNION クエリのようです。

select *
from ((select distinct HouseNumber, SoldDate as ValuationDate, CurrentValue
       from fact
      ) union all
      (select HouseNumber, ValuationDate, CurrentValue
       from fact
      )
     ) f
order by HouseNumber, ValuationDate

このクエリは、販売データと評価データを結合します。

于 2012-05-20T04:00:37.597 に答える