0

そのため、トランザクション ライフサイクル モデル (または累積ファクト スナップショット テーブル) に基づく Sales Fact テーブルがあり、非常に多くの異なる日付キー列 (販売日、返金日など) があります。日付列ごとに異なるメジャーを作成しました。つまり、空でない販売日のキー列の合計は [販売数] であり、空でない払い戻し日のキー列の合計は [払い戻しの数] などです。の日付キー列が異なる日付キー ディメンションに関連付けられています。販売日ディメンションと返金日ディメンションはロール プレイング ディメンションであり、すべて同じ DimDate テーブルに基づいています。日付に基づかないディメンションは他にもありますが、この例のために単純にしておきます - storeType (小売、e コマースなど) には別の追加ディメンションがあります。

キューブをブラウズすると (ほとんどのユーザーは Excel でキューブをブラウズして探索するため)、[販売数] と [返金数] を列セクションにドラッグし、次に StoreType ディメンションを行セクションにドラッグできます。 、データを次のように適切に表示します。


                 Number of Sales   Number of Refunds
----------------------------------------------------
Retail           10                8
eCommerce        5                 2

これは問題ありません。日付フィルターを適用していないため、すべてが表示されます。ファクト テーブルのデータを確認しましたが、確かに数値は正しいです。

しかし、[販売数] と [返金数] の両方に同じ日付フィルターを適用したいので、両方のディメンションをフィルター領域にドラッグし、同じ日付フィルターを両方に適用します。数値は両方の列ですべて同じです。


                 Number of Sales   Number of Refunds
----------------------------------------------------
Retail           5                 4
eCommerce        5                 4

..両方の日付ディメンションに1つの日付を効果的に適用することで、同じ行のセットにフィルターダウンしていると思うため(同じテーブルからのものであるため)。Fact テーブルから個々の行をクエリして、それらが異なる値を持っていることを確認できるため、これが正しくないことはわかっています。

基本的には、2 つの列を一緒に表示したいのですが、実際には共通点はありません。各列に 2 つの異なる日付フィルターを設定することもできます。つまり、2010 会計年度のすべての売上を表示し、2011 会計年度のすべての払い戻しを表示します。これも、ユーザーが完全に閲覧できるため、測定値を使用できるようにする必要があります。複雑な MDX クエリを実行します。

別のファクト テーブルを作成して、同じデータをトランザクション ファクト テーブルに格納し、それを個別にカウントできると思いますが、多かれ少なかれ同じものをカウントするために 2 つの別個のファクト テーブルを用意しても意味がありません。

これを行う方法はありますか?ヘルプ!!

4

1 に答える 1

0

集計列に case ステートメントを適用する必要があるようです。これに沿った何か:

SELECT StoreType
     , SUM(CASE WHEN SalesCol IS NOT NULL THEN 1 ELSE NULL END) AS NumSales
     , SUM(CASE WHEN RefundCol IS NOT NULL THEN 1 ELSE NULL END) AS NumRefunds
FROM FactTable
WHERE SaleDate BETWEEN Date1 AND Date2
GROUP BY 1
于 2011-09-25T16:53:18.047 に答える