Jtable header multi-line-wrap-alignment

admin
Categories: Dashboard, InfoCaptor, Other

One of my user asked if he could have the header settings such that the multi-line header text do not wrap. Also he wanted an easy way to align the columns. Needless to mention, these abilities are not yet present in InfoCaptor but since they were already in the feature pipeline, I picked those during this weekend.

Currently, the jtable, which is the rendering component for tabular information on the dashboards, displays the headers automatically in multi-line and it centers each line of the header.

There is lot of transformations applied to the actual column name before it appears on the jtable header.

for e.g. lets say the actual column name is “EMP_SUPERVISOR_NAME”

First it removes the underscore “_” and replaces it with a white space(blank character) ” ” and then it capitalizes the first character of every word, so the final outcome is

“Emp Supervisor Name”

Next, to achieve the multiline effect, it places the entire text within the html tags and each space is replaced with a html new line, so the actual string looks like

<html>Emp<br>Supervisor<br>Name</html>
Emp Supervisor Name

Now with the new feature, you can align the header text anyway you want, right, left,center or default.

What is default alignment?

If you notice any application, by default, numbers are aligned to the right and everything else is aligned to the left.

So if you pick, the default alignment (which is the current behavior of column data in InfoCaptor), the numbers are to the right and everything else is left.

The header is aligned the same way the column data is aligned.

Technical changes

With the new features, the old method of placing them within the center tags didn’t scale out for the left and right alignment. So a new technique is being deployed using the paragraph tag.

Now the header text is placed as below

<html><p align="left">Emp<br>Supervisor<br>Name</p></html>
Emp
Supervisor
name

For the no-wrap feature, the <br<
tags are not placed within the header text

Emp Supervisor name

This version should be out pretty soon :)

How to see the SQL behind DBI self service pages?

admin
Categories: DBI

With the Oracle Forms, it is easy to see behind the forms which view/table is involved. You can also see how the columns are mapped to the fields on the forms.

This became an issue when the self service html forms started dominating the scene. One of the reason I hate the self service pages is there is no easy way to see the SQL code behind, atleast there was no mechanism provided by Oracle to do this in a easy way.

Recently, I came to know the trick to see the code behind Daily Business Intelligence Financial Pages. All you have to do is set the following profiles.

FND: Debug Log Enabled to Yes
FND: Debug Log Level to Error
FND: Debug Log Module to BIS%

This might work for other modules too but not sure yet. This does not mean I am going to change my opinion about self service applications. The UI is the worst if you compare it to the GUI forms – Ugly long URLs in the browser – Takes far more number of mouse clicks and page navigations to get things done compared to the GUI forms.

EPF Business Area Reference

admin
Categories: EPB, InfoCaptor

Check this beautiful documentation on Enterprise Performance Foundation. This is the Business Area that is shipped along with EPF – EPB patches.

This is the main index for the document

http://www.appsbi.com/epf/business_areas_index.html

Here is the first page for the document http://www.appsbi.com/epf/business_areas0.html

and here is the menu http://www.appsbi.com/epf/business_areas_menu.html

What is the future of Oracle Discoverer? Freeware??

admin
Categories: Discoverer, Other

Agree or not, with all the recent acquisitions, Oracle has ended with multiple apples in the same basket. Just take the ad-hoc category for instance. This category was filled by Oracle Discoverer and then came Siebel Answers and I am not sure how Brio compares with the former two but if it does then it could be the third apple in the basket. Believe it or not multiple products in the same category is often deemed confusing rather than complimenting each other.

So what are the options? Oracle is putting all its force behind Siebel and we could see atleast one release of Discoverer. I think the best thing for Oracle would be to make Discoverer as a freeware tool.

Seeing MySQL as a threat, Oracle made its own version of database as a freeware. They already had Jdeveloper (a complete development environment) as freeware. So the only component that is missing as freeware is the BI and reporting piece.

Having a free Database + free Development tool + free reporting = more power to Oracle!

The more I think of this it becomes more compelling to release Oracle Discoverer as a freeware. If in future, Oracle doesn’t like to maintain or keep developing Discoverer then there is an alternative to make it Open Source. This could counter some of the threat from the open source BI companies like Pentaho and JasperSoft.

What do you think? Does it make sense to release Discoverer as a freeware tool?

Missing functions in eul4 Discoverer – cloned from eul5

admin

