Converting Decode function in OBIEE

Hi Guru's
we are converting some BO reports to OBIEE and need to convert Decode function
Below is the Decode function they are using:
Decode ( sign(nvl(BOOKINGS_DATA_UDTC.qty_shipped,0)), 0,decode(BOOKINGS_DATA_UDTC.DELIVERY_NUMBER, 0,decode(BOOKINGS_DATA_UDTC.Schd_Ship_date_fk,to_date('1/1/1990','mm/dd/yyyy'),'Next Month Backlog',decode(sign(nvl(BOOKINGS_DATA_UDTC.Schd_Ship_date_fk, '01-JAN-90') -PAR.PAR_DATE), 1, 'Next Month Backlog', 'Current month will ship')) ,'Awaiting for collection') ,'MTD Shipped')
i have tried converting into case :
case when sign(IFNULL("BOOKINGS_DATA_UDTC"."Qty Shipped",0)) = 0 then (case when "BOOKINGS_DATA_UDTC"."Delivery Number" = 0 then (case when "BOOKINGS_DATA_UDTC"."SCHD_SHIP_DATE_FK" = '01-JAN-1990' then 'Next Month Backlog' else (case when Timestampdiff(SQL_TSI_DAY, cast('@{ParDate}{28-DEC-2012}' as Date),(case when "BOOKINGS_DATA_UDTC"."SCHD_SHIP_DATE_FK" IS NULL then CAst('01-JAN-1990' as DATE) else "BOOKINGS_DATA_UDTC"."SCHD_SHIP_DATE_FK" end)) > 1 then 'Next Month Backlog' else 'Current Month Will Ship' end) end) else 'Awaiting For Collection' end) else 'MTD Shipped' end
But it is not workign as expected.
Can some one please help me with this.
Thanks,

you can achieve it by using CASE WHEN condition END function in obiee. nested case also supported by obiee.
check the below link Decode Join  Condition in OBIEE RPD
Thanks
Jay.
Edited by: Jay on Apr 3, 2012 12:56 PM

