2017-03-03 25 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