1) First Day of the Previous Year
-------------------------------------------
TIMESTAMPADD( SQL_TSI_YEAR , -1, TIMESTAMPADD( SQL_TSI_DAY , EXTRACT( DAY_OF_YEAR FROM CURRENT_DATE) * -(1) + 1, CURRENT_DATE))
From right to left the first TIMESTAMPADD returns the first day of the current year. The second TIMESTAMPADD removes a year from the returned date for the First Day of the Previous Year.
2) First Day of the Current Year
----------------------------------
TIMESTAMPADD( SQL_TSI_DAY , EXTRACT( DAY_OF_YEAR FROM CURRENT_DATE) * -(1) + 1, CURRENT_DATE)
This calculation returns the first day of the year by deducting one less than the total number of days in the year.
3) First Day of the Next Year
---------------------------------------
TIMESTAMPADD( SQL_TSI_YEAR , 1, TIMESTAMPADD( SQL_TSI_DAY , EXTRACT( DAY_OF_YEAR FROM CURRENT_DATE) * -(1) + 1, CURRENT_DATE))
From right to left the first TIMESTAMPADD returns the first day of the current year. The second TIMESTAMPADD adds a year to the date returned which will give the first day of the next year.
4) First Day of the Previous Month
-----------------------------------
TIMESTAMPADD(SQL_TSI_MONTH, -1, TIMESTAMPADD( SQL_TSI_DAY , DAYOFMONTH( CURRENT_DATE) * -(1) + 1, CURRENT_DATE))
From right to left the first TIMESTAMPADD returns the first day of the Current Month. The second TIMESTAMPADD then subtracts one month from the first day of the Current Month arriving to the First Day of the previous month.
5) First Day of the Current Month
--------------------------------------------
TIMESTAMPADD( SQL_TSI_DAY , DAYOFMONTH( CURRENT_DATE) * -(1) + 1, CURRENT_DATE)
This expression gets the current day of the month and subtracts one less than the current day to arrive at the first day of the month.
6) First Day of the Next Month
-------------------------------------
TIMESTAMPADD(SQL_TSI_MONTH, 1, TIMESTAMPADD( SQL_TSI_DAY , DAYOFMONTH( CURRENT_DATE) * -(1) + 1, CURRENT_DATE))
From right to left the first TIMESTAMPADD returns the first day of the Current Month. The second TIMESTAMPADD then adds one month from the first day of the Current Month arriving to the First Day of the next month.
7) First Day of Current Quarter
---------------------------------------
TIMESTAMPADD( SQL_TSI_DAY , DAY_OF_QUARTER( CURRENT_DATE) * -(1) + 1, CURRENT_DATE)
This was included to show the calculations discussed above can be used with other functions. This is the same expression as the one that returns the first day of the current month except this one uses the DAY_OF_QUARTER property to return the first day of the current quarter.
8) Last Day of the Previous Month
--------------------------------------------------
TIMESTAMPADD( SQL_TSI_DAY , -(1), TIMESTAMPADD( SQL_TSI_DAY , DAYOFMONTH( CURRENT_DATE) * -(1) + 1, CURRENT_DATE))
From right to left the first TIMESTAMPADD returns the first day of the Current Month. The second TIMESTAMPADD subtracts a month to arrive at the first day of the previous month.
9) Last Day of Current Month
---------------------------------------
TIMESTAMPADD( SQL_TSI_DAY , -(1), TIMESTAMPADD( SQL_TSI_MONTH , 1, TIMESTAMPADD( SQL_TSI_DAY , DAYOFMONTH( CURRENT_DATE) * -(1) + 1, CURRENT_DATE)))
From right to left the first TIMESTAMPADD finds the first day of the current Month. The second TIMESTAMPADD adds one month to the date to arrive at the first day of the next month. The final TIMESTAMPADD subtracts one day from the returned date to arrive at the last day of the Current Month.
10) Last Day of the Next Month
-----------------------------------------
TIMESTAMPADD( SQL_TSI_DAY , -(1), TIMESTAMPADD( SQL_TSI_MONTH , 2, TIMESTAMPADD( SQL_TSI_DAY , DAYOFMONTH( CURRENT_DATE) * -(1) + 1, CURRENT_DATE)))
From right to left the first TIMESTAMPADD finds the first day of the current Month. The second TIMESTAMPADD adds two months to the date to arrive at the first day of month after next. The final TIMESTAMPADD subtracts one day from the returned date to arrive at the last day of the Next Month.
11) Last Day of Previous Year
------------------------------------------
TIMESTAMPADD( SQL_TSI_DAY , -1, TIMESTAMPADD( SQL_TSI_DAY , EXTRACT( DAY_OF_YEAR FROM CURRENT_DATE) * -(1) + 1, CURRENT_DATE))
From right to left the first TIMESTAMPADD returns the first day of the current year. The second TIMESTAMPADD subtracts one day to arrive at December 31st of the previous year.
12) Last Day of Current Year
------------------------------------------
TIMESTAMPADD(SQL_TSI_YEAR, 1, TIMESTAMPADD( SQL_TSI_DAY , -1, TIMESTAMPADD( SQL_TSI_DAY , EXTRACT( DAY_OF_YEAR FROM CURRENT_DATE) * -(1) + 1, CURRENT_DATE)))
From right to left the first TIMESTAMPADD returns the first day of the current year. The second TIMESTAMPADD deducts one day to arrive at December 31 of the previous year. The third TIMESTAMPADD adds a single year to the date to arrive at December 31 of the Current Year.
13) Last Day of the Next Year
----------------------------------------
TIMESTAMPADD(SQL_TSI_YEAR, 2, TIMESTAMPADD( SQL_TSI_DAY , -1, TIMESTAMPADD( SQL_TSI_DAY , EXTRACT( DAY_OF_YEAR FROM CURRENT_DATE) * -(1) + 1, CURRENT_DATE)))
From right to left the first TIMESTAMPADD returns the first day of the current year. The second TIMESTAMPADD deducts one day to arrive at December 31 of the previous year. The third TIMESTAMPADD adds 2 years to the date to arrive at December 31 of the Next Year.
14) Last Day of Current Quarter
--------------------------------------------
TIMESTAMPADD( SQL_TSI_DAY , -(1), TIMESTAMPADD( SQL_TSI_QUARTER , 1, TIMESTAMPADD( SQL_TSI_DAY , DAY_OF_QUARTER( CURRENT_DATE) * -(1) + 1, CURRENT_DATE)))
Demonstrated using Quarters. From right to left the first TIMESTAMPADD returns the first day of the Current Quarter. The second TIMESTAMPADD returns the first day of the next quarter. The final TIMESTAMPADD subtracts a single day from the date to arrive at the last day of the Current Quarter.
15) Number of days between First Day of Year and Last Day of Current Month
------------------------------------------------------------------------------------------------------------------
TIMESTAMPDIFF(SQL_TSI_DAY, CAST('2010/01/01 00:00:00' AS DATE), TIMESTAMPADD( SQL_TSI_DAY , -(1), TIMESTAMPADD( SQL_TSI_MONTH , 1, TIMESTAMPADD( SQL_TSI_DAY , DAYOFMONTH( CURRENT_DATE) * -(1) + 1, CURRENT_DATE))))
For simplicity I hard coded the January 1, 2010 date and CAST it to a date. I could have used the First Day of the Current Year calculation but didn’t want to over clutter the example. The second part of the TIMESTAMPDIFF uses Last Day of the Current Month calculation to force the TIMESTAMPDIFF to calculate the number of days between the first day of the year and the last day of the current month.
A walk through some of the hard won lessons of using Oracle Business Intelligence, the experience of upgrading to 11G and how it works.
Tuesday, 27 November 2012
Thursday, 22 November 2012
Using VALUEOF in OBIEE
VALUEOF
Use the VALUEOF function to reference the value of a repository variable. Repository variables are defined using the Administration Tool. You can use the VALUEOF function both in Expression Builder in the Administration Tool, and when you edit the SQL statements for an analysis from the Advanced tab of the Analysis editor in Answers.
Syntax
Variables should be used as arguments of the VALUEOF function. Refer to static repository variables by name. Note that variable names are case sensitive. For example, to use the value of a static repository variables namedprime_begin and prime_end:
CASE WHEN "Hour" >= VALUEOF("prime_begin")AND "Hour" < VALUEOF("prime_end") THEN 'Prime Time' WHEN ... ELSE...END
You must refer to a dynamic repository variable by its fully qualified name. If you are using a dynamic repository variable, the names of the initialization block and the repository variable must be enclosed in double quotes ( " ), separated by a period, and contained within parentheses. For example, to use the value of a dynamic repository variable named REGION contained in an initialization block named Region Security, use the following syntax:
SalesSubjectArea.Customer.Region = VALUEOF("Region Security"."REGION")
The names of session variables must be preceded by NQ_SESSION, separated by a period, and contained within parentheses, including the NQ_SESSION portion. If the variable name contains a space, enclose the name in double quotes ( " ). For example, to use the value of a session variable named REGION, use the following syntax in Expression Builder or a filter:
"SalesSubjectArea"."Customer"."Region" = VALUEOF(NQ_SESSION.REGION)
Although using initialization block names with session variables (just as with other repository variables) may work, you should use NQ_SESSION. NQ_SESSION acts like a wildcard that matches all initialization block names. This lets you change the structure of the initialization blocks in a localized manner without impacting requests.
Reference : otn.oracle.com
Wednesday, 21 November 2012
CASE statements in OBIEE
Conditional Expressions
Expressions are building blocks for creating conditional expressions that convert a value from one form to another. Expressions
include:
· CASE (Switch)
· CASE (If)
CASE (Switch)
This form of the CASE statement is also referred to as the CASE(Lookup) form. The value of expr1 is examined, then the WHEN expressions. If expr1 matches any WHEN expression, it assigns the value in the corresponding THEN expression.
If none of the WHEN expressions match, it assigns the default value specified in the ELSE expression. If no ELSE expression is specified, the system automatically adds an ELSE NULL.
If expr1 matches an expression in multiple WHEN clauses, only the expression following the first match is assigned.
Note: In a CASE statement, AND has precedence over OR.
Syntax
CASE expr1
WHEN expr2 THEN expr3
{WHEN expr... THEN expr...}
ELSE expr
END
Where:
CASE starts the CASE statement. Must be followed by an expression and one or more WHEN and THEN statements, an optional ELSE statement, and the END keyword.
WHEN specifies the condition to be satisfied.
THEN specifies the value to assign if the corresponding WHEN expression is satisfied.
ELSE specifies the value to assign if none of the WHEN conditions are satisfied. If omitted, ELSE NULL is assumed.
END ends the CASE statement.
Example
CASE Score-par
WHEN -5 THEN 'Birdie on Par 6'
WHEN -4 THEN 'Must be Tiger'
WHEN -3 THEN 'Three under par'
WHEN -2 THEN 'Two under par'
WHEN -1 THEN 'Birdie'
WHEN 0 THEN 'Par'
WHEN 1 THEN 'Bogey'
WHEN 2 THEN 'Double Bogey'
ELSE 'Triple Bogey or Worse'
END
In this example, the WHEN statements must reflect a strict equality. For example, a WHEN condition of WHEN < 0 THEN 'Under Par' is illegal because comparison operators are not allowed.
CASE (If)
This form of the CASE statement evaluates each WHEN condition and if satisfied, assigns the value in the corresponding THEN expression.
If none of the WHEN conditions are satisfied, it assigns the default value specified in the ELSE expression. If no ELSE expression is
specified, the system automatically adds an ELSE NULL.
Note: In a CASE statement, AND has precedence over OR.
Syntax
CASE
WHEN request_condition1 THEN expr1
{WHEN request_condition2 THEN expr2}
{WHEN request_condition... THEN expr...}
ELSE expr
END
Where:
CASE starts the CASE statement. Must be followed by one or more WHEN and THEN statements, an optional ELSE statement, and the END keyword.
WHEN specifies the condition to be satisfied.
THEN specifies the value to assign if the corresponding WHEN expression is satisfied.
ELSE specifies the value to assign if none of the WHEN conditions are satisfied. If omitted, ELSE NULL is assumed.
END ends the CASE statement.
Example
CASE
WHEN score-par < 0 THEN 'Under Par'
WHEN score-par = 0 THEN 'Par'
WHEN score-par = 1 THEN 'Bogie'
WHEN score-par = 2 THEN 'Double Bogey'
ELSE 'Triple Bogey or Worse'
END
Unlike the Switch form of the CASE statement, the WHEN statements in the If form allow comparison operators. For example, a WHEN
condition of WHEN < 0 THEN 'Under Par' is legal.
Tuesday, 20 November 2012
NTILE function in OBIEE
NTILE
This function determines the rank of a value in terms of a user-specified range. It returns integers to represent any range of ranks.
In other words, the resulting sorted data set is broken into several tiles where there are roughly an equal number of values in each tile.
NTile with numTiles = 100 returns what is commonly called the "percentile" (with numbers ranging from 1 to 100, with 100 representing the high end of the sort). This value is different from the results of the Oracle BI PERCENTILE function, which conforms to what is called "percent rank" in SQL 92 and returns values from 0 to 1.
Syntax
NTILE(numExpr, numTiles)
Where:
numExpr is any expression that evaluates to a numeric value.
numTiles is a positive, nonnull integer that represents the number of tiles.
If the numExpr argument is not null, the function returns an integer that represents a rank within the requested range.
Sunday, 18 November 2012
BOTTOMN and TOPN
BOTTOMN
This function ranks the lowest n values of the expression argument from 1 to n, 1 corresponding to the lowest numeric value. The
BOTTOMN function operates on the values returned in the result set. A request can contain only one BOTTOMN expression.
Syntax
BOTTOMN(numExpr, integer)
Where:
numExpr is any expression that evaluates to a numeric value.
integer is any positive integer. Represents the bottom number of rankings displayed in the result set, 1 being the lowest rank.
TOPN
This function ranks the highest n values of the expression argument from 1 to n, 1 corresponding to the highest numeric value. The TOPN function operates on the values returned in the result set. A request can contain only one TOPN expression.
Syntax
TOPN(numExpr, integer)
Where:
numExpr is any expression that evaluates to a numeric value.
integer is any positive integer. Represents the top number of rankings displayed in the result set, 1 being the highest rank.
The TOPN function resets its values for each group in the query according to specific rules.
Friday, 16 November 2012
Percentile and Rank
PERCENTILE
This function calculates a percent rank for each value satisfying the numeric expression argument. The percentile rank ranges are from 0 (1st percentile) to 1 (100th percentile), inclusive.
The percentile is calculated based on the values in the result set.
Syntax
PERCENTILE(numExpr)
Where:
numExpr is any expression that evaluates to a numeric value.
The PERCENTILE function resets its values for each group in the query according to specific rules.
RANK
This function calculates the rank for each value satisfying the numeric expression argument. The highest number is assigned a rank of 1, and each successive rank is assigned the next consecutive integer (2, 3, 4,...). If certain values are equal, they are assigned the same rank (for example, 1, 1, 1, 4, 5, 5, 7...).
The rank is calculated based on the values in the result set.
Syntax
RANK(numExpr)
Where:
numExpr is any expression that evaluates to a numeric value.
The RANK function resets its values for each group in the query according to specific rules.
Wednesday, 14 November 2012
MAX, MEDIAN and MIN Functions
MAX
This function calculates the maximum value (highest numeric value) of the rows satisfying the numeric expression argument.
Syntax
MAX(numExpr)
Where:
numExpr is any expression that evaluates to a numeric value.
The MAX function resets its values for each group in the query according to specific rules.
MEDIAN
This function calculates the median (middle) value of the rows satisfying the numeric expression argument. When
there are an even number of rows, the median is the mean of the two middle rows. This function always returns a double.
Syntax
MEDIAN(numExpr)
Where:
numExpr is any expression that evaluates to a numeric value.
The MEDIAN function resets its values for each group in the query according to specific rules.
MIN
This function calculates the minimum value (lowest numeric value) of the rows satisfying the numeric expression argument.
Syntax
MIN(numExpr)
Where:
numExpr is any expression that evaluates to a numeric value.
The MIN function resets its values for each group in the query according to specific rules.
Tuesday, 13 November 2012
LAST Function in OBIEE
LAST
This function selects the last returned value of the expression. For example, the LAST function can calculate the value of the last day of the year.
The FIRST function is limited to defining dimension-specific aggregation rules in a repository. You cannot use it in SQL statements.
The LAST function operates at the most detailed level specified in your explicitly defined dimension. For example, if you have a time dimension defined with hierarchy levels day, month, and year, the LAST function returns the last day in each level.
You should not use the LAST function as the first dimension-specific aggregate rule. It might cause queries to bring back large numbers of rows for processing in the Oracle BI Server, causing poor performance.
When a measure is based on dimensions, and data is dense, the Oracle BI Server optimizes the SQL statements sent to the database to improve performance.
Note that you cannot nest PERIODROLLING, FIRST, and LAST functions.
Syntax
LAST(expr)
Where:
expr is any expression that references at least one measure column.
Example
LAST(sales)
Monday, 12 November 2012
First Function in OBIEE
FIRST
This function selects the first returned value of the expression argument. For example, the FIRST function can calculate the value of the first day of the year.
The FIRST function is limited to defining dimension-specific aggregation rules in a repository. You cannot use it in SQL statements.
The FIRST function operates at the most detailed level specified in your explicitly defined dimension. For example, if you have a time dimension defined with hierarchy levels day, month, and year, the FIRST function returns the first day in each level.
You should not use the FIRST function as the first dimension-specific aggregate rule. It might cause queries to bring back large numbers of rows for processing in the Oracle BI Server, causing poor performance.
When a measure is based on dimensions, and data is dense, the Oracle BI Server optimizes the SQL statements sent to the database to improve performance.
Note that you cannot nest PERIODROLLING, FIRST, and LAST functions.
Syntax
FIRST(expr)
Where:
expr is any expression that references at least one measure column.
Example
FIRST(sales)
Saturday, 10 November 2012
Count in OBIEE
COUNT
This function calculates the number of rows having a nonnull value for the expression. The expression is typically a column name, in which case the number of rows with nonnull values for that column is returned.
Syntax:
COUNT(expr)
Where:
expr is any expression.
COUNTDISTINCT
This function adds distinct processing to the COUNT function.
Syntax
COUNT(DISTINCT expr)
Where:
expr is any expression.
COUNT(*)
This function counts the number of rows.
Syntax
COUNT(*)
Example
For example, if a table named Facts contained 200,000 rows, the sample request would return the results shown:
SELECT COUNT(*) FROM Facts
Result:
200000
Thursday, 8 November 2012
Averages in OBIEE
AVG
This function calculates the average (mean) value of an expression in a result set. It must take a numeric expression as its argument.
Note that the denominator of AVG is the number of rows aggregated. For this reason, it is usually a mistake to use AVG(x) in a calculation in Oracle Business Intelligence. Instead, write the expression manually so that you can control both the numerator and denominator (x/y).
Syntax
AVG(numExpr)
Where:
numExpr is any expression that evaluates to a numeric value.
AVGDISTINCT
This function calculates the average (mean) of all distinct values of an expression. It must take a numeric expression as its argument.
Syntax
AVG(DISTINCT numExpr)
Where:
numExpr is any expression that evaluates to a numeric value.
Tuesday, 6 November 2012
SUM in OBIEE
SUM
This function calculates the sum obtained by adding up all values satisfying the numeric expression argument.
Syntax
SUM(numExpr)
Where:
numExpr is any expression that evaluates to a numeric value.
The SUM function resets its values for each group in the query according to specific rules.
SUMDISTINCT
This function calculates the sum obtained by adding all of the distinct values satisfying the numeric expression argument.
Syntax
SUM(DISTINCT numExpr)
Where:
numExpr is any expression that evaluates to a numeric value.
Friday, 2 November 2012
Repository GroupBy
GROUPBYCOLUMN
For use in setting up aggregate navigation. It specifies the logical columns that define the level of the aggregate data existing in a physical aggregate table.For example, if an aggregate table contains data grouped by store and by month, specify the following syntax in the content filter (General tab of Logical Source dialog):
GROUPBYCOLUMN(STORE, MONTH)
The GROUPBYCOLUMN function is only for use in configuring a repository. You cannot use it to form SQL statements.
GROUPBYLEVEL
For use in setting up aggregate navigation. It specifies the dimension levels that define the level of the aggregate data existing in a physical aggregate table.For example, if an aggregate table contains data at the store and month levels, and if you have defined dimensions (Geography and Customers) containing these levels, specify the following syntax in the content filter (General tab of Logical Source dialog):
GROUPBYLEVEL(GEOGRAPHY.STORE, CUSTOMERS.MONTH)
The GROUPBYLEVEL function is only for use in configuring a repository. You cannot use it to form SQL statements.
Subscribe to:
Posts (Atom)