2017-03-03 53 views
1

第一個問題在這裏,所以請溫柔。我一直是一個潛伏者,並且認爲現在是參與進來的好時機。OBIEE序列數據的尺寸

使用Oracle OBIEE 12c,我正在尋找在結果數據集中爲一組維度的實例創建運行計數器,如果該組再次啓動,會重置該維度。像這樣 - 在下面的例子中,櫃檯會考慮客戶ID和狀態:

Cust ID, Order ID, Status, Counter 
111, 123456, APPROVED, 1 
111, 123457, APPROVED, 2 
111, 123458, APPROVED, 3 
111, 123459, DECLINED, 1 
111, 123460, APPROVED, 1 
111, 123461, APPROVED, 2 
222, 123462, APPROVED, 1 
222, 123463, APPROVED, 2 

任何想法?我已經嘗試了case語句和RSUM()的組合,但是我無法完全理解我之後的內容,並且正在尋找新的方法。

感謝

回答

0

你或許應該計算OBIEE外的櫃檯作爲提取/負載的一部分/轉換過程。 以下是在Oracle中使用ROW_NUMBER analytical function的近似值。

with dataset as (
SELECT 111 AS cust_id, 
    123456  AS order_id, 
    'APPROVED' AS status, 
    1   AS expected_counter 
FROM dual 
UNION ALL 
SELECT 111,123457,'APPROVED',2 FROM dual 
UNION ALL 
SELECT 111,123458,'APPROVED',3 FROM dual 
UNION ALL 
SELECT 111,123459,'DECLINED',1 FROM dual 
UNION ALL 
SELECT 111,123460,'APPROVED',1 FROM dual 
UNION ALL 
SELECT 111,123461,'APPROVED',2 FROM dual 
UNION ALL 
SELECT 222,1234562,'APPROVED',1 FROM dual 
UNION ALL 
SELECT 222,1234563,'APPROVED',2 FROM dual 
) 
select cust_id,order_id,status,expected_counter,row_number() over (partition by cust_id,status order by order_id asc) as counter from dataset ; 

結果是:

cust_id /order_id /status/your_counter/my_counter 
111 123456 APPROVED 1 1 
111 123457 APPROVED 2 2 
111 123458 APPROVED 3 3 
111 123460 APPROVED 1 4 
111 123461 APPROVED 2 5 
111 123459 DECLINED 1 1 
222 1234562 APPROVED 1 1 
222 1234563 APPROVED 2 2 

這個例子可以幫助你發現客戶111有5個是被拒絕批准的訂單和1;客戶222有2個批准的訂單。我無法匹配你的確切計數器。希望這有助於

0

在這會是某事像

RCOUNT OBIEE分析列公式語法(「訂單」,「狀態」的「客戶」。「卡斯特ID」)

1

我不是確定您希望如何訂購數據,這一點很重要。看起來您正在通過ORDER ID訂購。

您可以在分區中使用計數。雖然這可能不起作用,這取決於您的數據如何訂購。

SELECT CUSTID, ORDERID, STATUS, count(*) 
over (PARTITION BY CUSTID||STATUS ORDER BY ORDERID ROWS UNBOUNDED PRECEDING) COUNTER 
FROM MYTEST; 

您還可以使用LAG檢查行更改,例如:

SELECT CUSTID, ORDERID, STATUS, curr_row, prev_row 
    ,CASE WHEN curr_row != prev_row THEN 'Change' ELSE 'Same Group' END as TRACKER 
    FROM (
     SELECT CUSTID, ORDERID, STATUS, CUSTID||STATUS AS curr_row 
     ,LAG(CUSTID||STATUS) OVER (ORDER BY CUSTID, ORDERID, STATUS) AS prev_row 
     FROM MYTEST 
     ORDER BY ORDERID 
    ) 
    ; 

以上的例子是使用這組測試數據: Test Data

+1

的最佳解決方案使用解析函數。但是,如果此SQL錯誤,請確保存儲庫啓用了這些功能。它們可能不是RPD層的「功能交付」。 – cdabel