Wednesday, 4 September 2013

Chronological key OBIEE

What is chronological key?

Chronological: Arranged in order of time of occurrence.
To identify the dimension as having a monotonically increasing value in time, we define chronological key. E.g. Time Dimension.

Pre-requisites to Chronological key:
-      Sequential (The members have a natural order).
-      Cardinal (All members are spaced the same distance apart at a given level, such as day or month).
-      Complete (There should be no missing numbers).
-      Chronological Order: 2010, 2011, 2012..., Jan, Feb, Mar..., Jan 2010, Feb 2010, Mar 2010...etc.
-      Sorting Order: 2010, 2011, 2012..., Apr, Aug, Dec, Feb..., Apr 2010, Apr 2011 etc.
  • At-least one level of time dimension should have chronological key.
  • In any number of levels you can define one or more number of chronological keys.
  • Defining at lowest level is the best practice. But defining at all relevant levels is recommended for all performance issues.
  • If the key is structured as YYYYMMDD, you can use it as a chronological key. But if the key is YYYYDDMM, you can't use it as chronological key. Because, the chronological key has to increase sequentially. So, YYYYDDMM won't work as chronological key.
  • Date specific functions like AGO, TODATE, PERIODROLLING etc. We can use the chronological key to calculate the results.
  • Theoretically, time series functions operate correctly if only the bottom level key in the Logical Dimension is chronological. In practice, however, this causes performance problems because it forces the physical query to use the lowest grain, causing joins of orders of magnitude more rows (for example, 365 times more rows for a "year ago" joining at the "day" grain). It also means higher-level aggregate tables are never selected by the query planner when using the time series functions, which again significantly slows the query.
1.  All other dimensions don’t care about the order of the values like region, product, customer etc.
-    Example, region_dim the values are north, south, west and east. Here nobody wants to see whether north comes first or south comes first. i.e., no role for order here.
2.  In the case of time dimension there needs to be a particular order for all values present in it.
-    Example, 2010 is earliest and 2004 is older. Dec-10 is earliest and Jan-10 is older. i.e., the values in the time dimension needs to follow a particular sorting order. So the chronological key is the key which tells the OBIEE that the data will increment based on the chronological column.
3.  Here you may get another Question. i.e., you are having columns like year, half_year, quarter, month, week and day. Here which one should become the chronological key?
-    Analyze it yourself. If you keep year as chronological key then OBIEE will be confused whether Jan-10 is earliest or Feb-10 is earliest. Because it knows only that 2010 is earliest and 2009 is older.

Finally, always it should be the lowest level of the dimension which needs to be the chronological key. In the above case it should be date.
You can select either date or date_id (this could be a sequence generator values).

Real time situations in OBIEE

OBIEE, is really every table is set to cacheable by default?

No ,By default some of the physical tables are not set cacheable because those tables are maintained with large volume of data, so it may lead to performance issues.
We can Observe the cacheable option : table->properties

I have a report, built with columns like order_no, order_date, order_loc etc..In the report i can able to see the data perfectly but when i download the report to excel the data column is showing the unexpected result. Is it a expected scenario? If yes, how can i resolve this?

Yes, this is an expected behavior, so we have to externally tell the BI serer to follow a specific format when download the report.
Steps:
Analysis->column properties-> Custom CSS style format->specify the date  format ->mso-number-format:"\@"

I have a dashboard prompt ,which is a edit box. I want to use the edit box as case in-sensitive filter in my dashboard page. Is it possible?

Yes, It is possible you can achieve this required my changing the configuration setting in the NQSconfig.INI file.
CASE_SENSITIVE_CHARACTER_COMPARISON = OFF;//by default 'ON' enabled
Restart the services and observe the behavior of the Edit box.

Thursday, 25 April 2013

What is Business Intelligence?


Business Intelligence:
Business Intelligence is a methodology to represent the raw data into a meaningful format for the business purpose.It always deals with the data warehouse to handle or process the large volume of data. Meaning, the data analysis will make users to understand the business and able the take the decisions.

How does it helps in the real world scenarios?
Generally BI show the data in a tabular/pictorial format that will support the business users to analyse the data w.r.t trending and making the business decisions.

How can we master on Business Intelligence?
The only source to become a master in BI is Explore Business Domain Knowledge.In general, only the domain Experts can build the best solution for business because they have an awareness of the business functionality and KPIs.

Business Intelligence also deals with Data Integration, Transformation, Management and Quality by using Different Tools like MSBI (Microsoft Business Intelligence) , OBIEE (Oracle Business Intelligence Enterprise Edition) etc.

Future of Business Intelligence:
Business Intelligence will exist in the world till the business exists because the word itself is saying it is "BUSINESS INTELLIGENCE".


Sunday, 3 March 2013

Handling NULL in the OBIEE 10g


Hi,
I have created the new logical column with
sum(column_name)/sum(count column name)
i enabled
prevent_divide_by_zero=yes
enable_db_hints=yes
in the NQSconfig.INI
When i create a column rpd handles with nullif(sum(count column name),0)
it means again if the column value returns null then replace with '0'.
In answers i have concate a string to the new logical column.....If the column returns null then it is only showing that string..
But my concern is i want to show '0' if i dont get any result .
Solution:ifnull(new logical column,0) ......Then concatenate the value to string.


Saturday, 2 March 2013

Write Back In OBIEE 10g

What is Write Back option?
Write back is the ability to enter or update values directly into a report and have those values stored directly in to the database. In order to implement this feature in OBIEE 10g we have to make some changes in the repository as well as in the presentation services layers. 

Lets discuss the scenario with the write back feature......................................
I have created a report with 5 write back columns, 3 columns are var char data type, 2 columns are integer data type.
Must follow the tips:
  • Use a different connection pool for the write back option.
  • Only table view support the write back feature.
  • Follow the template format and the template have either insert or update command.
  • Follow the column order in the template.
  • Assign the exact column numbers which is exist in the report.
  • Place the write back template C:/oracleBI/web/msgdb/custommessages/writeback1.xml.
  • The template should be match with the which is given in the answers.
Errors while dealing with write back Feature:
Contact SQL Administrator Error:
  • All the write back column names and the column numbers should be exist in the template
Web page Invalid input type:
  • The values datatype entered in the write back columns should be match with the column data type.
  • Don't left the any numeric column as blank in the report best practice from oracle.
Sample Write back Template : WriteBack.xml
<?xml version="1.0" encoding="utf-8" ?>
<WebMessageTables xmlns:sawm="com.siebel.analytics.web/message/v1">
<WebMessageTable lang="en-us" system="WriteBack" table="Messages">
<WebMessage name="WriteBack">
<XML>
<writeBack connectionPool="Connection Pool">
<update>UPDATE db_summary SET comments='@{c1}' WHERE location='@{c2}'</update>
<insert>INSERT INTO db_summary {comments} VALUES '@{c1}' </insert>
</writeBack>
</XML>
Let’s see, the step wise implementation of this feature.