1

リレーショナル データ ウェアハウス / SSAS 2008 R2 / SQL Server 2008 R2

ファクト テーブルよりもキューブのデータが少ない: すべてのロールプレイング日付ディメンションに対応するメンバーを持つファクトのみが考慮されます。

ファクト テーブルよりも「キューブ」のデータの方が少ないことに気付きました。ファクト テーブルの "Line Items" の数SELECT Count(*) FROM [FactSales]が、キューブの "Line Item Count" メジャーに対応していません。

そのため、彼が含むべき事実の 1% 未満しか保持していません。何日ものデータが欠落しています。

だから私はいくつかの研究をしました。最初に最も考えられる原因を除外しました (たとえば、「すべて」のメンバーではない既定のメンバーをチェックアウトする、処理オプションをチェックアウトする、など)。問題を考える前に、まずモデルとファクト テーブルの詳細について説明します。

リレーショナル データ ウェアハウスは、ファクト テーブルが販売データを保持するスター スキーマに従います。1 つの日付ディメンションを指す複数の外部キーがあります。この日付ディメンションは、SSAS ではいくつかのロールプレイング ディメンションによって表されます。これらの FK はすべて NOT NULL です。日付ディメンションには、不明なメンバーがあります (基になるテーブル内)。したがって、日付ディメンション キー (Int) の Null 処理は「エラー」に設定されます。ディメンションの使用法が適切に設定されている (Null 処理: エラー)。

最後に確認することは、ファクト テーブルとそのディメンションに基づいて、キューブで取得したのと同じカウントのライン アイテムを返すクエリを作成できるかどうかです。

最後にクエリ (Q1) です。

SELECT COUNT(*) --cut-set
FROM Fact AS F 
INNER JOIN DimDate 
    ON F.Date1Key = Date.DateKey 
    AND F.Date2Key = Date.DateKey
    AND F.Date3Key = Date.DateKey

もちろん、それは間違っています。次のようになります (Q2):

SELECT COUNT(*) --complete Set
FROM FactSales AS F 
INNER JOIN DimDate AS DimDate1 
    ON F.Date1Key = DimDate1.DateKey
INNER JOIN DimDate AS DimDate2
    ON F.Date2Key = DimDate2.DateKey
INNER JOIN DimDate AS DimDate3
    ON F.Date3Key = DimDate3.DateKey

しかし、それは明らかにデータ (Q2) SSAS がキューブに示しているものではありません。残念ながら、SSAS は Q1 Test-query によって返されたデータを示しています。したがって、Q1 はデータの小さなサブセットにすぎません。各 Date-Dimensions (Date1、Date2、Date3) に対応するメンバーを持つファクトのみが考慮されます。

なぜこれが起こるのかわかりません。これは非常に基本的なことなので、基本的には SSAS でうまくいくはずです。それに加えて、同じデータ ウェアハウス ソリューションの以前のバージョンでもうまく機能しました (ロールプレイングの日付ディメンションが既にありました)。

構成が間違っていると思います(プロパティに関係なく)。誰にもアイデアがありますか?

乾杯パトリック

4

1 に答える 1