As part of the testing process for the upcoming EUL documentation feature in InfoCaptor, one of the user’s (Lance Botha – an active member of Discoverer forum ) was having trouble using the new discoverer dashboard. He was running against the EUL4 version whereas I had the opportunity to test it on only eul5 version. With some quick testing I came up with a list of functions that were newly added in EUL5 version and are missing in eul4. Below is a list of all the cloned functions for EUL4. The below functions should be created as the eul owner and should be executed after the eul4.sql and eul4_apps.sql scripts have been run. I will post detailed steps once the new release is out.


create or replace FUNCTION EUL4_GET_HIER_EXPID(HINAME IN VARCHAR2)
RETURN NUMBER IS
EXPID NUMBER(10);
--
--
HIID NUMBER(10);
HILHNID NUMBER(10);
--
--
--
CURSOR GET_HIID IS
SELECT HI_ID
FROM EUL4_HIERARCHIES
WHERE HI_NAME=HINAME;
--
--
CURSOR GET_HILHNID IS
SELECT IHS_HN_ID_CHILD
FROM EUL4_HI_SEGMENTS
WHERE IHS_HI_ID=HIID
AND IHS_HN_ID_CHILD NOT IN
(SELECT IHS_HN_ID_PARENT
FROM EUL4_HI_SEGMENTS
WHERE IHS_HI_ID=HIID);
--
--
CURSOR GET_EXPID IS
SELECT HIL_EXP_ID
FROM EUL4_IG_EXP_LINKS
WHERE HIL_HN_ID=HILHNID;
--
--
BEGIN
--
IF HINAME IS NULL THEN
EXPID:=NULL;
ELSE
--
OPEN GET_HIID;
FETCH GET_HIID INTO HIID;
IF GET_HIID%NOTFOUND THEN
EXPID:=-1;
RETURN EXPID;
END IF;
CLOSE GET_HIID;
--
OPEN GET_HILHNID;
FETCH GET_HILHNID INTO HILHNID;
IF GET_HILHNID%NOTFOUND THEN
EXPID:=-2;
RETURN EXPID;
END IF;
CLOSE GET_HILHNID;
--
OPEN GET_EXPID;
FETCH GET_EXPID INTO EXPID;
IF GET_EXPID%NOTFOUND THEN
EXPID:=-3;
END IF;
CLOSE GET_EXPID;
--
END IF;
RETURN EXPID;
END EUL4_GET_HIER_EXPID;
/

create or replace FUNCTION EUL4_GET_DATEHIER_TMPLT_NAME(IBHDBHID IN NUMBER)
RETURN VARCHAR2 IS
DATE_HIER_TMPLTE_NAME VARCHAR2(200);
--
--
--
--
--
CURSOR GET_DATEHIER_NAME IS
SELECT HI_NAME
FROM EUL4_HIERARCHIES
WHERE HI_ID=IBHDBHID
AND HI_TYPE='DBH';
--
--
--
--
BEGIN
--
--
IF IBHDBHID IS NULL THEN
DATE_HIER_TMPLTE_NAME:='ERROR - NOT ASSOCIATED TO A DATE HIERARCHY TEMPLATE';
ELSE
--
OPEN GET_DATEHIER_NAME;
FETCH GET_DATEHIER_NAME INTO DATE_HIER_TMPLTE_NAME;
IF GET_DATEHIER_NAME%NOTFOUND THEN
DATE_HIER_TMPLTE_NAME:='Error - Unable to find Date Hierarchy Template Name';
END IF;
CLOSE GET_DATEHIER_NAME;
END IF;
RETURN DATE_HIER_TMPLTE_NAME;
END EUL4_GET_DATEHIER_TMPLT_NAME;
/

create or replace FUNCTION EUL4_GET_FOLDERNAME(EXPID IN NUMBER)
RETURN VARCHAR2 IS
FLRNAME VARCHAR2(200);
--
--
--
--
--
CURSOR GET_FLDRNAM IS
SELECT OBJ_NAME
FROM EUL4_OBJS,EUL4_EXPRESSIONS
WHERE EUL4_OBJS.OBJ_ID=EUL4_EXPRESSIONS.IT_OBJ_ID
AND EUL4_EXPRESSIONS.EXP_ID=EXPID;
--
--
--
--
BEGIN
--
IF EXPID IS NULL THEN
FLRNAME:=NULL;
ELSE
OPEN GET_FLDRNAM;
FETCH GET_FLDRNAM INTO FLRNAME;
IF GET_FLDRNAM%NOTFOUND THEN
FLRNAME:='Error - Unable to find Folder Name';
END IF;
CLOSE GET_FLDRNAM;
END IF;
RETURN FLRNAME;
END EUL4_GET_FOLDERNAME;
/

