OBIEE 序列数据(按维度)

Posted

技术标签:

【中文标题】OBIEE 序列数据(按维度)【英文标题】:OBIEE Sequence Data by Dimensions 【发布时间】:2017-03-03 16:34:18 【问题描述】:

这里的第一个问题,所以请温柔。我已经潜伏了很长时间,并且认为现在是参与其中的好时机。

使用 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() 的组合,但我无法完全理解我所追求的,我正在寻找一种新的方法。

谢谢

【问题讨论】:

【参考方案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

【讨论】:

使用分析函数的绝佳解决方案。但如果此 SQL 错误,请确保 Repository 已启用这些功能。它们可能不是“功能可交付”到 RPD 层的。【参考方案2】:

作为提取/加载/转换过程的一部分,您可能应该在 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 个已批准的订单。我无法匹配您的确切计数器。希望这会有所帮助

【讨论】:

【参考方案3】:

在 OBIEE 分析列公式语法中会像

RCOUNT("Orders"."Status" by "Customers"."Cust ID")

【讨论】:

以上是关于OBIEE 序列数据(按维度)的主要内容,如果未能解决你的问题,请参考以下文章

横截面数据时间序列数据面板数据

厘清指标维度,截面数据时间序列数据以及面板数据

将时间序列数据存储在具有可扩展时间维度的 HDF5 中

使用 Keras 维度误差的 CNN-1D(Seq2 点)时间序列预测

Python生成连续星期序列

使用 Keras、Tensorflow 进行具有多个时间序列维度的 RNN 时间序列预测