5

多次元式の結果を除外する方法を理解するのに苦労しています。

これは私のデータベース スキーマです。

シンプルなデータベース スキーマ

そしてこれが私のデータです。

Manufacturer
╔════╦═══════════════════╗
║ Id ║       Name        ║
╠════╬═══════════════════╣
║  1 ║ Awesome Computers ║
║  2 ║ TailSpin Toys     ║
╚════╩═══════════════════╝

Item
╔════╦═════════╦════════════════╦═══════╗
║ Id ║  Name   ║ ManufacturerId ║ Stock ║
╠════╬═════════╬════════════════╬═══════╣
║  1 ║ PC      ║              1 ║    40 ║
║  2 ║ Server  ║              1 ║    10 ║
║  3 ║ STB     ║              2 ║    80 ║
║  4 ║ Console ║              2 ║    50 ║
╚════╩═════════╩════════════════╩═══════╝

Part
╔════╦══════════════════╦════════╦══════════╦═══════╗
║ Id ║       Name       ║ ItemId ║ StatusId ║ Stock ║
╠════╬══════════════════╬════════╬══════════╬═══════╣
║  1 ║ MBO              ║      1 ║        1 ║   100 ║
║  2 ║ Processor        ║      1 ║        1 ║   100 ║
║  3 ║ Server MBO       ║      2 ║        2 ║    20 ║
║  4 ║ Server processor ║      2 ║        2 ║    20 ║
║  5 ║ Main box         ║      3 ║        2 ║    40 ║
║  7 ║ Adapter          ║      3 ║        3 ║    30 ║
║  8 ║ Controller       ║      4 ║        2 ║    40 ║
║ 10 ║ Adapter          ║      4 ║        1 ║    60 ║
║ 11 ║ Memory card      ║      4 ║        2 ║    80 ║
╚════╩══════════════════╩════════╩══════════╩═══════╝

Status
╔════╦═════════════╗
║ Id ║    Name     ║
╠════╬═════════════╣
║  1 ║ No data     ║
║  2 ║ Available   ║
║  3 ║ Unavailable ║
╚════╩═════════════╝

すべてをテーブル モデル ソリューションにインポートしました。この後、次の 2 つのメジャーを作成しました。

  • テーブル アイテム: ItemStock:=SUM([在庫])
  • テーブル パーツ: PartStock:=SUM([在庫])

次に、キューブをサーバーにデプロイしました。

次の MDX クエリを実行すると...

SELECT 
    NON EMPTY { 
        [Part].[Name].CHILDREN
    } ON ROWS,
    { 
        [Measures].[PartStock]
    } ON COLUMNS
FROM [Model]
WHERE (
    {
        [Status].[Id].&[1]
    }
)

...この結果セットを取得します...

╔═══════════╦═══════════╗
║           ║ PartStock ║
╠═══════════╬═══════════╣
║ Adapter   ║        60 ║
║ MBO       ║       100 ║
║ Processor ║       100 ║
╚═══════════╩═══════════╝

...大丈夫です。

ただし、この MDX クエリを実行すると...

SELECT 
    NON EMPTY { 
        [Item].[Name].CHILDREN
    } ON ROWS,
    { 
        [Measures].[ItemStock]
    } ON COLUMNS
FROM [Model]
WHERE (
    {
        [Status].[Id].&[1]
    }
)

...この結果セットを取得しています...

╔═════════╦═══════════╗
║         ║ ItemStock ║
╠═════════╬═══════════╣
║ Console ║        50 ║
║ PC      ║        40 ║
║ Server  ║        10 ║
║ STB     ║        80 ║
╚═════════╩═══════════╝

ItemStock テーブルの項目は、多対多の関係としてPartテーブルによって除外されると予想していました。たとえば、MBO、プロセッサ、およびアダプタには項目 1 と 4 への参照があるため、結果はそれらに制限され、結果は次のようになります。

╔═════════╦═══════════╗
║         ║ ItemStock ║
╠═════════╬═══════════╣
║ Console ║        50 ║
║ PC      ║        40 ║
╚═════════╩═══════════╝

私は何を間違っていますか?

4

1 に答える 1

0

MDX は私には不明ですが、純粋な SQL の説明は次のとおりです。

あなたのモデルは実際には次のようになります:

画像へのリンク

特定の [ステータス] を持つ [パーツ] の [アイテム] を取得するには、次の純粋な SQL を使用します。

SELECT Item.Name
FROM Item INNER JOIN Part ON Item.Id = Part.ItemID
WHERE Part.StatusID = 1;

サンプルで FROM [Model] を使用していることがわかりますが、セットアップに Model という名前のテーブルがないため、これは VIEW または調べるべき MDX の機能である可能性があります。[モデル]ビューのテーブル間のJOINが間違っている可能性があります。

于 2016-01-06T19:52:10.997 に答える