create or replace FUNCTION EUL4_GET_HIERNODE_EXPID(HNID IN NUMBER)
RETURN NUMBER IS
EXPID NUMBER(10);
--
--
--
--
--
CURSOR GET_EXP_ID IS
SELECT HIL_EXP_ID
FROM EUL4_IG_EXP_LINKS
WHERE HIL_HN_ID=HNID
AND HIL_HN_ID IS NOT NULL;
--
--
--
--
BEGIN
--
OPEN GET_EXP_ID;
FETCH GET_EXP_ID INTO EXPID;
IF GET_EXP_ID%NOTFOUND THEN
EXPID:=NULL;
END IF;
CLOSE GET_EXP_ID;
RETURN EXPID;
END EUL4_GET_HIERNODE_EXPID;
/

create or replace FUNCTION EUL4_GET_AUTOGEN_ITEM_NAME(EXPID IN NUMBER)
RETURN VARCHAR2 IS
DEP_ITEM VARCHAR2(4000);
--
--
CIDEXP        NUMBER;
EXPNAME        VARCHAR2(200);
--
--
-- This cursor finds out if the item is a complex item (ie. dependant on another item)
-- It retuns not rows if it has no dependancies (ie. simple folder)
--
CURSOR EXPOBJ IS
SELECT CID_EXP_ID,EXP_NAME
FROM EUL4_EXP_DEPS, EUL4_EXPRESSIONS
WHERE EUL4_EXP_DEPS.CD_EXP_ID = EXPID
AND CID_EXP_ID IS NOT NULL
AND EUL4_EXP_DEPS.CD_EXP_ID = EUL4_EXPRESSIONS.EXP_ID;
--
--
--
CURSOR GET_EXP_NAME IS
SELECT EXP_NAME
FROM EUL4_EXPRESSIONS
WHERE EXP_ID=EXPID;
--
--
--
--
BEGIN
--
IF EXPID IS NULL THEN
DEP_ITEM:=NULL;
ELSE
--
OPEN EXPOBJ;
FETCH EXPOBJ INTO CIDEXP,EXPNAME;
IF EXPOBJ%NOTFOUND THEN
OPEN GET_EXP_NAME;
FETCH GET_EXP_NAME INTO EXPNAME;
CLOSE GET_EXP_NAME;
END IF;
CLOSE EXPOBJ;
IF SUBSTR(EXPNAME,1,19) <> 'AUTO_GENERATED_NAME' THEN
DEP_ITEM:=EXPNAME;
RETURN DEP_ITEM;
ELSE
DEP_ITEM:=EUL4_GET_AUTOGEN_ITEM_NAME(CIDEXP);
END IF;
END IF;
RETURN DEP_ITEM;
END EUL4_GET_AUTOGEN_ITEM_NAME;
/

