2017-03-03 1 views
1

Première question ici, alors s'il vous plaît soyez doux. Je suis un rôdeur depuis longtemps et je me suis dit que c'était un bon moment pour participer. En utilisant Oracle OBIEE 12c, je cherche à créer un compteur en cours d'exécution dans mon jeu de données de résultat pour les instances d'un groupe de dimensions, qui se réinitialisent si le groupe redémarre. Comme ceci - dans l'exemple ci-dessous le compteur considérerait Cust ID et Statut:OBIEE Données de séquence par dimensions

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 

Des idées? J'ai essayé une combinaison de déclarations de cas et de RSUM(), mais je n'arrive pas à comprendre ce que je veux et je cherche une nouvelle approche.

Merci

Répondre

0

Vous devriez probablement calculer le compteur en dehors de OBIEE dans le cadre de l'extrait/charge/processus de transformation. Voici une approximation utilisant le ROW_NUMBER analytical function dans Oracle.

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 ; 

Le résultat est:

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 

Cet exemple vous aide à savoir que le client 111 a 5 commandes approuvées et 1 qui a été refusée; le client 222 a 2 commandes approuvées. Je ne pouvais pas correspondre à votre compteur exact. Espérons que cela aide

0

Dans la colonne d'analyse OBIEE syntaxe de formule qui SERAIS STH comme

RCOUNT ("Ordres". "Statut" par "clients". "Cust ID")

1

Je ne suis pas Assurez-vous de la façon dont vous voulez que vos données soient commandées, ce qui compte. Il semble que vous commandez par ID DE COMMANDE.

Vous pouvez utiliser un nombre avec le partitionnement. Bien que cela puisse ne pas fonctionner selon la façon dont vos données sont commandées.

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

Vous pouvez également utiliser LAG pour vérifier les changements de ligne, par exemple:

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 
    ) 
    ; 

Les exemples ci-dessus utilisent cet ensemble de données de test: Test Data

+1

solution Great utilisant des fonctions analytiques. Mais si ces erreurs SQL, assurez-vous que le Repository a ces fonctions activées. Ils peuvent ne pas être "fonction-livrable" à la couche RPD. – cdabel