2013-05-20 16 views
0

我知道確切的SQL我需要編寫來檢索我要從Oracle BI工具中找到的結果,但是,由於我是Oracle BI新手,我是努力尋找重現相同結果的方法。我意識到最終的答案在很大程度上取決於商業智能數據模型,並且需要比堆棧溢出允許的問題多得多的通信,所以我正在尋找比我的場景的具體明確答案更通用的如何回答。OBIEE使用相同的文件夾/事實兩次聚合

也許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中,如果是這樣,我該如何實現這一目標?

回答

3

我假設您已經將Measurement(M)和DwellTimeMeasurement(DTM)表導入到RPD的物理層中,並在DTM.MeasurementBase_id = M.Id上指定了連接,然後將它們都導入到表示層。

如果是這樣,那麼您可以通過拖動M.EndDateTime和DTM中的任何OBIEE度量值列(例如DTM.Amount)在標準選項卡上的Answers中開始構建此查詢。通過點擊在下面藍色所示的過濾器按鈕

Edit column formula

過濾柱:編輯配方爲DTM.Amount柱。

enter image description here

在上M.MeasValue下面的對話框,雙擊,然後選擇「小於或等於」並鍵入300在值文本框中。單擊確定兩次,你的列公式現在應該是這個樣子:)

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。量)×100

所以最終你將有四列具有下列標題和公式:

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中過濾列值的過程。

相關問題