create or replace FUNCTION EUL4_GET_JOIN(EXPID IN NUMBER,JOINAME IN VARCHAR2:='Y')
RETURN VARCHAR2 IS
JOIN VARCHAR2(4000);
--
-- If JOINAME is 'Y' then this returns the Autogenerated Join Name if it is 'N' or some other value it returns the the actual Join Details
--
--
JOIN_FORMULA    VARCHAR2(500);
JOIN_BIT    VARCHAR2(100);
JOIN_TYPE    VARCHAR2(20);
STARTPT     NUMBER :=1;
ENDPT        NUMBER :=1;
FINISHPT    NUMBER:=1;
EXPIDMSTR    NUMBER(10);
EXPIDDTL    NUMBER(10);
MASTERFLDR    VARCHAR2(4000);
DETAILFLDR    VARCHAR2(4000);
OPERATOR    VARCHAR2(10);
JOINMSTR    VARCHAR2(4000);
JOINDTL        VARCHAR2(4000);
CNTR        NUMBER :=0;
--
--
--
CURSOR GET_FORMULA IS
SELECT EXP_FORMULA1
FROM EUL4_EXPRESSIONS
WHERE EXP_TYPE='JP'
AND EXP_ID=EXPID;
--
--
--
--
BEGIN
--
IF EXPID IS NULL THEN
JOIN:='Name is just Too long to display';
ELSE
OPEN GET_FORMULA;
FETCH GET_FORMULA INTO JOIN_FORMULA;
IF GET_FORMULA%NOTFOUND THEN
JOIN:='Error - Unable to find Join';
END IF;
JOIN_BIT:=SUBSTR(JOIN_FORMULA,3,4);
IF JOIN_BIT=',98]' THEN
JOIN_TYPE:='MULTI';
ELSE
JOIN_TYPE:='SINGLE';
END IF;
IF JOIN_TYPE='MULTI' THEN
FINISHPT:=LENGTH(JOIN_FORMULA);
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,3)+1;
ENDPT:=INSTR(JOIN_FORMULA,CHR(44),1,4)-1;
EXPIDMSTR:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
MASTERFLDR:=EUL4_GET_FOLDERNAME(EXPIDMSTR);
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,5)+1;
ENDPT:=INSTR(JOIN_FORMULA,CHR(44),1,6)-2;
EXPIDDTL:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
DETAILFLDR:=EUL4_GET_FOLDERNAME(EXPIDDTL);
IF upper(JOINAME)='Y' THEN
JOINMSTR:=MASTERFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDMSTR);
JOINDTL:=DETAILFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDDTL);
CNTR:=11;
WHILE INSTR(JOIN_FORMULA,CHR(44),1,CNTR)<>0 LOOP
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-3)+1;
ENDPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-2)-1;
EXPIDMSTR:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-1)+1;
ENDPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR)-2;
EXPIDDTL:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
JOINMSTR:= JOINMSTR||','||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDMSTR);
JOINDTL:= JOINDTL||','||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDDTL);
CNTR:=CNTR+5;
END LOOP;
CNTR:=CNTR-1;
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-2)+1;
ENDPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-1)-1;
EXPIDMSTR:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR)+1;
ENDPT:=FINISHPT-2;
EXPIDDTL:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
JOINMSTR:= JOINMSTR||','||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDMSTR)||' -> ';
JOINDTL:= JOINDTL||','||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDDTL);
JOIN:=JOINMSTR||JOINDTL;
ELSE
JOINMSTR:=MASTERFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDMSTR);
JOINDTL:=DETAILFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDDTL);
IF SUBSTR(JOIN_FORMULA,11,2) = '81' THEN
OPERATOR:= ' = ';
ELSIF SUBSTR(JOIN_FORMULA,11,2) = '82' THEN
OPERATOR:= ' <> ';
ELSIF SUBSTR(JOIN_FORMULA,11,2) = '83' THEN
OPERATOR:= ' > ';
ELSIF SUBSTR(JOIN_FORMULA,11,2) = '84' THEN
OPERATOR:= ' < ';
ELSIF SUBSTR(JOIN_FORMULA,11,2) = '85' THEN
OPERATOR:= ' <= ';
ELSIF SUBSTR(JOIN_FORMULA,11,2) = '86' THEN
OPERATOR:= ' >= ';
ELSE
OPERATOR:= ' ? ';
END IF;
JOIN:=JOINMSTR||OPERATOR||JOINDTL||CHR(10);
CNTR:=11;
WHILE INSTR(JOIN_FORMULA,CHR(44),1,CNTR)<>0 LOOP
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-3)+1;
ENDPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-2)-1;
EXPIDMSTR:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-1)+1;
ENDPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR)-2;
EXPIDDTL:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
JOINMSTR:= MASTERFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDMSTR);
JOINDTL:= DETAILFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDDTL);
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-4)+1;
IF SUBSTR(JOIN_FORMULA,STARTPT,2) = '81' THEN
OPERATOR:= ' = ';
ELSIF SUBSTR(JOIN_FORMULA,STARTPT,2) = '82' THEN
OPERATOR:= ' <> ';
ELSIF SUBSTR(JOIN_FORMULA,STARTPT,2) = '83' THEN
OPERATOR:= ' > ';
ELSIF SUBSTR(JOIN_FORMULA,STARTPT,2) = '84' THEN
OPERATOR:= ' < ';
ELSIF SUBSTR(JOIN_FORMULA,STARTPT,2) = '85' THEN
OPERATOR:= ' <= ';
ELSIF SUBSTR(JOIN_FORMULA,STARTPT,2) = '86' THEN
OPERATOR:= ' >= ';
ELSE
OPERATOR:= ' ? ';
END IF;
CNTR:=CNTR+5;
JOIN:=JOIN||JOINMSTR||OPERATOR||JOINDTL||CHR(10);
END LOOP;
CNTR:=CNTR-1;
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-2)+1;
ENDPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-1)-1;
EXPIDMSTR:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR)+1;
ENDPT:=FINISHPT-2;
EXPIDDTL:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
JOINMSTR:=MASTERFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDMSTR);
JOINDTL:=DETAILFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDDTL);
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,CNTR-3)+1;
IF SUBSTR(JOIN_FORMULA,STARTPT,2) = '81' THEN
OPERATOR:= ' = ';
ELSIF SUBSTR(JOIN_FORMULA,STARTPT,2) = '82' THEN
OPERATOR:= ' <> ';
ELSIF SUBSTR(JOIN_FORMULA,STARTPT,2) = '83' THEN
OPERATOR:= ' > ';
ELSIF SUBSTR(JOIN_FORMULA,STARTPT,2) = '84' THEN
OPERATOR:= ' < ';
ELSIF SUBSTR(JOIN_FORMULA,STARTPT,2) = '85' THEN
OPERATOR:= ' <= ';
ELSIF SUBSTR(JOIN_FORMULA,STARTPT,2) = '86' THEN
OPERATOR:= ' >= ';
ELSE
OPERATOR:= ' ? ';
END IF;
JOIN:=JOIN||JOINMSTR||OPERATOR||JOINDTL;
END IF;
ELSE
FINISHPT:=LENGTH(JOIN_FORMULA);
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,2)+1;
ENDPT:=INSTR(JOIN_FORMULA,CHR(44),1,3)-1;
EXPIDMSTR:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
MASTERFLDR:=EUL4_GET_FOLDERNAME(EXPIDMSTR);
STARTPT:=INSTR(JOIN_FORMULA,CHR(44),1,4)+1;
ENDPT:=FINISHPT-1;
EXPIDDTL:=TO_NUMBER(SUBSTR(JOIN_FORMULA,STARTPT,(ENDPT-STARTPT)));
DETAILFLDR:=EUL4_GET_FOLDERNAME(EXPIDDTL);
IF upper(JOINAME)='Y' THEN
JOINMSTR:=MASTERFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDMSTR)||' -> ';
JOINDTL:=DETAILFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDDTL);
JOIN:=JOINMSTR||JOINDTL;
ELSE
IF SUBSTR(JOIN_FORMULA,4,2) = '81' THEN
OPERATOR:= ' = ';
ELSIF SUBSTR(JOIN_FORMULA,4,2) = '82' THEN
OPERATOR:= ' <> ';
ELSIF SUBSTR(JOIN_FORMULA,4,2) = '83' THEN
OPERATOR:= ' > ';
ELSIF SUBSTR(JOIN_FORMULA,4,2) = '84' THEN
OPERATOR:= ' < ';
ELSIF SUBSTR(JOIN_FORMULA,4,2) = '85' THEN
OPERATOR:= ' <= ';
ELSIF SUBSTR(JOIN_FORMULA,4,2) = '86' THEN
OPERATOR:= ' >= ';
ELSE
OPERATOR:= ' ? ';
END IF;
JOINMSTR:=MASTERFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDMSTR);
JOINDTL:=DETAILFLDR||'.'||EUL4_GET_AUTOGEN_ITEM_NAME(EXPIDDTL);
JOIN:=JOINMSTR||OPERATOR||JOINDTL;
END IF;
END IF;
CLOSE GET_FORMULA;
END IF;
RETURN JOIN;
END EUL4_GET_JOIN;
/

