web-dev-qa-db-ja.com

履歴データに基づいてキューブ内のテーブルを接続します

ですから、これは間違った場所であり、かなり基本的なように思えるかもしれませんが、私はキューブを構築するのは初めてなので、ご容赦ください。

次のような設定を想像してみてください。

CREATE TABLE [dbo].[Orders] (
    OrderNumber int,
    OrderDate smalldatetime,
    ProductNumber int,
    UnitPrice money,
    Qty int
)
CREATE TABLE [dbo].[Products] (
    ProductNumber int,
    ProductName varchar(30),
    CreatedDate smalldatetime,
    EndDate smalldatetime NULL
)

INSERT INTO Products VALUES (1,'My Product','1/1/2011','5/5/2011')
INSERT INTO Products VALUES (1,'My New Product','5/6/2011',NULL)
INSERT INTO Orders VALUES (1,'1/3/2011',1,1)
INSERT INTO Orders VALUES (2,'6/6/2011',1,1)

SELECT * FROM Orders o INNER JOIN Products p ON o.ProductNumber = p.ProductNumber AND o.OrderDate BETWEEN p.CreatedDate and p.EndDate

ご覧のとおり、私の製品番号は再利用されており、注文時に製品が何であったかを確認できる必要があります。 SQLを使用するのは簡単ですが、SSASでそれを考慮したキューブを構築しようとして問題が発生しています。

どんな助けでもいただければ幸いです。

3
Evan M.

まず、NULLの終了日を考慮していないため、クエリが正しく表示されません。最初にそれを修正して、両方のテーブルのビューがフラットになるようにします。

クエリが正しく機能するようになったら、それをDSVとして使用します。 DSVエディターで、そのクエリを「名前付きクエリ」として追加します。その名前付きクエリがキューブのソースになります。

そのビューからキューブが作成されたら、QTYとUnitPriceをメジャーとして追加します。表示する内容に応じて、ProductNumber、ProductName、CreatedDate、およびEndDateをディメンション属性として使用できます。重要な部分は、メジャーの取得元と同じ名前のクエリからディメンションを構築することです。

ここに重要な部分があります:ファクトとメジャーの設定が完了したら、キューブ編集ウィンドウの[ディメンションの使用法]タブに移動します。構成する関係は1つだけにする必要があります-それをファクトに設定します。

完了です。ここでは日付ディメンションが役立つ可能性がありますが、それはあなたの質問とは関係ありません。

2
Kenneth