【问题标题】:OBIEE Sequence Data by DimensionsOBIEE 序列数据(按维度)
【发布时间】: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() 的组合,但我无法完全理解我所追求的,我正在寻找一种新的方法。

谢谢

【问题讨论】:

    标签: obiee


    【解决方案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")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-26
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 1970-01-01
        • 2019-04-11
        • 2023-04-04
        • 2017-03-17
        相关资源
        最近更新 更多