EUL Meta-data Documentation in HTML

admin
Categories: InfoCaptor, Other

This is a another brand new feature for documenting Discoverer EUL meta-data, workbooks and the internals like Business areas, Folders , Items, Joins.

I find the HTML more flexible and user friendly than the previous PDF option as it has more drills as hyperlinks

Check this sample output. Navigate and Play around and comment back if you like.

http://www.appsbi.com/cmenu.html

Currently this report engine is being integrated within InfoCaptor. There are some other important updates coming for InfoCaptor including the PDF and HTML briefing books.

I am really excited with these new updates as it is going to solve some real problems!

Are Dashboards a luxury item?

admin
Categories: Dashboard, Other

It depends, whom you are asking? For e.g. if you ask a millionaire, is Lexus or BMW a luxury? He might say it is a necessity rather than a luxury item. For him, it could be a necessity to maintain and project a status whereas for anybody not-so-rich it could clearly be a luxury item.

Similarly, Dashboards at the Fortune 500 companies could be a clear necessity whereas for a small or medium sized company it could be perceived as a luxury. The SMBs are getting their things done with the traditional reporting that they already invested in so there might be no need to look into other options of reporting.

The thing about luxury is “If you taste it, it might become a necessity”. So where am I going with all these luxury and necessity analogies?

