3

MDX で計算されるメンバーを定義する必要があります (これは SAS OLAP ですが、とにかくさまざまな OLAP 実装を使用している人々からの回答をいただければ幸いです)。

新しいメジャーの値は、追加のフィルター条件を適用して、既存のメジャーから計算する必要があります。例でより明確になると思います:

  • 既存のメジャー: 「総トラフィック」
  • 既存のディメンション: "方向" ("イン" または "アウト")
  • 計算されたメンバー「着信トラフィック」を作成する必要があります。これは、追加のフィルター (方向 = 「受信」) を使用して「総トラフィック」に等しくなります。

問題は、私が MDX を知らないことと、スケジュールが非常にタイトであることです (初心者の質問で申し訳ありません)。私が思いつくことができる最高のものは次のとおりです。

([Measures].[Total traffic], [Direction].[(All)].[In])

特定の方向を持つセルを除いて、これはほとんど機能します:

例

したがって、Direction の「組み込み」フィルターが独自のフィルターでオーバーライドされているように見えます)。「組み込み」フィルターと独自のフィルターの交差点が必要です。私[Direction].[(All)].[In]の直感は、評価されるセルの固有の座標と交差することに関係しているということでしたが、最初に主題を読まずに何が必要かを知るのは難しいです:)

【追記】結局こうなりました

IIF([Direction].currentMember = [Direction].[(All)].[Out],
    0,
    ([Measures].[Total traffic], [Direction].[(All)].[In])
)

..しかし、少なくともSAS OLAPでは、これにより、基礎となるデータセットに対して([in]の値を計算するために)余分なクエリが実行されるため、最終的には使用しませんでした。

4

2 に答える 2

8

まず、MDXで新しい計算されたメジャーを定義し、別のメジャーの値を使用するように指示できますが、フィルターが適用されます。

WITH MEMBER [Measures].[Incoming Traffic] AS
'([Measures].[Total traffic], [Direction].[(All)].[In])'

レポートに新しいメジャーを表示するときは常に、方向ディメンションが使用されているかどうかに関係なく、「方向>入力」のフィルターがあるかのように動作します。

しかし、あなたの場合、使用時に方向ディメンションが優先されるようにしたいので、物事は少し厄介になります。このディメンションが使用されているかどうかを検出し、それに応じて行動する必要があります。

WITH MEMBER [Measures].[Incoming Traffic] AS
'IIF([Direction].currentMember = [Direction].[(All)].[Out],
    ([Measures].[Total traffic]),
    ([Measures].[Total traffic], [Directon].[(All)].[In])
)'

ディメンションが使用されているかどうかを確認するために、現在のセルがOUTを使用しているかどうかを確認します。その場合、合計トラフィックをそのまま返すことができます。そうでない場合は、タプルでINを使用するように指示できます。

于 2008-10-14T12:16:59.803 に答える
1

IN/OUT 表示用の Total Traffic ファクト テーブルに列を配置し、IN および OUT 値用の Dim テーブルを作成する必要があると思います。その後、IN & OUT に基づいてデータを分析できます。

于 2011-01-12T09:55:55.757 に答える