0

Oracle BI ツールから探している結果を取得するために記述する必要がある正確な SQL はわかっていますが、Oracle BI を初めて使用するため、同じ結果を再現する方法を見つけるのに苦労しています。最終的な答えは BI データ モデルに大きく依存し、それには Stack Overflow での質問よりもはるかに多くのコミュニケーションが必要であることを認識しているため、シナリオに対する特定の決定的な答えよりも、より一般的なハウツーの答えを探しています。

おそらく、SQL は初心者に役立つでしょう。

select "All"."DT", ("LessThan5Mins"."Count" / "All"."Count") * 100 
from
(
    select to_char(m."EndDateTime", 'YYYY-MM') "DT", count(*) "Count"
    from "Measurement" m,
         "DwellTimeMeasurement" dtm
    where dtm."MeasurementBase_id" = m."Id"
    group by to_char(m."EndDateTime", 'YYYY-MM')
) "All",
(
    select to_char(m."EndDateTime", 'YYYY-MM') "DT", count(*) "Count"
    from "Measurement" m,
         "DwellTimeMeasurement" dtm
    where dtm."MeasurementBase_id" = m."Id"
    and m."MeasValue" <= 300
    group by to_char(m."EndDateTime", 'YYYY-MM')
) "LessThan5Mins"
where "All"."DT" = "LessThan5Mins"."DT";

これの目的は、5 分 (300 秒) 以下の滞留時間レコードの割合を返すことです。

上記のクエリの「MeasValue」フィールドを表すファクトがあります。

BI で上記のクエリの二重の結果セットの性質を再現する試みはすべて失敗しました。

上記はOBIEEで可能ですか?もしそうなら、どうすればこれを達成できますか?

4

1 に答える 1

3

Measurement (M) テーブルと DwellTimeMeasurement (DTM) テーブルを RPD の物理層にインポートし、DTM.MeasurementBase_id = M.Id で結合を指定してから、両方をプレゼンテーション層に持ち込んだと仮定しています。

その場合は、M.EndDateTime と DTM から任意の OBIEE メジャー列 (DTM.Amount など) をドラッグして、条件タブの Answers でこのクエリの作成を開始できます。DTM.Amount 列の数式を編集します。

列の数式を編集

下の青色で示されているフィルター ボタンをクリックして、列をフィルター処理します。

ここに画像の説明を入力

次のダイアログ ボックスで M.MeasValue をダブルクリックし、[以下] を選択して、[値] テキスト ボックスに 300 と入力します。[OK] を 2 回クリックすると、列の数式は次のようになります。

FILTER(DTM.Amount USING (M.MeasValue <= 300))

これを COUNT() でラップします。

COUNT(FILTER(DTM.Amount USING (M.MeasValue <= 300)))

これにより、M.MeasValue <= 300 のレコード数が得られます。この列の名前を「LessThan5Mins」に変更できます。[OK] をクリックして、新しい数式を保存します。DTM.Amount 列をもう一度ドラッグしますが、今回は COUNT() のみを実行します。

COUNT(DTM.Amount)

これにより、すべての滞留時間レコードのカウントが得られます。この名前を「すべて」に変更できます。最後に、DTM.Amount 列を最後にもう一度ドラッグして、式を再度編集します。ここで、次のような式でパーセンテージを計算します。

COUNT(FILTER(DTM.Amount USING (M.MeasValue <= 300))) / COUNT(DTM.Amount) * 100

したがって、最終的には、次のタイトルと数式を含む 4 つの列ができます。

TITLE            FORMULA
-----            --------
EndDateTime      M.EndDateTime
LessThan5Mins    COUNT(FILTER(DTM.Amount USING (M.MeasValue <= 300)))
All              COUNT(DTM.Amount)
% LessThan5Mins  COUNT(FILTER(DTM.Amount USING (M.MeasValue <= 300))) / COUNT(DTM.Amount) * 100

EndDateTime 列を含めると、レコードのグループ化が処理されることに注意してください。また、元のクエリに一致させるには、EndDateTime 列と % LessThan5Mins 列のみが必要ですが (他の列を非表示または除外できます)、OBIEE で列の値をフィルター処理するプロセスを示したいと思いました。

于 2013-05-21T14:39:06.620 に答える