<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>BI HAPPY</title>
	<atom:link href="http://bihappyblog.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://bihappyblog.com</link>
	<description>Business Intelligence Happiness</description>
	<lastBuildDate>Tue, 18 Jun 2013 01:40:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>CONNECTED SAP Dashboard as HTML5 &#8211; Step-By-Step Info</title>
		<link>http://bihappyblog.com/2013/06/17/connected-sap-dashboard-as-html5-step-by-step-info/</link>
		<comments>http://bihappyblog.com/2013/06/17/connected-sap-dashboard-as-html5-step-by-step-info/#comments</comments>
		<pubDate>Tue, 18 Jun 2013 01:39:43 +0000</pubDate>
		<dc:creator>Ron Keler</dc:creator>
				<category><![CDATA[BusinessObjects 4.0]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[SAP Mobile BI]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[SAP Dashboard connected html5]]></category>

		<guid isPermaLink="false">http://bihappyblog.com/?p=803</guid>
		<description><![CDATA[As promised on the last post, you can find below a detailed account of how to get your connected HTML5 harvested SAP Dashboards (Xcelsius) files to work outside the SAP BI App. I tried to strike a fine balance between keeping this to a simple set of instructions and giving enough info for troubleshooting and<a href="http://bihappyblog.com/2013/06/17/connected-sap-dashboard-as-html5-step-by-step-info/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p>As promised <a href="http://bihappyblog.com/2013/06/03/how-to-publish-connected-sap-dashboard-xcelsius-as-html5-outside-the-mobile-app/">on the last post</a>, you can find below a detailed account of how to get your connected HTML5 harvested SAP Dashboards (Xcelsius) files to work outside the SAP BI App.<br />
I tried to strike a fine balance between keeping this to a simple set of instructions and giving enough info for troubleshooting and explanations.<br />
At a very high level the process is as follow:<br />
1. Harvest the HTML5 source files<br />
2. Place them in a webapp<br />
3. Obtain a BO token (as in any other connectivity scenario with BO)<br />
4. Make a few small modifications to the HTML5 files to leverage the token and pass it through to the REST services being used to invoke the connections in the dashboard<br />
So, let’s get started!<br />
Step 0:<br />
Copy the temp files while preview to mobile. I am not going to elaborate on this step, I assume by now you know how to find the dashboard html5 files</p>
<p><a href="http://bihappyblog.com/wp-content/uploads/2013/06/XLFHTML5ConnectedStepByStep01.png"><img class="alignnone size-large wp-image-804" title="XLFHTML5ConnectedStepByStep01" src="http://bihappyblog.com/wp-content/uploads/2013/06/XLFHTML5ConnectedStepByStep01-1024x576.png" alt="" width="600" height="337" /></a><br />
Step 1:<br />
Paste the HTML5 source files from the temp directory in a webapp. In my example, I created a webapp on the BO server tomcat called dashboardunwiredrepeat. This webapp has all the jars needed in the WEB-INF directory to use the BO SDK to authenticate a user and obtain a token. To make it easy to deploy multiple dashboards in a single apps, you can make subfolders for each dashboard as dash1, and dash2 in this example</p>
<p><a href="http://bihappyblog.com/wp-content/uploads/2013/06/XLFHTML5ConnectedStepByStep02.png"><img class="alignnone size-large wp-image-805" title="XLFHTML5ConnectedStepByStep02" src="http://bihappyblog.com/wp-content/uploads/2013/06/XLFHTML5ConnectedStepByStep02-1024x576.png" alt="" width="600" height="337" /></a><br />
Step 2:<br />
Prepare to use the BO token. In my example, I used a .jsp file to authenticate with a hard coded username and pwd against the BO system, obtain a token and store it in the tomcat session. To leverage this token, I simply renamed dashboard.html to dashboard.jsp, making it possible to include my .jsp file inside the main dashboard page to use the token. Of course, there are many different ways to accomplish this, and pass the token to the dashboard.html file without converting it to a .jsp with server side code</p>
<p><a href="http://bihappyblog.com/wp-content/uploads/2013/06/XLFHTML5ConnectedStepByStep03.png"><img class="alignnone size-large wp-image-806" title="XLFHTML5ConnectedStepByStep03" src="http://bihappyblog.com/wp-content/uploads/2013/06/XLFHTML5ConnectedStepByStep03-1024x576.png" alt="" width="600" height="337" /></a><br />
Step 3:<br />
Get access to the BO token. As I explained in the prior step, my inc.jsp file contains SDK code to obtain a token and stire it in the session. I will include it in the dashboard.jsp file so I can easily access the token. Open dashboard.jsp with a text editor and make the following changes:<br />
a. Paste the following line as the first line in the file:</p>
<pre>&lt;%@ include file="../inc.jsp" %&gt;</pre>
<pre><a href="http://bihappyblog.com/wp-content/uploads/2013/06/XLFHTML5ConnectedStepByStep04.png"><img class="alignnone size-large wp-image-807" title="XLFHTML5ConnectedStepByStep04" src="http://bihappyblog.com/wp-content/uploads/2013/06/XLFHTML5ConnectedStepByStep04-1024x576.png" alt="" width="600" height="337" /></a></pre>
<pre></pre>
<p>b. Paste the following code immediately after the line</p>
<pre>"&lt;script type="text/javascript"&gt;"</pre>
<p>in the</p>
<pre>&lt;body&gt;</pre>
<p>Section of the file (rename the url to be your server url as needed):</p>
<pre>/*****************************************************

Begin Custom code added to Dashboards generated code

*****************************************************/

var mySession = '';

$(window).load(function() {

$.ajax({

type: "POST",

url: "http://[host:port]/dswsbobje/services/Session",

data: "{\"loginWithToken\":{\"@xmlns\":{\"$\":\"http://session.dsws.businessobjects.com/2007/06/01\"},\"loginToken\":{\"$\":\"&lt;%= session.getAttribute("BOTOKEN")%&gt;\"},\"locale\":{\"$\":\"\"},\"timeZone\":{\"$\":\"\"}}}",

contentType: "application/json; charset=utf-8",

dataType: "json",

beforeSend: function (xhr) {

xhr.setRequestHeader('SOAPAction', 'http://session.dsws.businessobjects.com/2007/06/01/loginWithToken');

},

success: function(msg) {

mySession = msg['ns:loginWithTokenResponse']['ns:SessionInfo']['@SerializedSession'];

},

error: function (errormessage) {

$('#msgid').html("oops got an error in first service call!");

alert('error');

}

, async: false

});

/***************************************************

End Custom code added to Dashboards generated code

****************************************************/</pre>
<p>Save and close the dashboard.jsp file</p>
<p>Step 4:</p>
<p>Locate the file file_1.js and open it in a text editor. Copy the file contents and paste it in the site <a href="http://jsbeautifier.org/">http://jsbeautifier.org/</a>click the beatify button and paste the formatted text back into the file_1.js file.  Find the line</p>
<pre>“this._ceSerializedSession = this._connectionAPI.getInitParameter(l.PARAM_CE_SERIALIZED_SESSION);”</pre>
<p>and comment it out by typing two backslashes in front of it like so:</p>
<pre>// this._ceSerializedSession = this._connectionAPI.getInitParameter(l.PARAM_CE_SERIALIZED_SESSION);</pre>
<p>Then paste the following line under the commented out line:</p>
<pre>this._ceSerializedSession = mySession;</pre>
<p>Save the file and close it</p>
<p>Step 5:</p>
<p>Locate the file file_2.js (next to file_1.js), open it with a text editor, and format it as described in step 6 using the <a href="http://jsbeautifier.org/">http://jsbeautifier.org/</a> web site. Find the following block of code:</p>
<pre>} else {

u.soapAction = p.RUN_QUERY;

u.request = this._generateRunQuery();

u.response.responseRoot("x:runQueryResult")</pre>
<p>comment out the three lines like so</p>
<pre>} else {

//            u.soapAction = p.RUN_QUERY;

//            u.request = this._generateRunQuery();

//            u.response.responseRoot("x:runQueryResult")</pre>
<p>And paste the following three lines beneath the lines you just commented out:</p>
<pre>u.soapAction = p.RUN_QUERY_SPEC;

u.request = this._generateRunQuerySpec();

u.response.responseRoot("x:runQueryDesignTimeResult")</pre>
<p>&nbsp;</p>
<p>That’s it! Take your connected dashboard for a spin at http://yourserver:yourport/yourwebapp/yoursubdir(dash2inthisexample)/dashboard.jsp</p>
]]></content:encoded>
			<wfw:commentRss>http://bihappyblog.com/2013/06/17/connected-sap-dashboard-as-html5-step-by-step-info/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to publish CONNECTED SAP Dashboard (Xcelsius) as HTML5 OUTSIDE the mobile app!</title>
		<link>http://bihappyblog.com/2013/06/03/how-to-publish-connected-sap-dashboard-xcelsius-as-html5-outside-the-mobile-app/</link>
		<comments>http://bihappyblog.com/2013/06/03/how-to-publish-connected-sap-dashboard-xcelsius-as-html5-outside-the-mobile-app/#comments</comments>
		<pubDate>Tue, 04 Jun 2013 01:52:29 +0000</pubDate>
		<dc:creator>Ron Keler</dc:creator>
				<category><![CDATA[BusinessObjects 4.0]]></category>
		<category><![CDATA[Data visualization]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[SAP Mobile BI]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[SAP Dashboard html5 connected]]></category>
		<category><![CDATA[Xcelsius html5 connected]]></category>

		<guid isPermaLink="false">http://bihappyblog.com/?p=798</guid>
		<description><![CDATA[This is a fully functioning connected HTML5 version of an SAP dashboard that connects to the eFashion universe on State change and refreshes the data. Yes. You are not reading this wrong. No plugins used, no third party tools or tricks, just SAP dashboard XLF file. Read on to learn more… Ever since I read<a href="http://bihappyblog.com/2013/06/03/how-to-publish-connected-sap-dashboard-xcelsius-as-html5-outside-the-mobile-app/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://bogoboards.com/dashboardunwired2/dashboard1.jsp" frameborder="0" width="800" height="500"></iframe></p>
<p>This is a fully functioning connected HTML5 version of an SAP dashboard that connects to the eFashion universe on State change and refreshes the data. Yes. You are not reading this wrong. No plugins used, no third party tools or tricks, just SAP dashboard XLF file. Read on to learn more…</p>
<p>Ever since I read <a href="http://scn.sap.com/community/bi-dashboards/blog/2012/11/24/how-to-get-the-html5-version-of-your-dashboard-without-publishing-to-mobile">Joseph Warbington SCN post</a> about finding SAP Dashboard html5 source files when previewing a dashboard for Mobile, I’ve been intrigued with the possibilities this opened up.</p>
<p>So, during the SAPPHIRE conference, I managed to find an SAP employee on the show floor who was a member of the Dashboard product team. “Can you please tell me when will SAP make the option to export dashboards outside the mobile App available?” I asked. “Well, never… there is no such plan and dashboard relies on the platform for certain things, so we will not make such functionality available…”. Hmmm… Really. Well, this conversation left me a bit disappointed (and by the way, I have no idea if this is the official SAP stance, this was just one side conversation, with one person who works at SAP, who may or may not know the entire product road map). So, after I got home, I decided to try and replicate the full dashboard functionality in HTML5 outside the BI app.</p>
<p>As Joseph Warbington describes, harvesting the HTML5 source files is relatively simple, and it all works just fine, except for one important piece. <strong>Connections</strong>… Since SP5, we can use the Query Browser to embed connectivity in the mobile dashboards, and quite frankly, without connectivity, I don’t really see much enterprise use in the dashboard. And of course, when trying to get the connections to “just work” after copying the HTML5 files from the Temp directory does not work.</p>
<p>So, armed with chrome network debugger, fiddler, a good understanding of the various BO SDKs (the web services and enterprise ones in particular) and with the invaluable help of my colleague, Yevgeniy (Eugene) Tsvetov, we set out to understand how Dashboard invokes connections and what we would need to get the connections to work outside the BI APP. The result is displayed at the top of this post.</p>
<p>The files generated by SAP dashboard already contain all the scaffolding needed for the connections to work, the only thing that is really missing is the enterprise session. So, by adding a few lines of JS to the files generated, we can pass the session using the enterprise and web services SDK. And REST assured, it all works!</p>
<p>This opens up the possibility for Dashboard designers to post their fully connected awesome designs not just to the BI App, but also to any web site, without needing to use flash!!! Enjoy…</p>
]]></content:encoded>
			<wfw:commentRss>http://bihappyblog.com/2013/06/03/how-to-publish-connected-sap-dashboard-xcelsius-as-html5-outside-the-mobile-app/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Crystal Reports on SAP Mobile BI</title>
		<link>http://bihappyblog.com/2013/04/25/crystal-reports-on-sap-mobile-bi/</link>
		<comments>http://bihappyblog.com/2013/04/25/crystal-reports-on-sap-mobile-bi/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 02:37:47 +0000</pubDate>
		<dc:creator>Ron Keler</dc:creator>
				<category><![CDATA[BusinessObjects 4.0]]></category>
		<category><![CDATA[SAP Mobile BI]]></category>
		<category><![CDATA[Crystal Reports on iPad]]></category>
		<category><![CDATA[Crystal Reports on SAP Mobile BI]]></category>

		<guid isPermaLink="false">http://bihappyblog.com/?p=792</guid>
		<description><![CDATA[It seems like every month SAP is unleashing new functionality for its Mobile BI app. Explorer, Web Intelligence and recently Dashboards have all made their way into the BI app and seem to work better, look nicer and perform faster then on the desktop! The mobile versions are not only slick and easy to use,<a href="http://bihappyblog.com/2013/04/25/crystal-reports-on-sap-mobile-bi/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://bihappyblog.com/wp-content/uploads/2013/04/Crystal-on-SAP-MOBI.png"><img class="alignnone size-large wp-image-793" title="Crystal on SAP MOBI" src="http://bihappyblog.com/wp-content/uploads/2013/04/Crystal-on-SAP-MOBI-742x1024.png" alt="" width="600" height="828" /></a></p>
<p>It seems like every month SAP is unleashing new functionality for its Mobile BI app. Explorer, Web Intelligence and recently Dashboards have all made their way into the BI app and seem to work better, look nicer and perform faster then on the desktop! The mobile versions are not only slick and easy to use, they are also very easy to deploy to. For webi, all it takes to turn the report to mobile ready is assignment to a category (as is the case for Dashboards and Crystal), Explorer is there by default, and Dashboard can be saved as Mobile when exported to the repository. It’s that simple. Well, almost… While the product does allow developers to deploy content to the BI app very easily, the challenges of the design are still there, with a twist. Data issues, business logic complexities, real estate constraints, functionality gaps, all of the same challenges that make BI content development difficult for any device are applicable, with the additional challenge of new constraints related to mobile device usage and functionality that is “ramping up”. And while Webi, Explorer and Dashboards are “sexy”, dashing and elegant tools, I set out to try the capabilities of good old Crystal Reports on the BI App, and as always when it comes to Crystal, I was not disappointed!</p>
<p>While Crystal on the iPad lacks some of the Explorer and Webi “swooshiness” and feels a bit “boxy”, it certainly provides much more flexibility in design, navigation and layout capabilities. And since images can be used to enhance its look and feel, Crystal can be made to look as modern as any. Unlike in Webi on the mobile BI app where the report design is limited to simplistic blocks that get converted automagically to the stunning iPad design, Crystal reports will render EXACTLY the way you design them on the desktop. So you can layout the screen any which way you like, which can be very important for some design situations. Crystal unlimited data connectivity also makes it a great choice for directly connecting to any data source with ease. So your crystal report on the iPad will connect to anything you need to, from Universes to any RDBMS, web service, and beyond. The group tree functionality is also enables on the iPad and provides slick and easy way to navigate large hierarchies on the iPad, prompts, work as well and drill downs are all there in their interactive glory. You can paginate using the page number icons, or simply swipe left to move to the next page. Nice.</p>
<p>The image I posted is from a Crystal Report I created with sales data and hierarchy, and I hope it provides a good example of what Crystal actually looks like on the iPad.</p>
<p>So, all in all, Crystal can be an important companion for your mobile BI content deployment, and after more than two decades of reign over the enterprise reporting realm can still help address use cases and reporting scenarios that other more modern tools cannot.</p>
]]></content:encoded>
			<wfw:commentRss>http://bihappyblog.com/2013/04/25/crystal-reports-on-sap-mobile-bi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BI Happiness with html5 charts animation</title>
		<link>http://bihappyblog.com/2013/04/16/bi-happiness-with-html5-charts-animation/</link>
		<comments>http://bihappyblog.com/2013/04/16/bi-happiness-with-html5-charts-animation/#comments</comments>
		<pubDate>Wed, 17 Apr 2013 02:55:52 +0000</pubDate>
		<dc:creator>Ron Keler</dc:creator>
				<category><![CDATA[Data visualization]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[html5 charts animation]]></category>

		<guid isPermaLink="false">http://bihappyblog.com/?p=785</guid>
		<description><![CDATA[The other day, my colleague Rob Blackburn wrote a really cool and elegant function to animate html5 charts for our dashboards. It was so cool, that it even made my scatter charts smile…]]></description>
			<content:encoded><![CDATA[<p>The other day, my colleague <a href="http://rwblackburn.com/">Rob Blackburn</a> wrote a really cool and elegant function to animate html5 charts for our dashboards. It was so cool, that it even made my scatter charts smile…</p>
<p><iframe src="http://bihappyblog.com/samples/animation_smiley.html" frameborder="0" marginwidth="0" marginheight="0" width="600" height="350"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://bihappyblog.com/2013/04/16/bi-happiness-with-html5-charts-animation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How I loaded my blog into HANA (and what I learned about it once it was there…)</title>
		<link>http://bihappyblog.com/2013/03/18/how-i-loaded-my-blog-into-hana-and-what-i-learned-about-it-once-it-was-there%e2%80%a6/</link>
		<comments>http://bihappyblog.com/2013/03/18/how-i-loaded-my-blog-into-hana-and-what-i-learned-about-it-once-it-was-there%e2%80%a6/#comments</comments>
		<pubDate>Tue, 19 Mar 2013 03:17:14 +0000</pubDate>
		<dc:creator>Ron Keler</dc:creator>
				<category><![CDATA[HANA]]></category>
		<category><![CDATA[HANA Java Programming]]></category>
		<category><![CDATA[HANA Text analytics]]></category>
		<category><![CDATA[HANA Unstructured data]]></category>
		<category><![CDATA[Insert BLOB Into HANA]]></category>

		<guid isPermaLink="false">http://bihappyblog.com/?p=775</guid>
		<description><![CDATA[Unstructured data analysis is one of the most interesting aspects of “big data”. It’s certainly impressive to be able to process massive amounts of structured data in no time, but analyzing unstructured data opens completely new possibilities, that can lead to the creation of whole new disciplines or industries. To test out HANA text analysis<a href="http://bihappyblog.com/2013/03/18/how-i-loaded-my-blog-into-hana-and-what-i-learned-about-it-once-it-was-there%e2%80%a6/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://bihappyblog.com/wp-content/uploads/2013/03/01HANA_STUDIO.png"><img class="alignnone size-large wp-image-777" title="01HANA_STUDIO" src="http://bihappyblog.com/wp-content/uploads/2013/03/01HANA_STUDIO-1024x623.png" alt="" width="600" height="365" /></a></p>
<p>Unstructured data analysis is one of the most interesting aspects of “big data”. It’s certainly impressive to be able to process massive amounts of structured data in no time, but analyzing unstructured data opens completely new possibilities, that can lead to the creation of whole new disciplines or industries. To test out HANA text analysis capabilities, I thought I would try to load my blog into a column table, and see what it can do.<br />
Leveraging my company AWS HANA instance, I started out by making a simple single column table. The important thing to note here is that for text analytics to work, the data type to be used has to be NCLOB. BLOB for example, will not work.<br />
So, in HANA studio, after connecting to the HANA instance and my schema, I executed:</p>
<pre><span style="color: #3366ff;">--1. Create an empty table with NCLOB column to store blog content</span>
<span style="color: #993366;">create column table</span> RONKELER.BLOG_TEXT (BLOG_CONTENT NCLOB);</pre>
<p>The next step was a bit more interesting. How do I actually load my blog into the table…? Well. First, I had to get my blog out to a file. Since I use wordpress, that was as simple as selecting the Export option from the Tools menu of the administration section.</p>
<p><a href="http://bihappyblog.com/wp-content/uploads/2013/03/02ExportBlog.png"><img class="alignnone size-full wp-image-778" title="02ExportBlog" src="http://bihappyblog.com/wp-content/uploads/2013/03/02ExportBlog.png" alt="" width="882" height="214" /></a></p>
<p>With my blog exported as an xml file, I set my sights on loading it into my table. Data Services would be my typical choice, as it’s fast, easy to use, and has great integration with HANA. However, to keep my options open, I looked for a programmatic solution that will allow more robust capabilities. And as it turns out, the solution was similar to loading a blob object into any other database. I ended up writing a small java program to load the file in.<br />
To connect to HANA in java, I needed to find the ngdbc.jar library and add it to my project build path in Eclipse. The rest was pretty standard:</p>
<pre><span style="color: #993366;">import</span> java.io.*;
<span style="color: #993366;">import</span> java.sql.*;</pre>
<pre><span style="color: #993366;">public class</span> HanaConn {</pre>
<pre> <span style="color: #993366;">public static void</span> main(String args[]) {
  <span style="color: #993366;">try</span> {
   File f = new File("<span style="color: #3366ff;">C:\\FOLDER\\FILE.xml</span>");
   InputStream is = new FileInputStream(f);</pre>
<pre>   Class.forName("<span style="color: #3366ff;">sun.jdbc.odbc.JdbcOdbcDriver</span>");
   java.sql.Connection conn = DriverManager.getConnection(
     "<span style="color: #3366ff;">jdbc:odbc:imdbhdb</span>", "<span style="color: #3366ff;">SYSTEM</span>", "<span style="color: #3366ff;">PWD</span>");
   conn.setAutoCommit(<span style="color: #993366;">false</span>);
   PreparedStatement stmt = conn
     .prepareStatement("<span style="color: #3366ff;">INSERT INTO RONKELER.BLOG_TEXT VALUES(?)</span>");
   stmt.setBinaryStream(1, is, (<span style="color: #993366;">int</span>) f.length());
   stmt.executeUpdate();
   conn.commit();
   is.close();
   System.<span style="color: #993366;">out</span>.println("<span style="color: #3366ff;">Done inserting!</span>");
   stmt.close();
   conn.close();</pre>
<pre>  } <span style="color: #993366;">catch</span> (Exception e) {
   System.<span style="color: #993366;">out</span>.println("<span style="color: #3366ff;">Exception occured:</span> " + e.getMessage());
   e.printStackTrace();
  }
 }
}</pre>
<p>So, step 2</p>
<pre><span style="color: #3366ff;">--2. Run java program to load blog content</span></pre>
<p>Next, I modified my table to add a primary key. Using the text analytics requires the analyzed table have a PK:</p>
<pre><span style="color: #3366ff;">--3. Add column to be used as PK</span>
<span style="color: #993366;">alter table</span> RONKELER.BLOG_TEXT <span style="color: #993366;">add</span> (k int);
<span style="color: #3366ff;">--4. Populate PK value</span>
<span style="color: #993366;">update</span> RONKELER.BLOG_TEXT <span style="color: #993366;">set</span> k = 1;
<span style="color: #3366ff;">--5. Add PK constraint</span>
<span style="color: #993366;">alter table</span> RONKELER.BLOG_TEXT <span style="color: #993366;">add constraint</span> pkconst <span style="color: #993366;">primary key</span> (k);</pre>
<p>So far, things have been pretty standard. The cool part was turning on the text analytics. Using one simple SQL command, HANA processed the content of my text column, and parsed it out in nano seconds!</p>
<pre><span style="color: #3366ff;">--6. Create fulltext index on blog content</span>
<span style="color: #993366;">Create</span> FullText <span style="color: #993366;">Index</span> "<span style="color: #3366ff;">BLOG_CONTENT_IDX</span>" <span style="color: #993366;">On</span> RONKELER.BLOG_TEXT(BLOG_CONTENT)
TEXT ANALYSIS <span style="color: #993366;">ON</span>
CONFIGURATION '<span style="color: #3366ff;">LINGANALYSIS_STEMS</span>';</pre>
<p>This query generated a table called $TA_BLOG_CONTENT_IDX. This table included a row for each word in my blog, allowing me to then run some queries to perform analysis on the content of my blog..:</p>
<pre>-- Analysis...
<span style="color: #3366ff;">--1. How many words/unique words?</span>
<span style="color: #993366;">select count</span>(*) <span style="color: #993366;">from</span> RONKELER."<span style="color: #3366ff;">$TA_BLOG_CONTENT_IDX</span>"; <span style="color: #3366ff;">--342174 words! Wow, who knew i wrote so much...</span>
<span style="color: #993366;">select count</span>(<span style="color: #993366;">distinct upper</span>(ta_token)) <span style="color: #993366;">from</span> RONKELER."<span style="color: #3366ff;">$TA_BLOG_CONTENT_IDX</span>"; --7781 unique words... Maybe i need to read more to expand my vocabulary..
<span style="color: #3366ff;">--Longest word? How many times used?</span>
<span style="color: #993366;">select max</span>(<span style="color: #993366;">length</span>(ta_token)),
(<span style="color: #993366;">select</span> ta_token <span style="color: #993366;">from</span> RONKELER."<span style="color: #3366ff;">$TA_BLOG_CONTENT_IDX</span>" <span style="color: #993366;">where</span> <span style="color: #993366;">length</span>(ta_token) = (<span style="color: #993366;">select max</span>(<span style="color: #993366;">length</span>(ta_token))<span style="color: #993366;">from</span> RONKELER."<span style="color: #3366ff;">$TA_BLOG_CONTENT_IDX</span>"))
<span style="color: #993366;">from</span> RONKELER."<span style="color: #3366ff;">$TA_BLOG_CONTENT_IDX</span>"; <span style="color: #3366ff;">--54;VbZDUzY2M2ZDQtYzNmMC00OTJjLTlhMDUtNDU3MGMyY2ZkOWZm&amp;amp well, not really a word, but you get the idea</span>
<span style="color: #3366ff;">--Most used words</span>
<span style="color: #993366;">select upper</span>(ta_token),
<span style="color: #993366;">count</span>(<span style="color: #993366;">upper</span>(ta_token))
<span style="color: #993366;">from</span> "<span style="color: #3366ff;">RONKELER</span>"."<span style="color: #3366ff;">$TA_BLOG_CONTENT_IDX</span>"
where <span style="color: #993366;">length</span>(<span style="color: #993366;">upper</span>(ta_token)) &gt; 3
<span style="color: #993366;">group by upper</span>(ta_token)
<span style="color: #993366;">order by count</span>(<span style="color: #993366;">upper</span>(ta_token)) <span style="color: #993366;">desc</span>; <span style="color: #3366ff;">-- Well, need to do some more with this, but Xcelsius and Webi were pretty high up on the list</span></pre>
<pre><span style="color: #3366ff;"><a href="http://bihappyblog.com/wp-content/uploads/2013/03/03TopWords.png"><img class="alignnone size-full wp-image-779" title="03TopWords" src="http://bihappyblog.com/wp-content/uploads/2013/03/03TopWords.png" alt="" width="374" height="572" /></a></span></pre>
<p>Of course, this is a tiny example, but the ability to store and quick and easily parse text can be an important feature in any HANA implementation. From social media content to corporate documents, this is a game changer!</p>
]]></content:encoded>
			<wfw:commentRss>http://bihappyblog.com/2013/03/18/how-i-loaded-my-blog-into-hana-and-what-i-learned-about-it-once-it-was-there%e2%80%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use SAP BI Publications to solve complex content delivery processes</title>
		<link>http://bihappyblog.com/2013/02/20/use-sap-bi-publications-to-solve-complex-content-delivery-processes/</link>
		<comments>http://bihappyblog.com/2013/02/20/use-sap-bi-publications-to-solve-complex-content-delivery-processes/#comments</comments>
		<pubDate>Thu, 21 Feb 2013 03:32:47 +0000</pubDate>
		<dc:creator>Ron Keler</dc:creator>
				<category><![CDATA[BusinessObjects 4.0]]></category>
		<category><![CDATA[BusnessObjects Publications]]></category>
		<category><![CDATA[SAP BI Publications]]></category>

		<guid isPermaLink="false">http://bihappyblog.com/?p=763</guid>
		<description><![CDATA[One of the most important, and less understood or used, featured of the SAP BI platform (BusinessObjects) is the Publication feature. Publications are essentially a “mass mailing” tool, that allows BI content developers to develop highly sophisticated, personalized and robust delivery mechanism of content directly to users email boxes. In particular, the dynamic recipient list<a href="http://bihappyblog.com/2013/02/20/use-sap-bi-publications-to-solve-complex-content-delivery-processes/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p>One of the most important, and less understood or used, featured of the SAP BI platform (BusinessObjects) is the Publication feature. Publications are essentially a “mass mailing” tool, that allows BI content developers to develop highly sophisticated, personalized and robust delivery mechanism of content directly to users email boxes. In particular, the dynamic recipient list flavor of publications, allow BI users to deliver reporting content to email lists, regardless of whether they are users of the BI platform. This content can be personalized, and delivered based on data driven rules to each user. What this spells is a very powerful, simple and easy to use, mechanism to address many business process issues related to information delivery. Let me describe a case in point:</p>
<p>A professional services firm charges for hours worked by consultants, therefor, timely time entry of consultants’ billable hours is critical to the business operation. To assure consultants do not miss the time entry deadline each week, we can use a publication. How does it work?</p>
<p>The time entry system has a table of users, and their email addresses, as well as table for collecting time entry data with hours entered by week and day.</p>
<p>Two webi reports have been setup to support the publication: the first report is used to generate the dynamic recipient list. The report contains the three required columns for such a list (ID, Name, Email) and has a filter that only retrieves users who are missing time entry for the prior week.</p>
<p>A second report, which will be used as the actual content to send to the users, was also created with the users email address (will be used to personalize the publication and “link” the distribution list to the report), and some text asking the user to enter their time for the missing week.</p>
<p>With the two reports ready to go, all that is left, is the publication setup. The following screen shots describe the publication creation setup. In this case, the mHTML format was used to deliver the report content right in the email body for the users. Enjoy!</p>
<p><a href="http://bihappyblog.com/wp-content/uploads/2013/02/Publication01SourceDoc.png"><img class="alignnone size-full wp-image-764" title="Publication01SourceDoc" src="http://bihappyblog.com/wp-content/uploads/2013/02/Publication01SourceDoc.png" alt="" width="742" height="387" /></a></p>
<p>&nbsp;</p>
<p><a href="http://bihappyblog.com/wp-content/uploads/2013/02/Publication02DynamicReciepients.png"><img class="alignnone size-full wp-image-765" title="Publication02DynamicReciepients" src="http://bihappyblog.com/wp-content/uploads/2013/02/Publication02DynamicReciepients.png" alt="" width="734" height="373" /></a></p>
<p>&nbsp;</p>
<p><a href="http://bihappyblog.com/wp-content/uploads/2013/02/Publication03Personalization.png"><img class="alignnone size-large wp-image-766" title="Publication03Personalization" src="http://bihappyblog.com/wp-content/uploads/2013/02/Publication03Personalization-1024x362.png" alt="" width="600" height="212" /></a></p>
<p>&nbsp;</p>
<p><a href="http://bihappyblog.com/wp-content/uploads/2013/02/Publication04Format.png"><img class="alignnone size-full wp-image-767" title="Publication04Format" src="http://bihappyblog.com/wp-content/uploads/2013/02/Publication04Format.png" alt="" width="933" height="405" /></a></p>
<p>&nbsp;</p>
<p><a href="http://bihappyblog.com/wp-content/uploads/2013/02/Publication05Destination.png"><img class="alignnone size-full wp-image-768" title="Publication05Destination" src="http://bihappyblog.com/wp-content/uploads/2013/02/Publication05Destination.png" alt="" width="1006" height="466" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://bihappyblog.com/2013/02/20/use-sap-bi-publications-to-solve-complex-content-delivery-processes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Infographic style crystal report</title>
		<link>http://bihappyblog.com/2013/02/05/infographic-style-crystal-report/</link>
		<comments>http://bihappyblog.com/2013/02/05/infographic-style-crystal-report/#comments</comments>
		<pubDate>Tue, 05 Feb 2013 05:31:55 +0000</pubDate>
		<dc:creator>Ron Keler</dc:creator>
				<category><![CDATA[BusinessObjects 4.0]]></category>
		<category><![CDATA[Crystal Reports]]></category>
		<category><![CDATA[Data visualization]]></category>
		<category><![CDATA[crystal reports custom viewer]]></category>
		<category><![CDATA[crystal reports infographic]]></category>
		<category><![CDATA[crystal reports ras sdk]]></category>

		<guid isPermaLink="false">http://bihappyblog.com/?p=759</guid>
		<description><![CDATA[In a continued effort to demonstrate the capabilities of the various BusinessObjects reporting tools as adequate in the user interface area, i created this info graphic style crystal report. This report is modeled after my colleague&#8217;s Josh Tapley original InfoGraphic Style dashboard, and follows my example of the InfoGraphic style Webi. All this is simply<a href="http://bihappyblog.com/2013/02/05/infographic-style-crystal-report/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p>In a continued effort to demonstrate the capabilities of the various BusinessObjects reporting tools as adequate in the user interface area, i created this info graphic style crystal report. This report is modeled after my colleague&#8217;s <a href="http://data-ink.com/?p=915">Josh Tapley original InfoGraphic Style dashboard</a>, and follows my example of the <a href="http://bihappyblog.com/2012/11/27/infographic-style-webi/">InfoGraphic style Webi</a>. All this is simply a demonstration of the visual capabilities of these tools, and a statement of BI Happiness that declares that delivering data to users DOES NOT have to be ugly, boring and difficult. To be successful, users must WANT to use the reports, with no users adoption, any BI project is doomed. In this example, a crystal report was used, leveraging images and formatting options, as well as the RAS SDK with a custom viewer to embed the reports in a seamless fashion in a web page. Enjoy!</p>
<p><a href="http://bogoboards.com/stock/crinfographic.jsp"><img class="alignnone size-full wp-image-760" title="CRInfographic" src="http://bihappyblog.com/wp-content/uploads/2013/02/CRInfographic.png" alt="" width="704" height="511" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://bihappyblog.com/2013/02/05/infographic-style-crystal-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>H + The Digital Series &#8211; animated interactive timeline chart</title>
		<link>http://bihappyblog.com/2012/12/27/h-the-digital-series-animated-interactive-timeline-chart/</link>
		<comments>http://bihappyblog.com/2012/12/27/h-the-digital-series-animated-interactive-timeline-chart/#comments</comments>
		<pubDate>Fri, 28 Dec 2012 02:23:55 +0000</pubDate>
		<dc:creator>Ron Keler</dc:creator>
				<category><![CDATA[BI At Large]]></category>
		<category><![CDATA[Data visualization]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[H + Episodes]]></category>
		<category><![CDATA[H + episodes timeline]]></category>
		<category><![CDATA[H + interactive animated timeline]]></category>
		<category><![CDATA[H + timeline chart]]></category>
		<category><![CDATA[H + Web Series]]></category>
		<category><![CDATA[H + web series timeline]]></category>

		<guid isPermaLink="false">http://bihappyblog.com/?p=753</guid>
		<description><![CDATA[A colleague at work recently told me about the web series H +. It sounded interesting, so i went to check it out, and was instantly hooked! For me, this was a brand new genre, and one that fits the new connected world we live in perfectly. Each episode in the series is 3-6 minutes<a href="http://bihappyblog.com/2012/12/27/h-the-digital-series-animated-interactive-timeline-chart/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p>A colleague at work recently told me about the <a href="http://www.youtube.com/user/HplusDigitalSeries">web series H +</a>. It sounded interesting, so i went to check it out, and was instantly hooked! For me, this was a brand new genre, and one that fits the new connected world we live in perfectly. Each episode in the series is 3-6 minutes long, so you can watch the episodes in all kinds of time configurations. The story is thrilling, the production is superb, and the whole experience is riveting. One of the interesting things about the series is the way the plot unfolds, where each episodes jets the viewer into a different time slot, related to &#8220;the event&#8221; (i really don&#8217;t want to spoil anything&#8230;). So in an effort to try and put the pieces together, i created an animated line chart that plots the episodes timeline. Click on the image below to view the animation and mouse over the data points to get episodes info. Enjoy..</p>
<p><a href="http://bihappyblog.com/samples/hplus/timeline5.html"><img class="alignnone size-large wp-image-754" title="hplustimeline" src="http://bihappyblog.com/wp-content/uploads/2012/12/hplustimeline-1024x358.png" alt="" width="600" height="209" /></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://bihappyblog.com/2012/12/27/h-the-digital-series-animated-interactive-timeline-chart/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Recalls dashboard</title>
		<link>http://bihappyblog.com/2012/12/17/recalls-dashboard/</link>
		<comments>http://bihappyblog.com/2012/12/17/recalls-dashboard/#comments</comments>
		<pubDate>Tue, 18 Dec 2012 02:25:17 +0000</pubDate>
		<dc:creator>Ron Keler</dc:creator>
				<category><![CDATA[BI At Large]]></category>
		<category><![CDATA[Data visualization]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Consumer Product Safety Commission]]></category>
		<category><![CDATA[cpsc dashboard html5]]></category>
		<category><![CDATA[visualize product recall data]]></category>

		<guid isPermaLink="false">http://bihappyblog.com/?p=750</guid>
		<description><![CDATA[The Consumer Product Safety Commission (http://www.cpsc.gov/) collects and publishes information about product recalls. The department made its database of recalls information available to the public as a web service, which means we can have fun with this data&#8230; Leveraging our html5 dashboarding framework, I created a dashboard that consumes the web service (allows user to<a href="http://bihappyblog.com/2012/12/17/recalls-dashboard/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p>The Consumer Product Safety Commission (<a href="http://www.cpsc.gov/">http://www.cpsc.gov/</a>) collects and publishes information about product recalls. The department made its database of recalls information available to the public as a web service, which means we can have fun with this data&#8230; Leveraging our html5 dashboarding framework, I created a dashboard that consumes the web service (allows user to select start year for the recalls data) and aggregates the number of recalls based on user selected attributes (like country or manufacturer). The chart display shows categories that had 4 or more recalls in the selected time frame, the Raw Data view dumps the entire data set on the screen. This is interesting stuff.. Enjoy!</p>
<p><a href="http://bihappyblog.com/samples/recalls/recall1.html"><img class="alignnone size-full wp-image-751" title="recalls" src="http://bihappyblog.com/wp-content/uploads/2012/12/recalls.png" alt="" width="784" height="408" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://bihappyblog.com/2012/12/17/recalls-dashboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Play the pie chart Dreidel</title>
		<link>http://bihappyblog.com/2012/12/06/play-the-pie-chart-dreidel/</link>
		<comments>http://bihappyblog.com/2012/12/06/play-the-pie-chart-dreidel/#comments</comments>
		<pubDate>Fri, 07 Dec 2012 03:26:44 +0000</pubDate>
		<dc:creator>Ron Keler</dc:creator>
				<category><![CDATA[BI At Large]]></category>
		<category><![CDATA[Xcelsius]]></category>
		<category><![CDATA[A BI spin on a Chanukah favorite! Play the pie chart dreidel]]></category>

		<guid isPermaLink="false">http://bihappyblog.com/?p=743</guid>
		<description><![CDATA[This Saturday is the first night of Chanukah, the Jewish &#8220;festival of lights&#8221; holiday. One of the games kids play during this holiday is called Dreidel. The Dreidel is essentially a top that has four Hebrew letters marked on four sides. To play the game, kids spin the Dreidel and while it spins, they pick<a href="http://bihappyblog.com/2012/12/06/play-the-pie-chart-dreidel/"> <br /><br /> (Read More...)</a>]]></description>
			<content:encoded><![CDATA[<p>This Saturday is the first night of Chanukah, the Jewish &#8220;festival of lights&#8221; holiday. One of the games kids play during this holiday is called Dreidel. The Dreidel is essentially a top that has four Hebrew letters marked on four sides. To play the game, kids spin the Dreidel and while it spins, they pick a letter from the four possible options. When the Dreidel stops, whoever picked the letter the Dreidel landed on, wins. In the spirit of the holiday, and since I have been working with Xcelsius SP5 and some of its new mobile features, I created a simple pie chart Dreidel game&#8230; Enjoy and happy holidays!<br />
<iframe src="http://bihappyblog.com/download/pieChartDreidel/pieChartDreidel.html" frameborder="0" marginwidth="0" marginheight="0" width="500" height="500"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://bihappyblog.com/2012/12/06/play-the-pie-chart-dreidel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