Looking deeper into the marketing problems I am facing with my product InfoCaptor, it becomes clearer to me as to what are the reasons behind it.

1. Business Intelligence and Dashboards is perceived to be a domain of Big vendors (like Oracle, Hyperion, Cognos, Business Objects)
2. Corporates like to deal with corporates of their kind
3. Corporates feel that every product or application that they buy should be Server based/ Heavy duty and Expensive.

I decided to jump into BI and Dashboards for the exact opposite reasons even though the market is overcrowded and is tough to create a crack where I can fit in.

I did not want to create a bloated server based solution(all of the dashboarding tools in the market today are server based). One of the reason behind server based is to ease the deployment to the end users. So if deployment is the key, I can very well achieve the same using Java Webstart and it has been working fine.

The thing about web interface is you want it to behave more like a rich client interface so you start adding interactivity to it using AJAX and related stuff. Today it is AJAX but nowhere near the rich client interface, so tomorrow it could be something else and every iteration trying to be the rich client and still be called as browser based interface.

This is something I cannot fathom, maybe I am biased but if you really need interactivity
what is wrong in going with the rich client tools?

I am trying to position my product as “Quick and Easy Dashboarding tool” for the small and medium businesses which is totally opposite of all the other dashboarding tools. You don’t need specialized trained resources to develop or maintain it, you can deploy it on a web-server, your PC or USB drive.

But the bottom line is, it seems like a luxury item for SMBs and this could be my problem!!!

So what are my options? I have just begun marketing my product so I cannot conclude anything. All I can do is keep
innovating the product with new features and pushing it. I have a multi-year and multi-product plan and strategy.

Another thought that aroused a couple of weeks back were to leverage my code base and create some small utilities out of it.

This idea looks very promising so I added some new features into the main product, a small reporting engine to create
Briefing books” from the dashboard contents.

I am going to slowly strip InfoCaptor code base and convert them into utilities, which would fall in the “necessity” category.

The good thing is I know where my problem is and what are my limitations. I have begun to identify some of the strengths and will start leveraging that.

I want to document each and every turn that leads me to success so one day I can look back and amuse myself :-)

If you were in my position, what would you do? Any suggestions?

Discoverer Snapshot Report Generator

admin

Recently, my current client asked me if there was any easy way to document all the EUL information in one file. I thought of recommending the standard EUL workbooks to extract the necessary information but since the client asked for an easy way I did not suggest that. It is certainly one way of documenting it but not necessarily the best way.

The problem was, there was no tool or method available in order to create the document in the best way.

So with almost 20 hrs of coding during the weekend, I whipped up some java code, using the standard queries and came up with a robust mechanism to create the document in just “One Click”.

Check this Sample Discoverer EUL and Workbook Generated Document,

It took less than 1 minute to generate the entire document into a pdf file with just “One Click”. Isn’t that easier than the
standard EUL workbooks?

The beauty of this generator is, you can add queries and create child nodes in the PDF document. You have solid formatting options. This can be run against any database containing the EUL information but before I present this to my client I would like your opinion on whether the document is presentable, does it have all the necessary information, any flaws, any suggestions?

You can email me at infocaptor”AT’gmail.com

Thank you

What? Oracle buying Hyperion?

admin
Categories: EPB, FCH, Other

Found a  post on  Mark Rittman’s blog mentioning the news about Oracle buying Hyperion

This news just made my head spin! What can I say?

One thing is for sure, Oracle is trying to duplicate the product line-up.

It seems for every category, Oracle now has duplicate products as a result of all the acquisitions.

The major impact could be on the CPM product line-up. What is the fate of Financial Consilodation Hub (FCH), Enterprise Planning and Budgeting and the likes?

NEW YORK (Reuters) — Oracle Corp., the world’s top database software maker, is near an agreement to buy Hyperion Solutions Corp., which makes software that lets companies analyze and track their performance, for about $3 billion, The New York Times said on Wednesday in its online edition.

The transaction is expected to be announced as soon as Thursday, and terms were not immediately available, the newspaper said citing unnamed people briefed on the transaction.

larry_ellison_new.03.jpg
Under the direction of CEO Larry Ellison, Oracle has acquired several rival companies in the last few years.

Oracle and Hyperion did not immediately return calls seeking comment. Oracle is based in Redwood City, California, and Hyperion in Santa Clara, California.

Hyperion (Charts) shares closed on Wednesday at $42.84, giving the company a market value of about $2.53 billion based on reported shares outstanding. Oracle (Charts) shares closed at $16.43. Both companies’ shares trade on the Nasdaq.