Similar Messages

  • Applying decode function in obiee 11g

    DECODE(A.AC_CCY,'INR',DECODE(DRCR_IND,'D',-1,1)*A.LCY_AMOUNT,DECODE(DRCR_IND,'D',-1,1)*A.FCY_AMOUNT),
    DECODE(DRCR_IND,'D',-1,1)*A.LCY_AMOUNT,
    Can any one help me how to decode the above sql statement in obiee 11g.
    Edited by: 925104 on Apr 3, 2012 12:48 AM

    you can achieve it by using CASE WHEN condition END function in obiee. nested case also supported by obiee.
    check the below link Decode Join  Condition in OBIEE RPD
    Thanks
    Jay.
    Edited by: Jay on Apr 3, 2012 12:56 PM

  • How to convert rows into columns with decode function

    Hi,
    How to convert rows into columns with the help of decode function in oracle.
    thanks and regards
    P Prakash

    say
    col1 col2
    1 10
    2 20
    3 30
    then use
    select col1,
    sum(decode(col2,10,10)) "new1"
    sum(decode(col2,20,20))"new2"
    sum(decode(col2,30,30))"new3"
    from table_name
    group by col1;
    we used sum u can use ny function if wont u have to give the column name i.e col2 name also
    so i think u got it nw
    regards

  • Convert WHERE condition to OBIEE using available OBIEE function

    I have this WHERE condition which has to be attached to a Logical Table Source (Content Tab). This condition exists in my BO Universe and has to be applied to my OBIEE project.
    TRUNC(SYSDATE) >= NVL(QP.QP_LIST_LINES.start_date_active, TRUNC(SYSDATE))
    AND TRUNC(SYSDATE) < NVL(QP.QP_LIST_LINES.end_date_active,TRUNC(SYSDATE)+1)
    Using the functions in OBIEE, I ended up with this WHERE condition but seems not to work because when I compared the results, they are different.
    CURRENT_DATE >= IFNULL(ABCDE."Price List Lines"."Item Start Date", CURRENT_DATE ) AND CURRENT_DATE < IFNULL(ABCDE."Price List Lines"."Item End Date", CURRENT_DATE + 1)
    Please help me correct this.
    Thank you in advance.
    Message was edited by:
    user595459

    Hi, The TIMESTAMPADD function helped. I will take note of this. It's now working but noticed the performance (generating the report) is taking a long time. Would appreciate your advice. Thanks.

  • Error while replacing IF statements with DECODE function in procedure

    Hi All,
    I have created a procedure which has nested IF statements. Now I want to replace the IF statements with DECODE functions to improve performance.
    Procedure:
    IF (var_int_sev = '0')
    THEN
    var_sev := '2';
    ELSE
    SELECT sev
    INTO var_int_sev
    FROM errorconfig
    WHERE errorcode = var_errorcode;
    var_sev := var_int_sev;
    END IF;
    I converted the above IF statement into DECODE function as mentioned below:
    var_Sev := DECODE(var_int_sev,0,2,SELECT severity FROM errorconfig WHERE errorcode=var_ErrorCode)
    But it throws below error at the select statement used inside DECODE.
    Error(58,51): PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ( - + case mod new not null others <an identifier> <a double-quoted delimited-identifier> <a bind variable> avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date <a string literal with character set specification> <a number> <a single-quoted SQL string> pipe <an alternatively-quoted string literal with character set specification> <an alternativ
    Can someone help me in converting the IF to DECODE in the above case. Also how can we use a select statement inside decode.

    instead of trying to rewrite all your code and hoping that the performance will be better, it's a better option to investigate and find out which part of your application is slow
    read this:
    When your query takes too long ...

  • Help on Decode function in Toplink

    Hi,
    I have a sql statement like this:
    select field1, field2 from table1 where upper(field1) like 'ADELPHI%'
    order by field1,
    DECODE(TO_CHAR(NVL(LENGTH(TRANSLATE(field1,'A1234567890','A')),0)),'0',LPAD(field1 ,50),field1)
    How would I converted this to toplink query?
    I appreciate any help you guys can extend to me.

    I just spent about a half hour writing a response here, and the damned forum timed out on me. #$^!@$#!^!@$%.
    Here is the summary:
    - Using TL Expressions and EJBQL are to allow Java developers who don't necessarily know SQL to write queries and to facilitate portability/maintainability of the apps. For REALLY gnarly queries, using TL Expressions or EJBQL won't buy you this. I.e., SQL is more expressive and easier for this kind of quer, so it's not easier to use, and frankly with the code needed to support it, it won't be easier to maintain or port... Bottom line, maybe SQL is the best option here?
    - If you want to experiment, search for TO_CHAR on this forum, and the decode function in the javadoc. You need to build the expressions in pieces and you can treat expressions as arguments to other expressions -- in other words, you can build an expression like builder.leftPad(50, builder.get("field1")) and use it as one of the key/values in the hashtable to the decode function (in theory).
    - Don

  • Decode Function issue

    Hi all,
    i want compare two rows in a table. so i used decode function to compare the values, whether its matched or not.
    One of my table column has Long data type.
    Decode(a.col1,b.col1,'Match','NotMatch')
    col1 - is long data type.
    when i use long data type, i got below error,
    is there anyway to rectify this error.
    SQL Error: ORA-00932: inconsistent datatypes: expected NUMBER got LONG
    00932. 00000 - "inconsistent datatypes: expected %s got %s"
    Thanks in advance.
    Regards,
    Santhosh

    >
    You can't use ANY function on a LONG column. This restriction is not limited to DECODE.
    >
    Not quite correct.
    You can use TO_LOB on a LONG column but only in the select list of a subquery in an INSERT statement.
    See TO_LOB in the SQL Language doc
    http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions205.htm#SQLRF06134
    >
    TO_LOB converts LONG or LONG RAW values in the column long_column to LOB values. You can apply this function only to a LONG or LONG RAW column, and only in the select list of a subquery in an INSERT statement.
    Before using this function, you must create a LOB column to receive the converted LONG values. To convert LONG values, create a CLOB column. To convert LONG RAW values, create a BLOB column.
    You cannot use the TO_LOB function to convert a LONG column to a LOB column in the subquery of a CREATE TABLE ... AS SELECT statement if you are creating an index-organized table. Instead, create the index-organized table without the LONG column, and then use the TO_LOB function in an INSERT ... AS SELECT statement.
    You cannot use this function within a PL/SQL package. Instead use the TO_CLOB or TO_BLOB functions.

  • Suggestion on decode function

    DECODE(pc.prtyp_refno,4053,0,201979,0,201980,0,205495,0,201982,0,201981,0,1) = 0
    could some body explain me what this exactly it means ,does pc.prtyp_refno is in the numbers provided or it should not be in the numbers given
    Many thanks in advance

    Hi,
    Decode function compares column values to the specified list of possible values.
    I suggest SQL Reference book.
    This is what I found there:
    DECODE compares expr to each search value one by one. If expr is equal to a
    search, then Oracle returns the corresponding result. If no match is found, then
    Oracle returns default. If default is omitted, then Oracle returns null.
    If expr and search contain character data, then Oracle compares them using
    nonpadded comparison semantics. expr, search, and result can be any of the
    datatypes CHAR, VARCHAR2, NCHAR, or NVARCHAR2. The string returned is of
    VARCHAR2 datatype and is in the same character set as the first result parameter.
    Oracle automatically converts expr and each search value to the datatype of the
    first search value before comparing. Oracle automatically converts the return
    value to the same datatype as the first result. If the first result has the datatype
    CHAR or if the first result is null, then Oracle converts the return value to the
    datatype VARCHAR2.
    Of course there is much more information :)
    Peter D.

  • How to convert Oracle function in UDB

    Hi ,
    i am writing this function in oracle.Could you please convert this function in UDB because i am new in this and dont know how to use decode function in UDB
    Please following is the code for oracle.
    CREATE OR REPLACE function fun ( localex varchar2,titlex varchar2)
    return number
    as x number;
    begin
    select sum ( decode (count (username),max(prereq_count),1,0) ) x into x from
    SELECT
    prereq_count,
    username
    FROM
    table1
    group by username ;
    return x;
    end fun;
    Regards
    Vishal

    First, you posted in the wrong forum for UDB, this is DB2 on z/OS
    Secondly, your question is not SAP related (at least I can't see that).
    Thirdly, you posted the same question for SQL-Server:
    want to convert function in SQL Server 2000
    Markus

  • Converting MDX queries to OBIEE 11g

    How can I convert MDX queries to OBIEE queries. Im migrating Hyperion/Brio reports to OBIEE 11g reports.

    You can always plug in your cubes as datasources into OBIEE and then create the analyses using Answers.
    A direct MDX-to-"OBIEE" path only exist if you copy your MDX queries and paste them into a direct database request which uses a conncetion pool pointing towards your cube. That said...you will miss out on a lot of vanilla functionality if you do this.
    Cheers,
    C.

  • Logical Operations in SQL decode function ?

    Hi,
    Is it possible to do Logical Operations in SQL decode function
    like
    '>'
    '<'
    '>='
    '<='
    '<>'
    not in
    in
    not null
    is null
    eg...
    select col1 ,order_by,decode ( col1 , > 10 , 0 , 1)
    from tab;
    select col1 ,order_by,decode ( col1 , <> 10 , 0 , 1)
    from tab;
    select col1 ,order_by,decode ( col1 , not in (10,11,12) , 0 , 1)
    from tab;
    select col1 ,order_by,decode ( col1 ,is null , 0 , 1)
    from tab;
    Regards,
    infan
    Edited by: user780731 on Apr 30, 2009 12:07 AM
    Edited by: user780731 on Apr 30, 2009 12:07 AM
    Edited by: user780731 on Apr 30, 2009 12:08 AM
    Edited by: user780731 on Apr 30, 2009 12:08 AM
    Edited by: user780731 on Apr 30, 2009 12:09 AM

    example:
    select col1 ,order_by,case when col1 > 10 then 0 else 1 end
    from tab;
    select col1 ,order_by,case when col1 &lt;&gt; 10 then 0 else 1 end
    from tab;
    select col1 ,order_by,case when col1 not in (10,11,12) then 0 else 1 end
    from tab;As for testing for null, decode handles that by default anyway so you can have decode or case easily..
    select col1 ,order_by,decode (col1, null , 0 , 1)
    from tab;
    select col1 ,order_by,case when col1 is null then 0 else 1 end
    from tab;

  • SQL Expression in decode function or case statement?

    Can I put SQL expressions in decode function or case statement?
    For example,
    select le.profile, decode( select count(1) from profile_data where NAME= 'XXXX_AFTER' and object_id = le.profile, 0, 'N', 'Y')
    from element le;
    or
    select le.profile, case WHEN ( select count(1) from profile_data where NAME= 'XXXX_AFTER' and object_id = le.profile) = 0 THEN 'N'
    ELSE 'Y'
    from element le;
    None of the above work.
    Can anyone tell me how to make it work?
    Is there any workaround?
    Thanks,
    J

    You simply needed and END to your CASE statement;
    SQL> with profile_data as (
       select 'XXXX_AFTER' name, 1 object_id from dual),
         element as (
       select 1 profile from dual union all
       select 2 from dual)
    select le.profile,
       case WHEN ( select count(1) from profile_data where NAME= 'XXXX_AFTER' and object_id = le.profile) = 0
       THEN 'N'
       ELSE 'Y'
       END new_col
    from element le
       PROFILE N
             1 Y
             2 N

  • SQL DECODE function

    Oracle version: 9.2.0.1.0
    Procob version: 9.2.0.1.0
    Cobol version: 3.1.11
    O.S. version: Windows XP
    We have a pro*cobol file with the next conversion rule into a select defined with a cursor.
    NVL(TO_CHAR(A.F_ALTA,'YYYYMMDD'),' '),     
    NVL(TO_CHAR(A.F_ESTADO,'YYYYMMDD'),' '),
    we store the result data through a fetch of the cursor into two variables (W-F-ALTA and W-F-ESTADO) When the program executes an insert of these two values in a target table, we define the next conversion rule:
    TO_DATE(DECODE(:W-F-ALTA,' ',NULL,:W-F-ALTA),'YYYYMMDD'),
    TO_DATE(DECODE(:W-F-ESTADO,' ',NULL,:W-F-ESTADO),'YYYYMMDD')
    Pro*Cobol and Cobol does not have errors when we precompile and compile the program but, when we execute the generated exe file, Oracle displays the next error:
    ORA-01841 (full) year must be between -4713 and +9999, and not be 0
    We think that the DECODE function is not understood by the cobol or pro*cobol interpreter. If we execute the same code without the DECODE function (only with TO_DATE function) there is no errors in the execution of the program
    somebody knows if there are reported problems with this DECODE function in Pro*Cobol or Cobol and how to solve them?
    Thanks

    TO_DATE(DECODE(:W-F-ALTA,' ',NULL,:W-F-ALTA),'YYYYMMDD'),
    TO_DATE(DECODE(:W-F-ESTADO,' ',NULL,:W-F-ESTADO),'YYYYMMDD')The problem is with the input values of :W-F-ALTA and :W-F-ESTADO. Using the first line as an example, what you are saying is if :W-F-ALTA is ' ', substitute it with NULL, any other value should be :W-F-ALTA, then output the TO_DATE value of whatever the result is.
    So if the value of :W-F-ALTA is the wrong charater or in the wrong input format, TO_DATE function does not understand it.
    See examples of success and failures below with your Bind variables substituted with typical values.
    SQL> select TO_DATE(DECODE(' ',' ',NULL,'20060830'),'YYYYMMDD') from dual;
    TO_DATE(D
    SQL> select TO_DATE(DECODE('1999-01-01',' ','NULL','20060830'),'YYYYMMDD') from dual;
    TO_DATE(D
    30-AUG-06
    SQL> select TO_DATE(DECODE('SHOULD_ERROR',' ','NULL','SHOULD_ERROR'),'YYYYMMDD') from dual;
    select TO_DATE(DECODE('SHOULD_ERROR',' ','NULL','SHOULD_ERROR'),'YYYYMMDD') from dual
    ERROR at line 1:
    ORA-01841: (full) year must be between -4713 and +9999, and not be 0
    SQL> select TO_DATE(DECODE('20060830',' ','NULL','20060830'),'YYYYMMDD') from dual;
    TO_DATE(D
    30-AUG-06
    SQL> select TO_DATE(DECODE('12345678',' ','NULL','12345678'),'YYYYMMDD') from dual;
    select TO_DATE(DECODE('12345678',' ','NULL','12345678'),'YYYYMMDD') from dual
    ERROR at line 1:
    ORA-01843: not a valid month
    SQL>

  • Problem using DECODE() function with a Query of Queries

    I
    posted
    on my blog about an issue I was having trying to use the PL/SQL
    DECODE() function with a Coldfusion Query of Queries. This function
    works fine when you query a database for information. However, when
    you query another query, it seems that CF doesn't recognize it. I
    got errors stating that it found a left parenthesis where it
    expected a FROM key word. Here is a simplified version of what I am
    trying to do:
    quote:
    <!--- Simulated query; similar to what I was calling from
    my database --->
    <cfscript>
    qOriginal = queryNew("Name,Email,CountryCode",
    "VarChar,VarChar,VarChar");
    newRow = queryAddRow(qOriginal, 5);
    querySetCell(qOriginal, "Name", "Joe", 1);
    querySetCell(qOriginal, "Email", "[email protected]", 1);
    querySetCell(qOriginal, "CountryCode", "AMER", 1);
    querySetCell(qOriginal, "Name", "Sally", 2);
    querySetCell(qOriginal, "Email", "[email protected]", 2);
    querySetCell(qOriginal, "CountryCode", "AMER", 2);
    querySetCell(qOriginal, "Name", "Bob", 3);
    querySetCell(qOriginal, "Email", "[email protected]", 3);
    querySetCell(qOriginal, "CountryCode", "ASIA", 3);
    querySetCell(qOriginal, "Name", "Mary", 4);
    querySetCell(qOriginal, "Email", "[email protected]", 4);
    querySetCell(qOriginal, "CountryCode", "EURO", 4);
    querySetCell(qOriginal, "Name", "John", 5);
    querySetCell(qOriginal, "Email", "[email protected]", 5);
    querySetCell(qOriginal, "CountryCode", "EURO", 5);
    </cfscript>
    <cfquery name="qCountries" dbtype="query">
    SELECT DISTINCT(CountryCode) AS CountryCode,
    DECODE(states, "AMER", "North America &amp; Canada",
    "EURO", "Europe &amp; Africa", "ASIA", "Japan &amp;
    Asia","") CountryName
    FROM qOriginal
    ORDER BY CountryCode
    </cfquery>
    <cfdump var="#qCountries#">
    <!--- ========== END OF CODE ========== --->
    So running this returned the following error:
    Query Of Queries syntax error.
    Encountered "(. Incorrect Select Statement, Expecting a
    'FROM', but encountered '(' instead, A select statement should have
    a 'FROM' construct.
    Does anybody know why this doesn't work? Is it just not
    supported? Please note that I have also tried to use the CASE()
    function instead of DECODE() and that resulted in basically the
    same error. For now I an looping over my distinct query with a
    switch statement and manually loading a new query with the data how
    I want it. But it would be a lot cleaner and less code to have the
    DECODE() to work. Thx!

    DECODE() is an Oracle function, not generic SQL. Q-of-Q is a
    very limited subset of SQL and lacks many functions and clauses
    available in standard SQL, especially what you may be used to using
    in your particular RDBMS.
    See
    Query
    of Queries user guide
    Phil

  • Regarding decode function

    Hi all,
    i want to know abt decode function in oracle-sql
    i..e passing the parameters in decode using decode using ":" bind parameter
    select JOB, decode(:j,'CLERK','MANAGER','ANALYST','EXEC',JOB) FROM EMP;
    i declared the j variable in sql environment
    VARIABLE J VARCHAR2(20);
    i exec the query
    and passed as the clerk as input parameter
    but iam getting the o/p as
    JOB DECODE(:J
    MANAGER MANAGER
    MANAGER MANAGER
    MANAGER MANAGER
    SALESMAN SALESMAN
    SALESMAN SALESMAN
    SALESMAN SALESMAN
    CLERK CLERK
    SALESMAN SALESMAN
    ANALYST ANALYST
    CLERK CLERK
    ANALYST ANALYST
    JOB DECODE(:J
    CLERK CLERK
    12 rows selected.
    SQL> PRINT J;
    J
    im not getting o/p
    so please hlelp me only : should be used not &
    this is my first thread.
    execuse me if any mistakes
    tons of thanks in advance to all

    SORRY DAVE,ROD FOR NOT BEING CLEAR,
    IAM WORKING WITH EMP TABLE THE DATA IN IT IS LIKE THIS
    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
    7782 CLARK MANAGER 7839 09-JUN-81 2450 10
    7566 JONES MANAGER 7839 02-APR-81 2975 20
    7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
    7499 chaitu SALESMAN 7698 20-FEB-81 1600 300 10
    7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
    7900 JAMES CLERK 7698 03-DEC-81 950 30
    7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
    7902 FORD ANALYST 7566 03-DEC-81 3000 20
    7369 SMITH CLERK 7902 17-DEC-80 800 20
    7788 SCOTT ANALYST 7566 09-DEC-82 3000 20
    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
    7876 ADAMS CLERK 7788 12-JAN-83 1100 20
    AND I USED DECODE FUNCTION
    select JOB BEFOREPROMOTION, decode(job,'CLERK','MANAGER','ANALYST','EXEC') PROMOTION FROM EMP
    BEFOREPRO PROMOTI
    MANAGER
    MANAGER
    MANAGER
    SALESMAN
    SALESMAN
    SALESMAN
    CLERK MANAGER
    SALESMAN
    ANALYST EXEC
    CLERK MANAGER
    ANALYST EXEC
    I..E ALL THE CLERKS TO MANAGERS AND SAME THING WITH ANALYST
    OK
    NOW I WILL SHOW U ANOTHER QUERY
    select job,decode(job,'CLERK','MANAGER','ANALYST','EXEC',JOB) FROM EMP where job=&job;
    Enter value for job: 'CLERK'
    old 1: select job,decode(job,'CLERK','MANAGER','ANALYST','EXEC',JOB) FROM EMP where job=&job
    new 1: select job,decode(job,'CLERK','MANAGER','ANALYST','EXEC',JOB) FROM EMP where job='CLERK'
    JOB DECODE(JO
    CLERK MANAGER
    CLERK MANAGER
    CLERK MANAGER
    HERE OBSERVE THAT I PASSED JOB ='CLERKS AS PARAMETER AFTER EXECUTING THE QUERY
    IT ASKED LIKE THIS AND SHOWED THE REPLACED VALUES
    Enter value for job: 'CLERK'
    AS SHOWN ABOVE
    FOR THIS TO PASS VALUE
    IN TO THE QUERY BY USING AMPERSAND('&')
    TO TAKE INPUT AS CLERK
    IT CHECKED AND RETURNED THE VALUE
    IN THE SIMILAR WAY CAN I USE ":" COLON
    TO PASS PARAMETERS
    IN TO THE QUERY
    CAN I USE IT
    REGARDS,
    PHANI
    Edited by: user10652894 on Nov 26, 2008 3:24 AM

Maybe you are looking for