ODTUG Aggregator ODTUG Blogs http://localhost:8080 Tue, 25 Apr 2017 16:17:01 +0000 http://aggrssgator.com/ Data Visualization and Advanced Analytics Kscope17 Track Highlights – Kevin McGinley http://www.odtug.com/p/bl/et/blogaid=713&source=1 Here is an overview of Kscope17 sessions Kevin McGinley is most looking forward to and his thoughts on why you should attend them, too: ODTUG http://www.odtug.com/p/bl/et/blogaid=713&source=1 Mon Apr 24 2017 08:08:06 GMT-0400 (EDT) Setting up Oracle Database on Docker http://www.oralytics.com/2017/04/setting-up-oracle-database-on-docker.html <p>A couple of days ago it was <a href="https://blog.docker.com/2017/04/oracle-database-dev-tools-in-docker-store/">announced</a> that several Oracle images were available on the <a href="https://store.docker.com/search?q=oracle&source=verified&type=image">Docker Store</a>.</p> <p>This is by far the easiest Oracle Database install I have every done !</p> <p>You simply have no excuse now for <span style='text-decoration:underline;'>not</span> installing and using an Oracle Database. Just go and do it now!</p> <p>The following steps outlines what I did you get an Oracle 12.1c Database.</p> <p><span style='text-decoration:underline;'>1. Download and Install Docker</span></p><p>There isn't much to say here. Just go to the <a href="https://www.docker.com/">Docker website</a>, select the version docker for your OS, and just install it.</p> <p>You will probably need to create an account with Docker.</p> <p><a href="https://www.docker.com/"><img src="https://lh3.googleusercontent.com/-Ouq0Sh9WveE/WPkh9Hr1FEI/AAAAAAAAMIM/n4yvQH8Izqk/NewImage.png?imgmax=800" alt="NewImage" title="NewImage.png" border="0" width="337" height="232" /></a></p> <p>After Docker is installed it will automatically start and and will be placed in your system tray etc so that it will automatically start each time you restart your laptop/PC.</p> <p><span style='text-decoration:underline;'>2. Adjust the memory allocation</span></p><p>From the system tray open the Docker application. In the Advanced section allocate a bit more memory. This will just make things run a bit smoother. Be a bit careful on how much to allocate.</p> <img src="https://lh3.googleusercontent.com/-ejiJN3ckfAE/WPkmeYUjwVI/AAAAAAAAMIY/6NHZs5ZeBNw/NewImage.png?imgmax=800" alt="NewImage" title="NewImage.png" border="0" width="190" height="223" /> <p>In the General section check the tick-box for automatically backing up Docker VMs. This is assuming you have back-ups setup, for example with Time Machine or something similar.</p> <p><span style='text-decoration:underline;'>3. Download & Edit the Oracle Docker environment File</span></p><p>On the <a href="https://store.docker.com/images/oracle-database-enterprise-edition?tab=description">Oracle Database download Docker webpage</a>, click on the the Get Content button.</p> <p><img src="https://lh3.googleusercontent.com/-JRV5JThwYEU/WPkskSu4TlI/AAAAAAAAMIo/nbnxhzXqmbM/NewImage.png?imgmax=800" alt="NewImage" title="NewImage.png" border="0" width="599" height="135" /></p> <p>You will have to enter some details like your name, company, job title and phone number, then click on the check-box, before clicking on the Get Content button. All of this is necessary for the Oracle License agreement.</p> <p>The next screen lists the Docker Services and Partner Services that you have signed up for.</p><p><img src="https://lh3.googleusercontent.com/--RmLTgbiYzs/WPktV8Q8ScI/AAAAAAAAMIw/8_bRSdpCjT8/NewImage.png?imgmax=800" alt="NewImage" title="NewImage.png" border="0" width="567" height="129" /></p> <p>Click on the Setup button to go to the webpage that contains some of the setup instructions.</p> <p><img src="https://lh3.googleusercontent.com/-BKp2RYM3Hho/WPktiG1XFSI/AAAAAAAAMI0/-2wigSa7Ygc/NewImage.png?imgmax=800" alt="NewImage" title="NewImage.png" border="0" width="515" height="221" /></p> <p>The first thing you need to do is to copy the sample Environment File. Create a new file on your laptop/desktop and paste the environment file contents into the file. There are a few edits you need to make to this file. The following is the edited/modified Environment file that I created and used. The changes are for DB_SID, DB_PASSWD and DB_DOMAIN.</p> <pre><br />####################################################################<br />## Copyright(c) Oracle Corporation 1998,2016. All rights reserved.##<br />## ##<br />## Docker OL7 db12c dat file ##<br />## ##<br />####################################################################<br /><br />##------------------------------------------------------------------<br />## Specify the basic DB parameters<br />##------------------------------------------------------------------<br /><br />## db sid (name)<br />## default : ORCL<br />## cannot be longer than 8 characters<br /><br /><strong>DB_SID=ORCL</strong><br /><br />## db passwd<br />## default : Oracle<br /><br /><strong>DB_PASSWD=oracle</strong><br /><br />## db domain<br />## default : localdomain<br /><br /><strong>DB_DOMAIN=localdomain</strong><br /><br />## db bundle<br />## default : basic<br />## valid : basic / high / extreme<br />## (high and extreme are only available for enterprise edition)<br /><br />DB_BUNDLE=basic<br /><br />## end<br /></pre> <p>I called this file '<code>docker_ora_db.txt</code>'</p> <p><span style='text-decoration:underline;'>4. Download and Configure Oracle Database for Docker</span></p>The following command will download and configure the docker image <pre><br />$ docker run -d --env-file ./docker_ora_db.txt -p 1527:1521 -p 5507:5500 -it --name dockerDB121 --shm-size="8g" store/oracle/database-enterprise:12.1.0.2<br /></pre> <p>This command will create a container called 'dockerDB121'. The 121 at the end indicate the version number of the Oracle Database. If you end up with a number of containers containing different versions of the Oracle Database then you need some way of distinguishing them.</p> <p>Take note of the port mapping in the above command, as you will need this information later.</p> <p>When you run this command, the docker image will be downloaded from the docker website, will be unzipped and the container setup and ready to run.</p> <p><img src="https://lh3.googleusercontent.com/-kXvnz_XNETY/WPnLyFQw_KI/AAAAAAAAMJE/8PuVTt8XdKY/NewImage.png?imgmax=800" alt="NewImage" title="NewImage.png" border="0" width="600" height="120" /></p> <p><span style='text-decoration:underline;'>5. Log-in and Finish the configuration</span></p><p>Although the docker container has been setup, there is still a database configuration to complete. The following images shows that the new containers is there.</p> <p><img src="https://lh3.googleusercontent.com/-xrbnDqIf4gI/WPnR2kP4NWI/AAAAAAAAMJU/bYHNIYavdoA/NewImage.png?imgmax=800" alt="NewImage" title="NewImage.png" border="0" width="600" height="80" /></p> <p>To complete the Database setup, you will need to log into the Docker container.</p> <pre><br />docker exec -it dockerDB121 /bin/bash<br /></pre> <p>Then run the Oracle Database setup and startup script (as the root user).</p> <pre><br />/bin/bash /home/oracle/setup/dockerInit.sh<br /></pre> <img src="https://lh3.googleusercontent.com/-vnY8hgbHAag/WPnUh6myJsI/AAAAAAAAMJg/I5meJvslyJw/NewImage.png?imgmax=800" alt="NewImage" title="NewImage.png" border="0" width="267" height="154" /> <p>This script can take a few minutes to run. On my laptop it took about 2 minutes.</p> <p>When this is finished the terminal session will open as this script goes into a look.</p> <p>To run any other commands in the container you will need to open another terminal session and connect to the Docker container. So go open one now.</p> <p><span style='text-decoration:underline;'>6. Log into the Database in Docker</span></p><p>In a new terminal window, connect to the Docker container and then switch to the oracle user.</p> <pre><br />su - oracle<br /></pre> <p>Check that the Oracle Database processes are running (ps -ef) and then connect as SYSDBA.</p> <pre><br />sqlplus / as sysdba<br /></pre> <p>Let's check out the Database.</p> <pre><br />SQL> select name,DB_UNIQUE_NAME from v$database;<br /><br />NAME DB_UNIQUE_NAME<br />--------- ------------------------------<br />ORCL ORCL<br /><br /><br />SQL> SELECT v.name, v.open_mode, NVL(v.restricted, 'n/a') "RESTRICTED", d.status<br /> FROM v$pdbs v, dba_pdbs d<br /> WHERE v.guid = d.guid<br /> ORDER BY v.create_scn;<br /><br /><br />NAME OPEN_MODE RES STATUS<br />------------------------------ ---------- --- ---------<br />PDB$SEED READ ONLY NO NORMAL<br />PDB1 READ WRITE NO NORMAL<br /></pre> <p>And the <code>tnsnames.ora</code> file contains the following:</p> <pre><br />ORCL = (DESCRIPTION = <br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))<br /> (CONNECT_DATA = <br /> (SERVER = DEDICATED)<br /> (SERVICE_NAME = ORCL.localdomain) ) )<br /><br />PDB1 = (DESCRIPTION =<br /> (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))<br /> (CONNECT_DATA =<br /> (SERVER = DEDICATED)<br /> (SERVICE_NAME = PDB1.localdomain) ) )<br /></pre> <p>You are now up an running with an Docker container running an Oracle 12.1 Databases.</p> <p><span style='text-decoration:underline;'>7. Configure SQL Developer (on Client) to <p>access the Oracle Database on Docker</span></p>You can not use your client tools to connect to the Oracle Database in a Docker Container. Here is a connection setup in SQL Developer.</p> <p><img src="https://lh3.googleusercontent.com/-b1kYD5DlLTU/WPnYktyp04I/AAAAAAAAMJ0/G_Vk0vohK0o/NewImage.png?imgmax=800" alt="NewImage" title="NewImage.png" border="0" width="420" height="250" /></p> <p>Remember that port number mapping I mentioned in step 4 above. See in this SQL Developer connection that the port number is 1527.</p> <br> <p>Thats it. How easy is that. You now have a fully configured Oracle 12.1c Enterprise Edition Database to play with, to have fun and to explore all the wonderful features of the Oracle Database.</p> Brendan Tierney tag:blogger.com,1999:blog-4669933501315263808.post-3826288635805757649 Fri Apr 21 2017 06:05:00 GMT-0400 (EDT) BI-dentity Crisis http://redpillanalytics.com/bi-dentity-crisis/ <p><img width="300" height="225" src="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/15wYr4UtYXYliA-KGAyvSUA.jpeg?fit=300%2C225" class="attachment-medium size-medium wp-post-image" alt="BI-dentity Crisis - Figuring Out That Data is Fluid" srcset="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/15wYr4UtYXYliA-KGAyvSUA.jpeg?w=1920 1920w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/15wYr4UtYXYliA-KGAyvSUA.jpeg?resize=300%2C225 300w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/15wYr4UtYXYliA-KGAyvSUA.jpeg?resize=768%2C575 768w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/15wYr4UtYXYliA-KGAyvSUA.jpeg?resize=1024%2C767 1024w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="4847" data-permalink="http://redpillanalytics.com/bi-dentity-crisis/15wyr4utyxylia-kgayvsua/" data-orig-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/15wYr4UtYXYliA-KGAyvSUA.jpeg?fit=1920%2C1438" data-orig-size="1920,1438" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="BI-dentity Crisis &#8211; Figuring Out That Data is Fluid" data-image-description="&lt;p&gt;BI-dentity Crisis &#8211; Figuring Out That Data is Fluid&lt;/p&gt; " data-medium-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/15wYr4UtYXYliA-KGAyvSUA.jpeg?fit=300%2C225" data-large-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/15wYr4UtYXYliA-KGAyvSUA.jpeg?fit=1024%2C767" /></p><p id="fe7e" class="graf graf--h3 graf-after--figure graf--title">I had just gotten out of a discovery meeting with a client when she said “I’m sure we’re the worst you’ve seen”. The goal of the meeting was to better understand the process they were using, the data source, and how they were consuming that data. Turns out that data was entered into Share Point forms, fed into MS SQL Server, dumped into Access, cleaned up with VBA, and accessed with Tableau and Excel. I’ve seen plenty of scenarios like this in my time as a consultant, and in a previous life, I helped build a solution similar to this. These scenarios are not uncommon, and usually, the business has a problem that needs to be resolved and they figure out a way to do it with the resources they have on hand. Personally, I have no beef with these types of systems. I even like seeing them because it shows how people can problem solve with minimal resources; ingenuity can be a beautiful thing. Sure, like most people in the BI/DI/analytics/(insert all other related buzzwords here) space, I like to come into a client where everything is clean and segmented, but I suppose one of the fun things of this job is unraveling the ball of yarn and untangling the knots.</p> <p id="0360" class="graf graf--p graf-after--p graf--trailing">Now, back to what one of the clients said to me: “I’m sure we’re the worst you’ve seen…” I think it is troubling to hear that kind of self deprecation on such a regular basis. Why? I think that for a few reasons: Business Intelligence and Analytics (BIA) is a spectrum, data is necessary for modern businesses, and most businesses are not like the ones seen in the latest blogs or with the sexiest, newest tech. There are plenty of clients I have worked with that think that since they do not fit into these boxes, they are worst in class. Most need help, which is why I am there in the first place, but even the “best in class” usually need help in more ways than just a technical solution.</p> <h4 id="8b5b" class="graf graf--h4 graf--leading">The BIA Spectrum</h4> <p id="76fa" class="graf graf--p graf-after--h4">I think that part of the issue is based on semantics. To most people, BI and Analytics are defined like this:</p> <ol class="postList"> <li id="da58" class="graf graf--li graf-after--p"><span class="markup--strong markup--li-strong">Business Intelligence:</span> An analysis in which data is viewed post business activity to assess the business via metrics and indicators.</li> <li id="a271" class="graf graf--li graf-after--li"><span class="markup--strong markup--li-strong">Analytics:</span> An analysis which uses past data to make projections as to what could happen.</li> </ol> <p id="b500" class="graf graf--p graf-after--li">The biggest difference here is that BI is backward-looking (into the past), and Analytics is forward-looking (into the future). This is a Boolean point of view, and frankly, unnuanced.</p> <p id="7f66" class="graf graf--p graf-after--p">It also does not take into account the “unmentionable”: Operational Reporting. Yuck, right? Who the hell wants to do <em class="markup--em markup--p-em">that</em>? And that is (usually) the end of the discussion. The unsexiness of Operational Reporting means that it is forever pushed to the side, resulting in belabored sighs from clients claiming that they are “the worst you’ve seen”, just because they still have stuff running with VBA code to make sure the lights stay on and the orders are filled.</p> <p id="546d" class="graf graf--p graf-after--p">I think the duality of the current definition of BIA is wrong. Here is how I perceive the BIA spectrum:</p> <figure id="8962" class="graf graf--figure graf-after--p"> <div class="aspectRatioPlaceholder is-locked"> <div class="aspectRatioPlaceholder-fill"></div> <div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="1*N9yDJVNftQtckpxt6G4Caw.png" data-width="1500" data-height="950" data-action="zoom" data-action-value="1*N9yDJVNftQtckpxt6G4Caw.png" data-scroll="native"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas" width="75" height="47"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" src="https://i2.wp.com/cdn-images-1.medium.com/max/1600/1*N9yDJVNftQtckpxt6G4Caw.png?w=1170&#038;ssl=1" data-src="https://i2.wp.com/cdn-images-1.medium.com/max/1600/1*N9yDJVNftQtckpxt6G4Caw.png?w=1170&#038;ssl=1" data-recalc-dims="1" /></div> </div><figcaption class="imageCaption">In the wild, things are much more fluid than this.</figcaption></figure> <p id="268b" class="graf graf--p graf-after--figure">This captures the entirety of what is happening in the business with reporting data; data that is being used to solve problems. Whether those problems are in the present, past or future is irrelevant, because if we want to have higher quality data, higher quality decisions and higher data accuracy, why should we only care about 2/3rds of the use case for curated data?</p> <h4 id="2bea" class="graf graf--h4 graf-after--p">Why the Modern Business Needs Nuance</h4> <p id="d732" class="graf graf--p graf-after--h4">I think that we can boil down the definitions of those concepts into three simple questions.</p> <p id="96e9" class="graf graf--p graf-after--p"><strong><span class="markup--strong markup--p-strong">Operational Reporting:</span></strong> <em class="markup--em markup--p-em">What is happening?</em></p> <p id="f196" class="graf graf--p graf-after--p"><strong><span class="markup--strong markup--p-strong">Business Intelligence:</span></strong> <em class="markup--em markup--p-em">How are we performing?</em></p> <p id="b734" class="graf graf--p graf-after--p"><span class="markup--strong markup--p-strong"><strong>Analytics:</strong> </span><em class="markup--em markup--p-em">Why do we care?</em></p> <p id="eef8" class="graf graf--p graf-after--p">Here is an example to illustrate the above concept. Let’s pretend that a company called Company A manufactures charging equipment for smartphones, and that they have two product lines: Android, and iOS. When company A sees that the shipments from the warehouse starting to slow because the line workers headed out to the food truck for lunch, that is Operational Reporting. When Company A sees that shipment numbers are down compared to last month and customers are not getting orders by the promised date, that is Business Intelligence. When Company A determines that shipments are down because an increase in customers are not buying Android smart phone chargers, that is Analytics.</p> <p id="55fc" class="graf graf--p graf-after--p">You may argue that this is all semantics, and you may be right. But I think that semantics matter. And, I think this example highlights another thing that is not usually discussed: if operational data can be used with curated data sets seen in BI and Analytic settings, the possibility for insight is greater. With the advent of Internet of Things connectivity, streaming with services like Kafka, and the ability to use nontraditional data types like JSON, integrating this data is a no brainer.</p> <h4 id="e0f6" class="graf graf--h4 graf-after--p">Is the Future Now?</h4> <p id="8a5a" class="graf graf--p graf-after--h4">Many times I come into organizations and see a mindset that what “we really need [is] a new tool”, and that this new technology will magically fix everything. While technological changes do need to happen, and many organizations need to adapt to current technological standards and methods, the tools themselves do not change the underlying issues (more on that later).</p> <p id="1feb" class="graf graf--p graf-after--p">Technologists love the mantra that the future is now. Better yet, they love to say that the future arrives in waves (meaning that the future arrives at different times in different places). That may be true, but I think that simplistic mindset perpetuates a sense of urgency to be an early adopter of the latest technology. Buying and building a foundation for these concepts (or even BIA) takes considerable time, money and effort. This isn’t like heading down to the Apple store and buying a new iPhone every year. These initiatives are usually million dollar efforts that require multiple teams across multiple years. For comparison, how long does it take to buy an iPhone? An afternoon? Even by percentage terms, the amount of effort is not even comparable between these two tasks. Let’s stop pretending that buying a tool will fix the fundamental issue at hand, because in most cases it will not.</p> <p id="36e4" class="graf graf--p graf-after--p">Another concept that we should take a good, hard look at is the “data lake”. I mentioned above that Internet of Things data can be streamed, captured and analyzed to benefit the business. But just because we can stream it and hold on to it, does that mean it has value? I hear many industry talking heads talk about data lakes, big data, algorithms and the like, but what is the use if there is no use case? Most clients I have worked with don’t understand what data they have or how to use it — is it really feasible to think that these clients will directly benefit from a solution like this? Long term, perhaps they will. Short term, there are better initiatives that can bring higher benefits for lower cost and effort.</p> <p id="2027" class="graf graf--p graf-after--p">A better approach is to focus on how we can use, and most importantly think about data. I dare you to go to HBR (a favorite business publication of mine, so I’m not hating here), and search for the term “analytics”. When I conducted this experiment, I had <span class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">1,521</em></span> results returned. So, clearly, people are talking about this topic. What are they saying? Here are some of the titles: “<a class="markup--anchor markup--p-anchor" href="https://medium.com/r/?url=https%3A%2F%2Fhbr.org%2F2016%2F08%2Ffiguring-out-how-it-analytics-and-operations-should-work-together" target="_blank" rel="nofollow" data-href="https://medium.com/r/?url=https%3A%2F%2Fhbr.org%2F2016%2F08%2Ffiguring-out-how-it-analytics-and-operations-should-work-together">Figuring Out How IT, Analytics, and Operations Should Work Together</a>” (Berkooz), “<a class="markup--anchor markup--p-anchor" href="https://medium.com/r/?url=https%3A%2F%2Fhbr.org%2F2016%2F10%2Fhow-an-analytics-mindset-changes-marketing-culture" target="_blank" rel="nofollow" data-href="https://medium.com/r/?url=https%3A%2F%2Fhbr.org%2F2016%2F10%2Fhow-an-analytics-mindset-changes-marketing-culture">How an Analytics Mindset Changes Marketing Culture</a>” (Sweetwood), “<a class="markup--anchor markup--p-anchor" href="https://medium.com/r/?url=https%3A%2F%2Fhbr.org%2F2016%2F08%2Fthe-reason-so-many-analytics-efforts-fall-short" target="_blank" rel="nofollow" data-href="https://medium.com/r/?url=https%3A%2F%2Fhbr.org%2F2016%2F08%2Fthe-reason-so-many-analytics-efforts-fall-short">The Reason So Many Analytics Efforts Fall Short</a>” (McShea, Oakley, Mazzei), and… I could keep going with examples. Each of these articles, and many others seen have great points describing what mistakes were made. I think that many of these mistakes continue to be made because businesses refuse to change their thinking about analytics, reporting, BI or whatever you’d like to call it. Einstein’s definition of insanity is apt here: “doing the same thing over and over and expecting different results”. I would be remiss if I placed the blame squarely on businesses, but consulting partners also have a role to play in this. Being a technical consultant does not necessarily mean only focusing on a technical solution; it is important to advise on the implications of these solutions and how the business should be thinking and acting.</p> <h4 id="1f86" class="graf graf--h4 graf-after--p">Doctor, It Hurts When I Do This</h4> <p id="6d9b" class="graf graf--p graf-after--h4">These attitudes towards data lead to many situations I see with clients. Many times, I feel as though I am the one who needs to broach the topic and feel akin to someone who needs to tell a friend that s/he really needs an Altoid after that falafel pita they had for lunch. Because businesses are so focused on getting things done, they rarely have the time to focus on the self reflection that would lead them to recognizing these issues. These are difficult discussions — but would we rather not have them and let people drown in data quagmire? The items below are the road blocks that I most commonly see as deterrents from accepting a new mindset around data. Until these fundamental data hurdles are jumped, it will be hard for any organization to overcome an old world view and embrace a new one for a new world.</p> <ol class="postList"> <li id="4abe" class="graf graf--li graf-after--p"><strong><span class="markup--strong markup--li-strong">Data is inaccessible.</span></strong> Many times, the people who need the data do not have ready access to it. This may be because data is difficult to extract (maybe they are accountants that do not have database access). Or maybe it is hoarded (someone has access but only sends limited amounts of information). Perhaps the data is disparate (meaning that it is spread thinly throughout the organization, typically in Excel files). These issues prevent people from making decisions and they spend many, many hours finding loopholes, work arounds and writing their own “underground” code and databases to compile this data, when they should be making decisions or correcting it in a different system.</li> <li id="342a" class="graf graf--li graf-after--li"><span class="markup--strong markup--li-strong"><strong>Data is indecipherable</strong>.</span> Sometimes data is accessible but the data means different things to different people. For example, Jimmy may calculate “On Time Order Percentage” as ((Number of On Time Orders / Total Number of Orders) * 100), where Jane may calculate “On Time Order Percentage” as ((Number of On Time Orders / (Total Number of Orders — Number of Cancelled Orders) * 100). Who is right? In some respects, they both are; in some respects, they are both wrong as well. Because no one can clearly understand what is happening, the data loses it’s meaning. It always needs a qualifier, and thus, is value is decreased because no one fully trusts it. This is also an issue when the data set is complex. If someone needs to understand different codes that represent business processes (100 = order placed, 102 = order packed, 103 = order ready for shipping, etc), or if the data does not represent the business process, the common language between the end user and the data is destroyed, and not only does the data become useless, it becomes meaningless.</li> <li id="b31e" class="graf graf--li graf-after--li"><span class="markup--strong markup--li-strong"><strong>Data lacks vision</strong>.</span> Many times I see companies that “just want reports on X”. X could be order management, or accounting, or purchase orders. However, rarely do I see companies create and execute a vision for their corporate data. This requires thinking of data within several tracks. Operational reporting keeps the lights on; what do I need to do right now to keep us moving forward? Business intelligence provides the business with goals, key performance indicators and metrics to track performance over time. Analytics answer the hard questions regarding what is happening in the business and in the general marketplace; these are usually open ended and have a grey area in terms of what the answer is. The lack of vision is a massive detriment to many companies because it means they move disjointedly when it comes to strategy and execution, particularly when it comes to internal resources.</li> </ol> <p id="bf03" class="graf graf--p graf-after--li graf--trailing">For those of you who are in consulting, I am sure you have more points to add to the list. However, the point isn’t about making a list, it is about recognizing the blind spots many companies have in regards to data. It’s hard for any organization to get on board with data investments when it can’t overcome obstacles like the ones above. It is important for all of us to speak out and help transform the landscape of data from a Boolean point of view into a varchar point of view; it may need some error handling, but at least you can get what you want out of it… most of the time.</p> <h4 id="79bb" class="graf graf--h4 graf--leading">An Ending, but not The End</h4> <p id="5435" class="graf graf--p graf-after--h4">All of the above is great food for thought, but how do we implement a plan to combat the mistakes of the past? How can we start a movement that changes how we think about and interact with data? I’ll be following up this blog with strategies and ideas for winning these battles. Until then, remember that the mindset that we bring to the table when talking about data matters as much as problem we are trying to solve.</p> <figure id="3bd5" class="graf graf--figure graf-after--p"> <div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="1*xE1qviqSAFU2a7C7TzmkFA.gif" data-width="500" data-height="240" data-scroll="native"><canvas class="progressiveMedia-canvas js-progressiveMedia-canvas" width="75" height="35"></canvas><img class="progressiveMedia-image js-progressiveMedia-image" src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*xE1qviqSAFU2a7C7TzmkFA.gif?w=1170&#038;ssl=1" data-src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*xE1qviqSAFU2a7C7TzmkFA.gif?w=1170&#038;ssl=1" data-recalc-dims="1" /></div> </figure> Phil Goerdt http://redpillanalytics.com/?p=4841 Thu Apr 20 2017 09:48:08 GMT-0400 (EDT) BI-dentity Crisis https://medium.com/red-pill-analytics/bi-dentity-crisis-658ef4daa8?source=rss----abcc62a8d63e---4 <figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5wYr4UtYXYliA-KGAyvSUA.jpeg" /><figcaption>Photo Credit: <a href="https://unsplash.com/?photo=NsUcpqfcpCE">Drew Collins</a></figcaption></figure><h4>Figuring Out That Data is Fluid</h4><p>I had just gotten out of a discovery meeting with a client when she said “I’m sure we’re the worst you’ve seen”. The goal of the meeting was to better understand the process they were using, the data source, and how they were consuming that data. Turns out that data was entered into Share Point forms, fed into MS SQL Server, dumped into Access, cleaned up with VBA, and accessed with Tableau and Excel. I’ve seen plenty of scenarios like this in my time as a consultant, and in a previous life, I helped build a solution similar to this. These scenarios are not uncommon, and usually, the business has a problem that needs to be resolved and they figure out a way to do it with the resources they have on hand. Personally, I have no beef with these types of systems. I even like seeing them because it shows how people can problem solve with minimal resources; ingenuity can be a beautiful thing. Sure, like most people in the BI/DI/analytics/(insert all other related buzzwords here) space, I like to come into a client where everything is clean and segmented, but I suppose one of the fun things of this job is unraveling the ball of yarn and untangling the knots.</p><p>Now, back to what one of the clients said to me: “I’m sure we’re the worst you’ve seen…” I think it is troubling to hear that kind of self deprecation on such a regular basis. Why? I think that for a few reasons: Business Intelligence and Analytics (BIA) is a spectrum, data is necessary for modern businesses, and most businesses are not like the ones seen in the latest blogs or with the sexiest, newest tech. There are plenty of clients I have worked with that think that since they do not fit into these boxes, they are worst in class. Most need help, which is why I am there in the first place, but even the “best in class” usually need help in more ways than just a technical solution.</p><h4>The BIA Spectrum</h4><p>I think that part of the issue is based on semantics. To most people, BI and Analytics are defined like this:</p><ol><li><strong>Business Intelligence:</strong> An analysis in which data is viewed post business activity to assess the business via metrics and indicators.</li><li><strong>Analytics:</strong> An analysis which uses past data to make projections as to what could happen.</li></ol><p>The biggest difference here is that BI is backward-looking (into the past), and Analytics is forward-looking (into the future). This is a Boolean point of view, and frankly, unnuanced.</p><p>It also does not take into account the “unmentionable”: Operational Reporting. Yuck, right? Who the hell wants to do <em>that</em>? And that is (usually) the end of the discussion. The unsexiness of Operational Reporting means that it is forever pushed to the side, resulting in belabored sighs from clients claiming that they are “the worst you’ve seen”, just because they still have stuff running with VBA code to make sure the lights stay on and the orders are filled.</p><p>I think the duality of the current definition of BIA is wrong. Here is how I perceive the BIA spectrum:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*N9yDJVNftQtckpxt6G4Caw.png" /><figcaption>In the wild, things are much more fluid than this.</figcaption></figure><p>This captures the entirety of what is happening in the business with reporting data; data that is being used to solve problems. Whether those problems are in the present, past or future is irrelevant, because if we want to have higher quality data, higher quality decisions and higher data accuracy, why should we only care about 2/3rds of the use case for curated data?</p><h4>Why the Modern Business Needs Nuance</h4><p>I think that we can boil down the definitions of those concepts into three simple questions.</p><p><strong>Operational Reporting:</strong> <em>What is happening?</em></p><p><strong>Business Intelligence:</strong> <em>How are we performing?</em></p><p><strong>Analytics: </strong><em>Why do we care?</em></p><p>Here is an example to illustrate the above concept. Let’s pretend that a company called Company A manufactures charging equipment for smartphones, and that they have two product lines: Android, and iOS. When company A sees that the shipments from the warehouse starting to slow because the line workers headed out to the food truck for lunch, that is Operational Reporting. When Company A sees that shipment numbers are down compared to last month and customers are not getting orders by the promised date, that is Business Intelligence. When Company A determines that shipments are down because an increase in customers are not buying Android smart phone chargers, that is Analytics.</p><p>You may argue that this is all semantics, and you may be right. But I think that semantics matter. And, I think this example highlights another thing that is not usually discussed: if operational data can be used with curated data sets seen in BI and Analytic settings, the possibility for insight is greater. With the advent of Internet of Things connectivity, streaming with services like Kafka, and the ability to use nontraditional data types like JSON, integrating this data is a no brainer.</p><h4>Is the Future Now?</h4><p>Many times I come into organizations and see a mindset that what “we really need [is] a new tool”, and that this new technology will magically fix everything. While technological changes do need to happen, and many organizations need to adapt to current technological standards and methods, the tools themselves do not change the underlying issues (more on that later).</p><p>Technologists love the mantra that the future is now. Better yet, they love to say that the future arrives in waves (meaning that the future arrives at different times in different places). That may be true, but I think that simplistic mindset perpetuates a sense of urgency to be an early adopter of the latest technology. Buying and building a foundation for these concepts (or even BIA) takes considerable time, money and effort. This isn’t like heading down to the Apple store and buying a new iPhone every year. These initiatives are usually million dollar efforts that require multiple teams across multiple years. For comparison, how long does it take to buy an iPhone? An afternoon? Even by percentage terms, the amount of effort is not even comparable between these two tasks. Let’s stop pretending that buying a tool will fix the fundamental issue at hand, because in most cases it will not.</p><p>Another concept that we should take a good, hard look at is the “data lake”. I mentioned above that Internet of Things data can be streamed, captured and analyzed to benefit the business. But just because we can stream it and hold on to it, does that mean it has value? I hear many industry talking heads talk about data lakes, big data, algorithms and the like, but what is the use if there is no use case? Most clients I have worked with don’t understand what data they have or how to use it — is it really feasible to think that these clients will directly benefit from a solution like this? Long term, perhaps they will. Short term, there are better initiatives that can bring higher benefits for lower cost and effort.</p><p>A better approach is to focus on how we can use, and most importantly think about data. I dare you to go to HBR (a favorite business publication of mine, so I’m not hating here), and search for the term “analytics”. When I conducted this experiment, I had <strong><em>1,521</em></strong> results returned. So, clearly, people are talking about this topic. What are they saying? Here are some of the titles: “<a href="https://hbr.org/2016/08/figuring-out-how-it-analytics-and-operations-should-work-together">Figuring Out How IT, Analytics, and Operations Should Work Together</a>” (Berkooz), “<a href="https://hbr.org/2016/10/how-an-analytics-mindset-changes-marketing-culture">How an Analytics Mindset Changes Marketing Culture</a>” (Sweetwood), “<a href="https://hbr.org/2016/08/the-reason-so-many-analytics-efforts-fall-short">The Reason So Many Analytics Efforts Fall Short</a>” (McShea, Oakley, Mazzei), and… I could keep going with examples. Each of these articles, and many others seen have great points describing what mistakes were made. I think that many of these mistakes continue to be made because businesses refuse to change their thinking about analytics, reporting, BI or whatever you’d like to call it. Einstein’s definition of insanity is apt here: “doing the same thing over and over and expecting different results”. I would be remiss if I placed the blame squarely on businesses, but consulting partners also have a role to play in this. Being a technical consultant does not necessarily mean only focusing on a technical solution; it is important to advise on the implications of these solutions and how the business should be thinking and acting.</p><h4>Doctor, It Hurts When I Do This</h4><p>These attitudes towards data lead to many situations I see with clients. Many times, I feel as though I am the one who needs to broach the topic and feel akin to someone who needs to tell a friend that s/he really needs an Altoid after that falafel pita they had for lunch. Because businesses are so focused on getting things done, they rarely have the time to focus on the self reflection that would lead them to recognizing these issues. These are difficult discussions — but would we rather not have them and let people drown in data quagmire? The items below are the road blocks that I most commonly see as deterrents from accepting a new mindset around data. Until these fundamental data hurdles are jumped, it will be hard for any organization to overcome an old world view and embrace a new one for a new world.</p><ol><li><strong>Data is inaccessible.</strong> Many times, the people who need the data do not have ready access to it. This may be because data is difficult to extract (maybe they are accountants that do not have database access). Or maybe it is hoarded (someone has access but only sends limited amounts of information). Perhaps the data is disparate (meaning that it is spread thinly throughout the organization, typically in Excel files). These issues prevent people from making decisions and they spend many, many hours finding loopholes, work arounds and writing their own “underground” code and databases to compile this data, when they should be making decisions or correcting it in a different system.</li><li><strong>Data is indecipherable.</strong> Sometimes data is accessible but the data means different things to different people. For example, Jimmy may calculate “On Time Order Percentage” as ((Number of On Time Orders / Total Number of Orders) * 100), where Jane may calculate “On Time Order Percentage” as ((Number of On Time Orders / (Total Number of Orders — Number of Cancelled Orders) * 100). Who is right? In some respects, they both are; in some respects, they are both wrong as well. Because no one can clearly understand what is happening, the data loses it’s meaning. It always needs a qualifier, and thus, is value is decreased because no one fully trusts it. This is also an issue when the data set is complex. If someone needs to understand different codes that represent business processes (100 = order placed, 102 = order packed, 103 = order ready for shipping, etc), or if the data does not represent the business process, the common language between the end user and the data is destroyed, and not only does the data become useless, it becomes meaningless.</li><li><strong>Data lacks vision.</strong> Many times I see companies that “just want reports on X”. X could be order management, or accounting, or purchase orders. However, rarely do I see companies create and execute a vision for their corporate data. This requires thinking of data within several tracks. Operational reporting keeps the lights on; what do I need to do right now to keep us moving forward? Business intelligence provides the business with goals, key performance indicators and metrics to track performance over time. Analytics answer the hard questions regarding what is happening in the business and in the general marketplace; these are usually open ended and have a grey area in terms of what the answer is. The lack of vision is a massive detriment to many companies because it means they move disjointedly when it comes to strategy and execution, particularly when it comes to internal resources.</li></ol><p>For those of you who are in consulting, I am sure you have more points to add to the list. However, the point isn’t about making a list, it is about recognizing the blind spots many companies have in regards to data. It’s hard for any organization to get on board with data investments when it can’t overcome obstacles like the ones above. It is important for all of us to speak out and help transform the landscape of data from a Boolean point of view into a varchar point of view; it may need some error handling, but at least you can get what you want out of it… most of the time.</p><h4>An Ending, but not The End</h4><p>All of the above is great food for thought, but how do we implement a plan to combat the mistakes of the past? How can we start a movement that changes how we think about and interact with data? I’ll be following up this blog with strategies and ideas for winning these battles. Until then, remember that the mindset that we bring to the table when talking about data matters as much as problem we are trying to solve.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/500/1*xE1qviqSAFU2a7C7TzmkFA.gif" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=658ef4daa8" width="1" height="1"><hr><p><a href="https://medium.com/red-pill-analytics/bi-dentity-crisis-658ef4daa8">BI-dentity Crisis</a> was originally published in <a href="https://medium.com/red-pill-analytics">Red Pill Analytics</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p> Phil Goerdt https://medium.com/p/658ef4daa8 Thu Apr 20 2017 09:47:59 GMT-0400 (EDT) Oracle Database 12.2 New Feature – PDB Lockdown Profiles http://gavinsoorma.com/2017/04/oracle-database-12-2-new-feature-pdb-lockdown-profiles/ <p>In an earlier post I had mentioned one of the new features in Oracle Database 12.2 was the ability to set SGA and PGA memory related parameters even at the individual PDB level. So it enables us to further limit or define the resources which a particular PDB can use and enable a more efficient management of resources in a multitenant environment.</p> <p>We can further in Oracle 12c Release 2 now even limit the operations which can be performed within a particular PDB as well as restrict features which can be used or enabled &#8211; all at the individual PDB level. We can also limit network connectivity a PDB can have by enabling or disabling the use of network related packages like UTL_SMTP,UTL_HTTP, UTL_TCP at the PDB level.</p> <p>This is done via the new 12.2 feature called <strong>Lockdown Profiles</strong>.</p> <p>We create lockdown profiles via the CREATE LOCKDOWN PROFILE statement while connected to the root CDB and after the lockdown profile has been created, we add the required restrictions or limits which we would like to enforce via the ALTER LOCKDOWN PROFILE statement.</p> <p>To assign the lockdown profile to a particular PDB, we use the <code class="codeph">PDB_LOCKDOWN</code> initialization parameter which will contain the name of the lockdown profile we have earlier created.</p> <p>If we set the PDB_LOCKDOWN parameter at the CDB level, it will apply to all the PDB&#8217;s in the CDB. We can also set the PDB_LOCKDOWN parameter at the PDB level and we can maybe have different PDB_LOCKDOWN values for different PDB&#8217;s as we will see in the example below.</p> <p>Let us have a look at an example of PDB Lockdown Profiles at work.</p> <p>In our CDB, we have two pluggable databases PDB1 and PDB2. We want to limit some kind of operations depending on the PDB involved.</p> <p>Our requirements are the following:</p> <ul> <li>We want to ensure that in PDB1 the value for SGA_TARGET cannot be altered &#8211; so even a privileged user cannot allocate additional memory to the PDB. However if memory is available, then PGA allocation can be altered.</li> <li>To shutdown PDB1, it can only be done if connected to the root container and not from within the Pluggable Database itself</li> <li>The Partitioning feature is not available in PDB2</li> </ul> <p>&nbsp;</p> <p><strong>Create the Lockdown Profiles</strong><br /> &nbsp;</p> <pre> SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> create lockdown profile pdb1_profile; Lockdown Profile created. SQL> create lockdown profile pdb2_profile; Lockdown Profile created. </pre> <p>&nbsp;<br /> <strong>Alter Lockdown Profile pdb1_profile</strong><br /> &nbsp;</p> <pre> SQL> alter lockdown profile pdb1_profile disable statement =('ALTER SYSTEM') clause=('SET') OPTION = ('SGA_TARGET'); Lockdown Profile altered. SQL> alter lockdown profile pdb1_profile disable statement =('ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE'); Lockdown Profile altered. </pre> <p>&nbsp;<br /> <strong>Alter Lockdown Profile pdb2_profile</strong><br /> &nbsp;</p> <pre> SQL> alter lockdown profile pdb2_profile DISABLE OPTION = ('PARTITIONING'); Lockdown Profile altered. </pre> <p>&nbsp;<br /> <strong>Enable the Lockdown Profiles for both PDB1 and PDB2 pluggable databases</strong><br /> &nbsp;</p> <pre> SQL> conn / as sysdba Connected. SQL> alter session set container=PDB1; Session altered. SQL> alter system set PDB_LOCKDOWN='PDB1_PROFILE'; System altered. SQL> alter session set container=PDB2; Session altered. SQL> alter system set PDB_LOCKDOWN='PDB2_PROFILE'; System altered. </pre> <p>&nbsp;<br /> <strong><br /> Connect to PDB1 and try and increase the value of the parameter SGA_TARGET and PGA_AGGREGATE_TARGET</strong><br /> &nbsp;<br /> Note that we cannot alter SGA_TARGET because it is prevented by the lockdown profile in place, but we can alter PGA_AGGREGATE_TARGET because the lockdown profile clause only applies to the ALTER SYSTEM SET SGA_TARGET command.<br /> &nbsp;</p> <pre> SQL> alter session set container=PDB1; Session altered. SQL> alter system set sga_target=800m; alter system set sga_target=800m * ERROR at line 1: ORA-01031: insufficient privileges SQL> alter system set pga_aggregate_target=200m; System altered. </pre> <p>&nbsp;<br /> <strong>Connect to PDB2 and try and create a partitioned table</strong><br /> &nbsp;</p> <pre> SQL> CREATE TABLE testme (id NUMBER, name VARCHAR2 (60)) PARTITION BY HASH (id) PARTITIONS 4 ; CREATE TABLE testme * ERROR at line 1: ORA-00439: feature not enabled: Partitioning </pre> <p>&nbsp;<br /> <strong>Connect to PDB1 and try to shutdown the pluggable database</strong><br /> &nbsp;<br /> Note that while we cannot shutdown PDB1, we are able to shutdown PDB2.<br /> &nbsp;</p> <pre> SQL> alter session set container=pdb1; Session altered. SQL> ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE; ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE * ERROR at line 1: ORA-01031: insufficient privileges SQL> alter session set container=pdb2; Session altered. SQL> ALTER PLUGGABLE DATABASE CLOSE IMMEDIATE; Pluggable database altered. </pre> <p>&nbsp;</p> Gavin Soorma http://gavinsoorma.com/?p=7514 Thu Apr 20 2017 03:57:18 GMT-0400 (EDT) Application Express Kscope17 Track Highlights - Jorge Rimblas http://www.odtug.com/p/bl/et/blogaid=710&source=1 Jorge Rimblas, the APEX track lead for ODTUG Kscope17, shares his recommended “don’t miss sessions” at ODTUG Kscope17: ODTUG http://www.odtug.com/p/bl/et/blogaid=710&source=1 Wed Apr 19 2017 15:21:19 GMT-0400 (EDT) SQL-on-Hadoop: Impala vs Drill http://www.rittmanmead.com/blog/2017/04/sql-on-hadoop-impala-vs-drill/ <img src="http://www.rittmanmead.com/blog/content/images/2017/04/ImpalaAcc-5.gif" alt="SQL-on-Hadoop: Impala vs Drill"><p>I recently wrote a blog post about <a href="https://www.rittmanmead.com/blog/2017/04/metadata-modeling-in-the-database-with-analytic-views/">Oracle's Analytic Views</a> and how those can be used in order to provide a simple SQL interface to end users with data stored in a relational database. In today's post I'm expanding a little bit on my horizons by looking at how to effectively query data in Hadoop using SQL. The SQL-on-Hadoop interface is key for many organizations - it allows querying the Big Data world using existing tools (like OBIEE,Tableau, DVD) and skills (SQL).</p> <p>Analytic Views, together with <a href="https://www.rittmanmead.com/blog/2014/07/taking-a-look-at-the-new-oracle-big-data-sql/">Oracle's Big Data SQL</a> provide what we are looking for and have the benefit of unifying the data dictionary and the SQL dialect in use. It should be noted that Oracle Big Data SQL is licensed separately on top of the database and it's available for Exadata, SuperCluster, and 12c Linux Intel Oracle Databases machines only.</p> <p>Nowadays there is a multitude of open-source projects covering the SQL-on-Hadoop problem. In this post I'll look in detail at two of the most relevant: Cloudera Impala and Apache Drill. We'll see details of each technology, define the similarities, and spot the differences. Finally we'll show that Drill is most suited for exploration with tools like Oracle Data Visualization or Tableau while Impala fits in the explanation area with tools like OBIEE.</p> <p>As we'll see later, both the tools are inspired by <a href="https://research.google.com/pubs/pub36632.html">Dremel</a>, a paper published by Google in 2010 that defines a scalable, interactive ad-hoc query system for the analysis of read-only nested data that is the base of Google's BigQuery. Dremel defines two aspects of big data analytics:</p> <ul> <li>A columnar storage format representation for nested data</li> <li>A query engine</li> </ul> <p>The first point inspired Apache Parquet, the columnar storage format available in Hadoop. The second point provides the basis for both Impala and Drill.</p> <h1 id="clouderaimpala">Cloudera Impala</h1> <p>We started blogging about <a href="https://www.rittmanmead.com/blog/2015/05/obiee-11-1-1-9-now-supports-hiveserver2-and-impala-datasources/">Impala</a> a while ago, as soon as it was officially supported by OBIEE, testing it for reporting on top of big data Hadoop platforms. However, we never went into the details of the tool, which is the purpose of the current post.</p> <p><a href="https://www.cloudera.com/products/open-source/apache-hadoop/impala.html">Impala</a> is an open source project inspired by <a href="https://research.google.com/pubs/pub36632.html">Google's Dremel</a> and one of the massively parallel processing (MPP) SQL engines running natively on Hadoop. And as per <a href="https://www.cloudera.com/documentation/enterprise/5-5-x/topics/impala.html">Cloudera definition</a> is a tool that:</p> <blockquote> <p>provides high-performance, low-latency SQL queries on data stored in popular Apache Hadoop file formats. </p> </blockquote> <p>Two important bits to notice:</p> <ul> <li><strong>High performance and low latency SQL queries</strong>: Impala was created to overcome the slowness of Hive, which relied on MapReduce jobs to execute the queries. Impala uses its own set of <a href="https://www.cloudera.com/documentation/enterprise/5-5-x/topics/impala_components.html#intro_components">daemons</a> running on each of the datanodes saving time by: <ul><li>Avoiding the MapReduce job startup latency</li> <li>Compiling the query code for optimal performance</li> <li>Streaming intermediate results in-memory while MapReduces always writing to disk</li> <li>Starting the aggregation as soon as the first fragment starts returning results</li> <li>Caching metadata definitions</li> <li>Gathering tables and columns statistics</li></ul></li> <li><strong>Data stored in popular Apache Hadoop file formats</strong>: Impala uses the Hive metastore database. Databases and tables are shared between both components. The <a href="https://www.cloudera.com/documentation/enterprise/5-5-x/topics/impala_file_formats.html">list of supported file formats</a> include Parquet, Avro, simple Text and SequenceFile amongst others. Choosing the right file format and the compression codec can have enormous impact on performance. Impala also supports, since CDH 5.8 / Impala 2.6, Amazon S3 filesystem for both writing and reading operations.</li> </ul> <p>One of the performance improvements is related to "Streaming intermediate results": Impala works in memory as much as possible, writing on disk only if the data size is too big to fit in memory; as we'll see later this is called optimistic and pipelined query execution. This has immediate benefits compared to standard MapReduce jobs, which for reliability reasons always writes intermediate results to disk. <br> As per this Cloudera <a href="http://blog.cloudera.com/blog/2012/10/cloudera-impala-real-time-queries-in-apache-hadoop-for-real/">blog</a>, the usage of Impala in combination with Parquet data format is able to achieve the performance benefits explained in the Dremel paper.</p> <h2 id="impalaqueryprocess">Impala Query Process</h2> <p>Impala runs a daemon, called <code>impalad</code> on each <a href="https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html#NameNode+and+DataNodes">Datanode</a> (a node storing data in the Hadoop cluster). The query can be submitted to any daemon in the cluster which will act as <strong>coordinator node</strong> for the query. Impala daemons are always connected to the <strong>statestore</strong>, which is a process keeping a central inventory of all available daemons and related health and pushes back the information to all daemons. A third component called <strong>catalog service</strong> checks for metadata changes driven by Impala SQL in order to invalidate related cache entries. Metadata are cached in Impala for performance reasons: accessing metadata from the cache is much faster than checking against the Hive metastore. The catalog service process is in charge of keeping Impala's metadata cache in sync with the Hive metastore. </p> <p>Once the query is received, the coordinator verifies if the query is valid against the Hive metastore, then information about data location is retrieved from the <a href="https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html#NameNode+and+DataNodes">Namenode</a> (the node in charge of storing the list of blocks and related location in the datanodes), it fragments the query and distribute the fragments to other <code>impalad</code> daemons to execute the query. All the daemons read the needed data blocks, process the query, and stream partial result to the coordinator (avoiding the write to disk), which collects all the results and delivers it back to the requester. The result is returned as soon as it's available: certain SQL operations like aggregations or order by require all the input to be available before Impala can return the end result, while others, like a select of pre-existing columns without a order by can be returned with only partial results.</p> <p><img width="600px" alt="SQL-on-Hadoop: Impala vs Drill" src="http://www.rittmanmead.com/blog/content/images/2017/04/ImpalaAcc-4.gif"> </p> <h1 id="apachedrill">Apache Drill</h1> <p>Defining <a href="https://drill.apache.org">Apache Drill</a> as SQL-on-Hadoop is limiting: also inspired by <a href="https://research.google.com/pubs/pub36632.html">Google's Dremel</a> is a distributed <strong>datasource agnostic</strong> query engine. The datasource agnostic part is very relevant: Drill is not closely coupled with Hadoop, in fact it can query a variety of sources like MongoDB, Azure Blob Storage, or Google Cloud Storage amongst others. </p> <p>One of the most important features is that <strong>data can be queried schema-free</strong>: there is no need of defining the data structure or schema upfront - users can simply point the query to a file directory, MongoDB collection or Amazon S3 bucket and Drill will take care of the rest. For more details, check our <a href="https://www.rittmanmead.com/blog/2016/08/an-introduction-to-apache-drill/">overview</a> of the tool. One of Apache Drill's objectives is cutting down the data modeling and transformation effort providing a zero-day analysis as explained in this <a href="https://www.youtube.com/watch?v=HITzj3ihSUk">MapR video</a>. <br> <img width="500px" alt="SQL-on-Hadoop: Impala vs Drill" src="http://www.rittmanmead.com/blog/content/images/2017/04/Drill-Self-Service.png"></p> <p>Drill is designed for high performance on large datasets, with the following core components:</p> <ul> <li><strong>Distributed engine</strong>: Drill processes, called Drillbits, can be installed in many nodes and are the execution engine of the query. Nodes can be added/reduced manually to adjust the performances. Queries can be sent to any Drillbit in the cluster that will act as Foreman for the query.</li> <li><strong>Columnar execution</strong>: Drill is optimized for columnar storage (e.g. Parquet) and execution using the hierarchical and columnar in-memory data model.</li> <li><strong>Vectorization</strong>: Drill take advantage of the modern CPU's design - operating on record batches rather than iterating on single values.</li> <li><strong>Runtime compilation</strong>: Compiled code is faster than interpreted code and is generated ad-hoc for each query.</li> <li><strong>Optimistic and pipelined query execution</strong>: Drill assumes that none of the processes will fail and thus does all the pipeline operation in memory rather than writing to disk - writing on disk only when memory isn't sufficient. </li> </ul> <h2 id="drillqueryprocess">Drill Query Process</h2> <p>Like Impala's <code>impalad</code>, Drill's main component is the <strong>Drillbit</strong>: a process running on each active Drill node that is capable of coordinating, planning, executing and distributing queries. Installing Drillbit on all of Hadoop's data nodes is not compulsory, however if done gives Drill the ability to achieve the data locality: execute the queries where the data resides without the need of moving it via network. </p> <p>When a query is submitted against Drill, a client/application is sending a SQL statement to a Drillbit in the cluster (any Drillbit can be chosen), which will act as <strong>Foreman</strong> (coordinator in Impala terminology) that will parse the SQL and convert it into a logical plan composed by operators. The next step is the <strong>cost-based optimizer</strong> which, based on optimizations like rule/cost based, data locality and storage engine options, rearranges operations to generate the optimal physical plan. The Foreman then divides the physical plan in phases, called <strong>fragments</strong>, which are organised in a tree and executed in parallel against the data sources. The results are then sent back to the client/application. The following image taken from <a href="https://drill.apache.org/docs/drill-query-execution/">drill.apache.org</a> explains the full process:</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/04/Drill-Execution-Plan.png" alt="SQL-on-Hadoop: Impala vs Drill"></p> <h1 id="similaritiesanddifferences">Similarities and Differences</h1> <p>As we saw above, Drill and Impala have a similar structure - both take advantage of always on daemons (faster compared to the start of a MapReduce job) and assume an optimistic query execution passing results in cache. The code compilation and the distributed engine are also common to both, which are optimized for columnar storage types like Parquet.</p> <p>There are, however, several differences. Impala works only on top of the Hive metastore while Drill supports a larger variety of data sources and can link them together on the fly in the same query. For example, implicit schema-defined files like JSON and XML, which are not supported natively by Impala, can be read <a href="https://www.rittmanmead.com/blog/2016/11/using-sql-to-query-json-files-with-apache-drill/">immediately by Drill</a>. <br> Drill usually doesn't require a metadata definition done upfront, while for Impala, a <em>view</em> or <em>external table</em> has to be declared before querying. Following this point there is no concept of a central and persistent metastore, and there is no metadata repository to manage just for Drill. In OBIEE's world, both <a href="https://www.rittmanmead.com/blog/2015/05/connecting-obiee-11-1-1-9-to-hive-hbase-and-impala-tables-for-a-dw-offloading-project/">Impala</a> and <a href="https://www.rittmanmead.com/blog/2016/08/using-apache-drill-with-obiee-12c/">Drill</a> are supported data sources. The same applies to Data Visualization Desktop. <br> <img src="http://www.rittmanmead.com/blog/content/images/2017/04/DVD-Impala-Drill.png" alt="SQL-on-Hadoop: Impala vs Drill"></p> <p>The aim of this article isn't a performance-wise comparison since those depends on a huge amount of factors including data types, file format, configurations, and query types. A comparison dated back in 2015 can be found <a href="http://allegro.tech/2015/06/fast-data-hackathon.html">here</a>. Please be aware that there are newer versions of the tools since this comparison, which bring a lot of changes and improvements for both projects in terms of performance.</p> <h1 id="conclusion">Conclusion</h1> <p>Impala and Drill share a similar structure - both inspired by Google's Dremel - relying on always active daemons deployed on cluster nodes to provide the best query performances on top of Big Data data structures. So which one to choose and when? <br> As described, the capability of Apache Drill to query a raw data-source without requiring an upfront metadata definition makes the tool perfect for insights discovery on top of raw data. The capacity of joining data coming from one or more <a href="https://drill.apache.org/docs/storage-plugin-registration/">storage plugins</a> in a unique query makes the mash-up of disparate data sources easy and immediate. Data science and prototyping before the design of a reporting schema are perfect use cases of Drill. However, as part of the discovery phase, a metadata definition layer is usually added on top of the data sources. This makes Impala a good candidate for reporting queries. <br> Summarizing, if all the data points are already modeled in the Hive metastore, then Impala is your perfect choice. If instead, you need a mashup with external sources, or need work directly with raw data formats (e.g. JSON), then Drill's auto-exploration and openness capabilities are what you're looking for. <br> Even though both tools are fully compatible with Oracle BIEE and Data Visualization (DV), due to Drill's data exploration nature, it could be considered more in line with DV use cases, while Impala is more suitable for standard reporting like OBIEE. The decision on tooling highly depends on the specific use case - source data types, file formats and configurations have deep impact on the agility of the business analytics process and query performance.</p> <p>If you want to know more about Apache Drill, Impala and the use cases we have experienced, don't hesitate to <a href="mailto:info+ftdi@rittmanmead.com">contact us</a>!</p> Francesco Tisiot b5470339-7405-45f9-ae30-6616d95f4548 Wed Apr 19 2017 11:01:21 GMT-0400 (EDT) Tunneling Through the Clouds https://medium.com/red-pill-analytics/tunneling-through-the-clouds-10a2a5998a62?source=rss----abcc62a8d63e---4 <figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eaImuGcaZVptXt2pprj1cw.jpeg" /></figure><h4>Oracle Cloud and SSH Tunneling</h4><p>That title sounds a little weird, tunnels go through the ground and clouds are those fluffy things that float in the sky. However when we are talking about Oracle Cloud and SSH tunneling things make a lot more sense. Although this blog is specific to the Oracle Cloud Database, tunneling is a generic technique and will work with other cloud providers and your own on-premises systems.</p><h4>Before the how, a little of the why.</h4><p>Cloud resources are plugged into the internet — that is, our connection to the cloud database is going to be to the public IP address of the compute node of the database. Exposing the DB listener to the whole internet is probably a bad idea; even with strong passwords in the database, an exposed listener is a sort of ‘have a go at hacking me’ flag. To minimise such risks the Oracle Cloud Compute Node security rules default to no-access for the public internet to the listener. If our client has a known public IP address we could set up a rule to allow just that IP address to access the listener, however this is probably not sustainable in the long term. Many Internet Service Providers (ISP) present multiple pools of addresses and this hopping about of a user’s IP address can cause a lot of problems with the need to edit rules to accommodate changing IP addresses or leave over generous masks in place to allow blocks of addresses to pass. Add to this the reluctance of some corporate networks to allow outbound SQLNet traffic to pass through their routers and we see that it probably best not to access the Cloud database listener over the internet.</p><p>If only there was a way to provide a secure, encrypted connection over the internet to the database that does not use the listener. There is! Step up tunneling. Here we create a secure SSH connection to the Oracle Cloud Compute Node and then create a port redirect on our local computer so that any traffic to that port is translated to an IP address and port on the remote network.</p><h4>Setting it up</h4><p>Before we create an Oracle Cloud Database we have to generate a public / private key pair and to upload the public key to be used as part of the creation process. The ‘master’ private key is precious as it allows you to create as SSH connection to the the DB and perform highly privileged operations in the underlying operating system.</p><p>Obviously, we DO NOT WANT TO USE THIS KEY for our secure tunnel to the database listener, instead we should create a new private / public key pair and a new Linux user specifically for port forwarding. In my examples I am using <strong><em>tunnel_user</em></strong> as the Linux user and <strong><em>cloud_host</em></strong> as the address of the Oracle Cloud Database Public IP Address.</p><p>Oracle has <a href="http://www.oracle.com/webfolder/technetwork/tutorials/obe/cloud/compute-iaas/creating_an_ssh_enabled_user/creating_an_ssh_enabled_user.html">posted</a> a tutorial on Oracle Cloud Linux user creation, we can adapt that to suit our needs. The main difference is that we are not setting up a new administrator user, so we can omit the final stages of the tutorial. In outline the steps are:</p><ol><li>Create a new private / public key pair. My preference is to ssh-keygen on my MacBook to make a RSA 2048-bit key pair, but other tools can do this. In this blog I named the key pair <em>tunnel_user. </em>On my MacBook the key pair is created in my user’s .ssh directory or using conventional Nix-like syntax ~/.ssh (by the way, the tilde sign means ‘home of’: ~ = my home, ~oracle = the oracle user’s home)</li><li>Start a ssh terminal session to the Oracle Cloud Compute Node. Using the ‘master’ private key (the one paired with the public key used to create the database) connect as the opc user. <br><em>ssh -i ~/.shh/MasterKey opc@</em><strong><em>cloud_host</em></strong></li><li>Escalate privileges (<em>sudo su</em>)</li><li>Create a new Linux user<br><em>useradd tunnel_user</em> <br>This user will not need a password as we will only be using the ssh key to access the Cloud Compute Node.</li><li>Create a <em>.ssh</em> directory in the new user’s home directory<br><em>mkdir ~tunnel_user/.ssh</em></li><li>Copy the public key you created for this user into your paste buffer and add it to the authorized_keys file in the .ssh directory (the Oracle tutorial uses <em>echo [my public key] &gt; ~[tunnel user name]/.ssh/authorized_keys </em>to do this, which might overwrite an existing file, so maybe <em>&gt;&gt;</em> is better to use than &gt;).</li><li>Using your prefered text editor add the new user to the <em>AllowUsers</em> line of <em>/etc/sshd_config. </em>Search for the line starting with <em>AllowUsers </em>and edit it for example<br><em>AllowUsers opc oracle </em>becomes<em> AllowUsers opc oracle </em><strong><em>tunnel_user</em></strong></li><li>Change the ownership of the key file to the new user<br><em>chown -R tunnel_user:tunnel_user ~tunnel_user/.ssh</em></li><li>We have now finished with the Oracle Tutorial steps, so <em>exit</em> from root and <em>exit</em> from opc.</li><li>Log in as the new user to verify that the new ssh connection works and then log out — this step is strictly not necessary but it makes debugging simpler at this time<br><em>ssh -i ~/.shh/tunnel_user tunnel_user@cloud_host<br>exit</em></li><li>Log in as opc and <em>sudo</em> to root.</li><li>Modify the new user to use the /sbin/nologin shell<br><em>usermod -s /sbin/nologin tunnel_user.</em></li><li>Exit from root and opc then try connecting to the tunnel_user through shh.<br><em>ssh -i ~/.shh/tunnel_user tunnel_user@cloud_host<br></em>You should be politely refused.</li></ol><p>The Linux compute node is now set for tunnelling with port forwarding but can not be used to create a Linux session.</p><p>As I mentioned earlier, port forwarding is where <strong><em>ALL</em></strong> the network traffic for a specific port is redirected down the shh tunnel to the remote server where it passed to an ip address and port visible to the remote server. The target database does not have to be on the machine we have tunnelled to, it just needs to be network accessible from the remote host</p><p>In my use case the database is running on the compute node and used the default (1521) port. My target database connection is 127.0.0.1:1521. The local port I redirect can be any unused user port. Some people use 1521 as the local port, but that is only suitable if you do not need to connect to any Oracle databases on port 1521 on your local network. Remember too, that if you tunnel to multiple destinations each tunnel will need its own local port number.</p><p>Creating the tunnel is relatively simple. If you are using Oracle SQL Developer 4.1 (or later) we can even do that in the GUI. As long as the connection is open in SQL Developer the tunnel is also available to any of your applications that wish to connect to the database — this includes R Studio, SQLDesktopJ, the OBIEE Admin tool and ODI Studio, in fact any way we can connect to the database using an IP address and port number. As I often need to use SQL Developer for looking at the database this is very convenient for me. You can find simple instructions to set this up <a href="https://blogs.oracle.com/dbaas/entry/connecting_to_a_database_cloud">here</a>. I would make a couple of changes to that method. Firstly, do not use your database create key (MasterKey in my example above), instead use the one created specifically for the tunnel_user. The second change is that we should manually specify the port number we want to use in the redirect; leaving it set as automatically assigned is fine if we are only going to use SQL Developer, however we do need to know the local port number if we are going to use the tunnel to connect to the database from other local clients.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/339/1*E9IH1GOlkQ0DwXmIO7isPA.png" /></figure><p>If you want something a little more light-weight we can use a terminal session to host the tunnel — PuTTY works well if you are into Windows, but as an Apple-fan-boy I would use Apple Terminal.</p><p>In PuTTY we create a new session to connect to the Oracle Cloud compute node and then add our authentication details on the SSH-Authentication tab followed by the tunnel details on the SSH-Tunnel tab finally back to the session tab and save it. Open the session and leave it running. As always with PuTTY you could use a command line connection string: the syntax is very like that for ssh given below</p><p>In a terminal application on Linux or a Mac things are even easier. We just invoke SSH to use our key file and create a tunnel using a command like:</p><p><em>ssh -i ~/.shh/tunnel_user -L 1555:127.0.0.1:1521 tunnel_user@cloud_host -N</em></p><p>The -N at the end of the command is important as this tells shh not to establish a command shell connection.</p><p>Remember, the tunnel is a connection to the remote server, not to the database, we will still need to use JDBC or whatever other protocol (OCI, ODBC etc) to create a database session so we still need a valid Oracle user name and a password. The only things we change in our connection is to use the redirected local port and the address we set up in the tunnel command (in my examples this is port 1555 and IP address 127.0.0.1).</p><p>Happy tunneling folks</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=10a2a5998a62" width="1" height="1"><hr><p><a href="https://medium.com/red-pill-analytics/tunneling-through-the-clouds-10a2a5998a62">Tunneling Through the Clouds</a> was originally published in <a href="https://medium.com/red-pill-analytics">Red Pill Analytics</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p> Pete Scott https://medium.com/p/10a2a5998a62 Wed Apr 19 2017 10:20:47 GMT-0400 (EDT) Tunneling Through the Clouds http://redpillanalytics.com/tunneling-through-the-clouds/ <p><img width="300" height="200" src="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/david-east-144349.jpg?fit=300%2C200" class="attachment-medium size-medium wp-post-image" alt="Tunneling Through the Clouds" srcset="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/david-east-144349.jpg?w=1920 1920w, https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/david-east-144349.jpg?resize=300%2C200 300w, https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/david-east-144349.jpg?resize=768%2C512 768w, https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/david-east-144349.jpg?resize=1024%2C683 1024w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="4837" data-permalink="http://redpillanalytics.com/tunneling-through-the-clouds/david-east-144349/" data-orig-file="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/david-east-144349.jpg?fit=1920%2C1280" data-orig-size="1920,1280" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Tunneling Through the Clouds" data-image-description="&lt;p&gt;Tunneling Through the Cloud&lt;/p&gt; " data-medium-file="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/david-east-144349.jpg?fit=300%2C200" data-large-file="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/david-east-144349.jpg?fit=1024%2C683" /></p><p class="graf graf--h3">That title sounds a little weird, tunnels go through the ground and clouds are those fluffy things that float in the sky. However when we are talking about Oracle Cloud and SSH tunneling things make a lot more sense. Although this blog is specific to the Oracle Cloud Database, tunneling is a generic technique and will work with other cloud providers and your own on-premises systems.</p> <h4 class="graf graf--h4">Before the how, a little of the why.</h4> <p class="graf graf--p">Cloud resources are plugged into the internet — that is, our connection to the cloud database is going to be to the public IP address of the compute node of the database. Exposing the DB listener to the whole internet is probably a bad idea; even with strong passwords in the database, an exposed listener is a sort of ‘have a go at hacking me’ flag. To minimise such risks the Oracle Cloud Compute Node security rules default to no-access for the public internet to the listener. If our client has a known public IP address we could set up a rule to allow just that IP address to access the listener, however this is probably not sustainable in the long term. Many Internet Service Providers (ISP) present multiple pools of addresses and this hopping about of a user’s IP address can cause a lot of problems with the need to edit rules to accommodate changing IP addresses or leave over generous masks in place to allow blocks of addresses to pass. Add to this the reluctance of some corporate networks to allow outbound SQLNet traffic to pass through their routers and we see that it probably best not to access the Cloud database listener over the internet.</p> <p class="graf graf--p">If only there was a way to provide a secure, encrypted connection over the internet to the database that does not use the listener. There is! Step up tunneling. Here we create a secure SSH connection to the Oracle Cloud Compute Node and then create a port redirect on our local computer so that any traffic to that port is translated to an IP address and port on the remote network.</p> <h4 class="graf graf--h4">Setting it up</h4> <p class="graf graf--p">Before we create an Oracle Cloud Database we have to generate a public / private key pair and to upload the public key to be used as part of the creation process. This ‘master’ private key is precious as it allows you to create as SSH connection to the the DB and perform highly privileged operations in the underlying operating system.</p> <p class="graf graf--p">Obviously, we DO NOT WANT TO USE THIS KEY for our secure tunnel to the database listener, instead we should create a new private / public key pair and a new Linux user specifically for port forwarding. In my examples I am using <strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">tunnel_user</em></strong> as the Linux user and <strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">cloud_host</em></strong> as the address of the Oracle Cloud Database Public IP Address.</p> <p class="graf graf--p">Oracle has <a class="markup--anchor markup--p-anchor" href="http://www.oracle.com/webfolder/technetwork/tutorials/obe/cloud/compute-iaas/creating_an_ssh_enabled_user/creating_an_ssh_enabled_user.html" target="_blank" rel="noopener" data-href="http://www.oracle.com/webfolder/technetwork/tutorials/obe/cloud/compute-iaas/creating_an_ssh_enabled_user/creating_an_ssh_enabled_user.html">posted</a> a tutorial on Oracle Cloud Linux user creation, we can adapt that to suit our needs. The main difference is that we are not setting up a new administrator user, so we can omit the final stages of the tutorial. In outline the steps are:</p> <ol class="postList"> <li class="graf graf--li">Create a new private / public key pair. My preference is to ssh-keygen on my MacBook to make a RSA 2048-bit key pair, but other tools can do this. In this blog I named the key pair <em class="markup--em markup--li-em">tunnel_user. </em>On my MacBook the key pair is created in my user’s .ssh directory or using conventional Nix-like syntax ~/.ssh (by the way, the tilde sign means ‘home of’: ~ = my home, ~oracle = the oracle user’s home)</li> <li class="graf graf--li">Start a ssh terminal session to the Oracle Cloud Compute Node. Using the ‘master’ private key (the one paired with the public key used to create the database) connect as the opc user.<br /> <em class="markup--em markup--li-em">ssh -i ~/.shh/MasterKey opc@</em><strong class="markup--strong markup--li-strong"><em class="markup--em markup--li-em">cloud_host</em></strong></li> <li class="graf graf--li">Escalate privileges (<em class="markup--em markup--li-em">sudo su</em>)</li> <li class="graf graf--li">Create a new Linux user<br /> <em class="markup--em markup--li-em">useradd tunnel_user</em><br /> This user will not need a password as we will only be using the ssh key to access the Cloud Compute Node.</li> <li class="graf graf--li">Create a <em class="markup--em markup--li-em">.ssh</em> directory in the new user’s home directory<br /> <em class="markup--em markup--li-em">mkdir ~tunnel_user/.ssh </em></li> <li class="graf graf--li">Copy the public key you created for this user into your paste buffer and add it to the authorized_keys file in the .ssh directory (the Oracle tutorial uses <em class="markup--em markup--li-em">echo [my public key] &gt; ~[tunnel user name]/.ssh/authorized_keys </em>to do this, which might overwrite an existing file, so maybe <em class="markup--em markup--li-em">&gt;&gt;</em> is better to use than &gt;).</li> <li class="graf graf--li">Using your prefered text editor add the new user to the <em class="markup--em markup--li-em">AllowUsers</em> line of <em class="markup--em markup--li-em">/etc/sshd_config. </em>Search for the line starting with <em class="markup--em markup--li-em">AllowUsers </em>and edit it for example<br /> <em class="markup--em markup--li-em">AllowUsers opc oracle </em>becomes<em class="markup--em markup--li-em"> AllowUsers opc oracle </em><strong class="markup--strong markup--li-strong"><em class="markup--em markup--li-em">tunnel_user</em></strong></li> <li class="graf graf--li">Change the ownership of the key file to the new user<br /> <em class="markup--em markup--li-em">chown -R tunnel_user:tunnel_user ~tunnel_user/.ssh</em></li> <li class="graf graf--li">We have now finished with the Oracle Tutorial steps, so <em class="markup--em markup--li-em">exit</em> from root and <em class="markup--em markup--li-em">exit</em> from opc.</li> <li class="graf graf--li">Log in as the new user to verify that the new ssh connection works and then log out — this step is strictly not necessary but it makes debugging simpler at this time<br /> <em class="markup--em markup--li-em">ssh -i ~/.shh/tunnel_user tunnel_user@cloud_host<br /> exit</em></li> <li class="graf graf--li">Log in as opc and <em class="markup--em markup--li-em">sudo</em> to root.</li> <li class="graf graf--li">Modify the new user to use the /sbin/nologin shell<br /> <em class="markup--em markup--li-em">usermod -s /sbin/nologin tunnel_user.</em></li> <li class="graf graf--li">Exit from root and opc then try connecting to the tunnel_user through shh.<br /> <em class="markup--em markup--li-em">ssh -i ~/.shh/tunnel_user tunnel_user@cloud_host<br /> </em>You should be politely refused.</li> </ol> <p class="graf graf--p">The Linux compute node is now set for tunnelling with port forwarding but can not be used to create a Linux session.</p> <p class="graf graf--p">As I mentioned earlier, port forwarding is where <strong class="markup--strong markup--p-strong"><em class="markup--em markup--p-em">ALL</em></strong> the network traffic for a specific port is redirected down the shh tunnel to the remote server where it passed to an ip address and port visible to the remote server. The target database does not have to be on the machine we have tunnelled to, it just needs to be network accessible from the remote host</p> <p class="graf graf--p">In my use case the database is running on the compute node and used the default (1521) port. My target database connection is 127.0.0.1:1521. The local port I redirect can be any unused user port. Some people use 1521 as the local port, but that is only suitable if you do not need to connect to any Oracle databases on port 1521 on your local network. Remember too, that if you tunnel to multiple destinations each tunnel will need its own local port number.</p> <p class="graf graf--p">Creating the tunnel is relatively simple. If you are using Oracle SQL Developer 4.1 (or later) we can even do that in the GUI. As long as the connection is open in SQL Developer the tunnel is also available to any of your applications that wish to connect to the database — this includes R Studio, SQLDesktopJ, the OBIEE Admin tool and ODI Studio, in fact any way we can connect to the database using an IP address and port number. As I often need to use SQL Developer for looking at the database this is very convenient for me. You can find simple instructions to set this up <a class="markup--anchor markup--p-anchor" href="https://blogs.oracle.com/dbaas/entry/connecting_to_a_database_cloud" target="_blank" rel="noopener" data-href="https://blogs.oracle.com/dbaas/entry/connecting_to_a_database_cloud">here</a>. I would make a couple of changes to that method. Firstly, do not use your database create key (MasterKey in my example above), instead use the one created specifically for the tunnel_user. The second change is that we should manually specify the port number we want to use in the redirect; leaving it set as automatically assigned is fine if we are only going to use SQL Developer, however we do need to know the local port number if we are going to use the tunnel to connect to the database from other local clients.</p> <figure class="graf graf--figure"><img class="graf-image aligncenter" src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*E9IH1GOlkQ0DwXmIO7isPA.png?resize=339%2C396&#038;ssl=1" data-image-id="1*E9IH1GOlkQ0DwXmIO7isPA.png" data-width="339" data-height="396" data-recalc-dims="1" /></figure> <p class="graf graf--p">If you want something a little more light-weight we can use a terminal session to host the tunnel — PuTTY works well if you are into Windows, but as an Apple-fan-boy I would use Apple Terminal.</p> <p class="graf graf--p">In PuTTY we create a new session to connect to the Oracle Cloud compute node and then add our authentication details on the SSH-Authentication tab followed by the tunnel details on the SSH-Tunnel tab finally back to the session tab and save it. Open the session and leave it running. As always with PuTTY you could use a command line connection string: the syntax is very like that for ssh given below</p> <p class="graf graf--p">In a terminal application on Linux or a Mac things are even easier. We just invoke SSH to use our key file and create a tunnel using a command like:</p> <p class="graf graf--p"><em class="markup--em markup--p-em">ssh -i ~/.shh/tunnel_user -L 1555:127.0.0.1:1521 tunnel_user@cloud_host -N</em></p> <p class="graf graf--p">The -N at the end of the command is important as this tells shh not to establish a command shell connection.</p> <p class="graf graf--p">Remember, the tunnel is a connection to the remote server, not to the database, we will still need to use JDBC or whatever other protocol (OCI, ODBC etc) to create a database session so we still need a valid Oracle user name and a password. The only things we change in our connection is to use the redirected local port and the address we set up in the tunnel command (in my examples this is port 1555 and IP address 127.0.0.1).</p> <p class="graf graf--p">Happy tunneling folks!</p> Pete Scott http://redpillanalytics.com/?p=4834 Wed Apr 19 2017 10:20:35 GMT-0400 (EDT) Data Visualization - Smart Insights http://beyond-just-data.blogspot.com/2017/04/data-visualization-smart-insights.html <br /><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;">Smart Insights have been available in Oracle Data Visualization Desktop for a few releases and now available in Oracle Analytics Cloud (OAC)<br /><br />So what are Smart Insights?<br />• They provide an at-a-glance assessment of your data<br />• Allows analysts to quickly understand the information the data contains<br />• You can easily see how measures are distributed in various attributes/dimensions<br />• Provides starting point for further data analysis<br /><br />In looking at tabular data it is difficult to see patterns and distribution of measures across dimensions</span><br /><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;"></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-ixSs85eXpBo/WPZ8SVwTU4I/AAAAAAAAK4Y/lm10UJa-hWYnPV71hK8ikw0B3JSm1njzwCEw/s1600/1-TabularData.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="82" src="https://4.bp.blogspot.com/-ixSs85eXpBo/WPZ8SVwTU4I/AAAAAAAAK4Y/lm10UJa-hWYnPV71hK8ikw0B3JSm1njzwCEw/s400/1-TabularData.png" width="400" /></a></div><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;"><br /></span><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;">When we look at the same data via Smart Insights we can see how the data is distributed across </span><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;"><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;">attributes/</span>dimensions.</span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-8f55pr1s6Iw/WPZ8SYo2eRI/AAAAAAAAK4U/8xYBpJ39fdERQOPaW-AEF5b17ZuGGh59gCEw/s1600/2-Profile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="251" src="https://2.bp.blogspot.com/-8f55pr1s6Iw/WPZ8SYo2eRI/AAAAAAAAK4U/8xYBpJ39fdERQOPaW-AEF5b17ZuGGh59gCEw/s400/2-Profile.png" width="400" /></a></div><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;">So how does one access Smart Insights?</span><br /><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;"><br /></span><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;">First add a data source to a project.&nbsp; Then switch to Prepare Mode. Finally switch the view from Data to Visual.</span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-xUUmo9_jKIg/WPaEdkK07zI/AAAAAAAAK48/DqAHgYDc4d0_3HkMKSoKo_QSMLHt6s7ZgCLcB/s1600/3-Prepare.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="58" src="https://4.bp.blogspot.com/-xUUmo9_jKIg/WPaEdkK07zI/AAAAAAAAK48/DqAHgYDc4d0_3HkMKSoKo_QSMLHt6s7ZgCLcB/s400/3-Prepare.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;">The Visual Mode creates a series of simple data visualizations.&nbsp; The initial views are the number of rows of data distributed across all the attributes/dimensions in the data set.</span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-c9DyO8mTnWo/WPZ8SloB9vI/AAAAAAAAK4g/puekSu5LsP4m4R4jO-ZLd00ihsqyu-LoQCEw/s1600/4-ChangeView.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://4.bp.blogspot.com/-c9DyO8mTnWo/WPZ8SloB9vI/AAAAAAAAK4g/puekSu5LsP4m4R4jO-ZLd00ihsqyu-LoQCEw/s400/4-ChangeView.png" width="400" /></a></div><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;"><br /></span><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;"></span><br /><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;">The view can easily be changed from row count to other measures/facts in the data set by changing the Summarize by.</span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-9oZs3yWgEpE/WPZ8SsIbUfI/AAAAAAAAK4k/XFYczDRyVUElxZd7uSQsS-nqu7QiWGYhwCEw/s1600/5-SummarizeBy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="182" src="https://4.bp.blogspot.com/-9oZs3yWgEpE/WPZ8SsIbUfI/AAAAAAAAK4k/XFYczDRyVUElxZd7uSQsS-nqu7QiWGYhwCEw/s400/5-SummarizeBy.png" width="400" /></a></div><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;">Additional properties that help with analyzing the data is flagging whether show null rows in an attribute/dimension.&nbsp; The include others option is useful when the data has many different values in an attribute since the number of values on an axis also referred to as binning is limited.</span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://2.bp.blogspot.com/-56ujDWHdHCE/WPZ8SyyRJCI/AAAAAAAAK4o/wUOSwQua52MSF8AOfzBWMIDIdBclXj9mwCEw/s1600/6-ChangeView.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="206" src="https://2.bp.blogspot.com/-56ujDWHdHCE/WPZ8SyyRJCI/AAAAAAAAK4o/wUOSwQua52MSF8AOfzBWMIDIdBclXj9mwCEw/s400/6-ChangeView.png" width="400" /></a></div><br /><br /><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;"><span style="font-size: small;">The Binning of values on the X and Y Axis follow these <br />• Number of Bars Depends on Data Distribution<br />• Normally 10 bars are shown and all other data is displayed in a bar called Other<br />• If 20% or more of the data falls into the Other the system will break that data into the number of bars needed</span></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-0UVcc3qXE-Y/WPZ8S_Thf2I/AAAAAAAAK4w/K2cRniTYHuks5EWTJBpVsXlNhuet2SAZACEw/s1600/8-Binning.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="142" src="https://4.bp.blogspot.com/-0UVcc3qXE-Y/WPZ8S_Thf2I/AAAAAAAAK4w/K2cRniTYHuks5EWTJBpVsXlNhuet2SAZACEw/s400/8-Binning.png" width="400" /></a></div><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;"><span style="font-size: small;"><br /><br />The style of the visualizations align to the type of data in the attribute/dimension.<br />• Non-numeric or Text - Horizontal bar chart<br />• Date and Time - Line chart<br />• Numeric - Vertical bar chart</span></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-ui7I4Xzv39Y/WPZ8S_F2bEI/AAAAAAAAK4s/iEavtzpEv7wRY_qks_y_UklzFjQgc9iYwCEw/s1600/7-InsightVisualizationTypes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="96" src="https://4.bp.blogspot.com/-ui7I4Xzv39Y/WPZ8S_F2bEI/AAAAAAAAK4s/iEavtzpEv7wRY_qks_y_UklzFjQgc9iYwCEw/s400/7-InsightVisualizationTypes.png" width="400" /></a></div><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;"><span style="font-size: small;"><br /><br />From the samples shown throughout this post one can see how beneficial they are to easily understanding the data, finding initial patterns and providing a starting point for further data analysis.</span></span><br /><span style="font-family: &quot;arial&quot; , &quot;helvetica&quot; , sans-serif;"> </span> Wayne D. Van Sluys tag:blogger.com,1999:blog-7768091516190336427.post-1447226091989786174 Tue Apr 18 2017 17:48:00 GMT-0400 (EDT) ODM Model View Details Views in Oracle 12.2 http://www.oralytics.com/2017/04/odm-model-view-details-views-in-oracle.html <p>A new feature for Oracle Data Mining in Oracle 12.2 is the new Model Details views.</p> <p>In Oracle 11.2.0.3 and up to Oracle 12.1 you needed to use a range of PL/SQL functions (in DBMS_DATA_MINING package) to inspect the details of a data mining/machine learning model using SQL. </p> <p>Check out these previous blog posts for some examples of how to use and extract model details in Oracle 12.1 and earlier versions of the database</p> <p><a href="http://www.oralytics.com/search?updated-max=2012-12-13T23:41:00-08:00&max-results=3&reverse-paginate=true">Association Rules in ODM-Part 3</a></p> <p><a href="http://www.oralytics.com/2012/10/extracting-rules-from-odm-decision-tree.html">Extracting the rules from an ODM Decision Tree model</a></p> <p><a href="http://www.oralytics.com/2016/06/cluster-details-with-oracle-data-mining.html">Cluster Details</a></p> <p><a href="http://www.oralytics.com/2015/04/viewing-models-details-for-decision.html">Viewing Decision Tree Details</a> </p> <p>Instead of these functions there are now a lot of DB views available to inspect the details of a model. The following table summarises these various DB Views. Check out the DB views I've listed after the table, as these views might some some of the ones you might end up using most often.</p> <p>I've now chance of remembering all of these and this table is a quick reference for me to find the DB views I need to use. The naming method used is very confusing but I'm sure in time I'll get the hang of them.</p> <p><strong>NOTE:</strong> For the DB Views I've listed in the following table, you will need to append the name of the ODM model to the view prefix that is listed in the table.</p> <style>table, th, td { border: 1px solid black; border-collapse: collapse; text-align: left; } </style> <table style="width:100%"> <tr> <th>Data Mining Type</th> <th>Algorithm & Model Details</th> <th>12.2 DB View</th> <th>Description</th> </tr> <tr> <td>Association</td> <td>Association Rules</td> <td>DM$VR</td> <td> generated rules for Association Rules</td> </tr> <tr> <td></td> <td>Frequent Itemsets</td> <td>DM$VI</td> <td>describes the frequent itemsets</td> <tr> <td></td> <td>Transaction Itemsets</td> <td>DM$VT</td> <td>describes the transactional itemsets view</td> <tr> <td></td> <td>Transactional Rules</td> <td>DM$VA</td> <td>describes the transactional rule view and transactional itemsets</td> <tr> <td>Classification</td> <td> (General views for Classification models)</td> <td>DM$VT <p>DM$VC</p></td> <td>describes the target distribution for Classification models <p>describes the scoring cost matrix for Classification models</p></td> </tr> <tr> <td></td> <td>Decision Tree</td> <td>DM$VP <p>DM$VI</p> <p>DM$VO</p> <p>DM$VM</p></td> <td>describes the DT hierarchy & the split info for each level in DT <p>describes the statistics associated with individual tree nodes</p> <p>Higher level node description</p> <p>describes the cost matrix used by the Decision Tree build</p></td> </tr> <tr> <td></td> <td>Generalized Linear Model</td> <td>DM$VD <p>DM$VA</p></td> <td>describes model info for Linear Regres & Logistic Regres <p>describes row level info for Linear Regres & Logistic Regres</p></td> </tr> <tr> <td></td> <td>Naive Bayes</td> <td>DM$VP <p>DM$VV</p></td> <td>describes the priors of the targets for Naïve Bayes <p>describes the conditional probabilities of Naïve Bayes model</p></td> </tr> <tr> <td></td> <td>Support Vector Machine</td> <td>DM$VL</td> <td>describes the coefficients of a linear SVM algorithm</td> </tr> <tr> <td>Regression ???</td> <td>Doe</td> <td>80</td> <td>50</td> </tr> <tr> <td>Clustering</td> <td>(General views for Clustering models)</td> <td>DM$VD <p>DM$VA</p> <p>DM$VH</p> <p>DM$VR</p> </td> <td>Cluster model description <p>Cluster attribute statistics</p> <p>Cluster historgram statistics</p> <p>Cluster Rule statistics</p> </td> </tr> <tr> <td></td> <td>k-Means</td> <td>DM$VD <p>DM$VA</p> <p>DM$VH</p> <p>DM$VR</p> </td> <td>k-Means model description <p>k-Means attribute statistics</p> <p>k-Means historgram statistics</p> <p>k-Means Rule statistics</p></td> </tr> <tr> <td></td> <td>O-Cluster</td> <td>DM$VD <p>DM$VA</p> <p>DM$VH</p> <p>DM$VR</p></td> <td>O-Cluster model description <p>O-Cluster attribute statistics</p> <p>O-Cluster historgram statistics</p> <p>O-Cluster Rule statistics</p></td> </tr> <tr> <td></td> <td>Expectation Minimization</td> <td>DM$VO <p>DM$VB</p> <p>DM$VI</p> <p>DM$VF</p> <p>DM$VM</p> <p>DM$VP</p><br></td> <td>describes the EM components <p>the pairwise Kullback–Leibler divergence</p> <p>attribute ranking similar to that of Attribute Importance</p> <p>parameters of multi-valued Bernoulli distributions</p> <p>mean & variance parameters for attributes by Gaussian distribution </p> <p>the coefficients used by random projections to map nested columns to a lower dimensional space</p> </td> </tr> <tr> <td>Feature Extraction</td> <td>Non-negative Matrix Factorization</td> <td>DM$VE <p>DM$VI</p></td> <td>Encoding (H) of a NNMF model <p>H inverse matrix for NNMF model</p></td> </tr> <tr> <td></td> <td>Singular Value Decomposition</td> <td>DM$VE <p>DM$VV</p> <p>DM$VU</p></td> <td>Associated PCA information for both classes of models <p>describes the right-singular vectors of SVD model</p> <p>describes the left-singular vectors of a SVD model</p> </td> </tr> <tr> <td></td> <td>Explicit Semantic Analysis</td> <td>DM$VA <p>DM$VF</p> </td> <td>ESA attribute statistics <p>ESA model features</p></td> </tr> <tr> <td>Feature Section</td> <td>Minimum Description Length</td> <td>DM$VA</td> <td>describes the Attribute Importance as well as the Attribute Importance rank</td> </tr></table> <p>Normalizing and Error Handling views created by ODM Automatic Data Processing (ADP)</p><ul> <li>DM$VN : Normalization and Missing Value Handling</li> <li>DM$VB : Binning</li></ul> <p>Global Model Views</p><ul> <li>DM$VG : Model global statistics</li> <li>DM$VS : Computed model settings</li> <li>DM$VW :Alerts issued during model creation</li></ul> <p>Each one of these new DB views needs their own blog post to explain what informations is being explained in each. I'm sure over time I will get round to most of these.</p> Brendan Tierney tag:blogger.com,1999:blog-4669933501315263808.post-374482624368088660 Tue Apr 18 2017 10:55:00 GMT-0400 (EDT) Custom DV What-If Analysis Using Essbase Data https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/ <p>I got a LinkedIn message from someone last week asking if what-if analyses can be done in OAC’s DV using the Standard Edition (another way: Can you do what-if analyses in DV using EssCS in OAC Standard Edition, meaning no BI)? The answer is yes! To show an example of how this might work, I have chosen a simple budgeting example using personnel management locality and base pay as an example.</p> <p>My source is a cloud Essbase cube (on-premises would work just fine, too) that has actual and budget data for FY2016-2018.</p> <p>Dimensions:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0101.png"><img data-attachment-id="1721" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0101-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0101.png" data-orig-size="1065,523" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0101" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0101.png?w=300&#038;h=147" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0101.png?w=840" class="alignnone size-medium wp-image-1721" src="https://epmqueen.files.wordpress.com/2017/04/image0101.png?w=300&#038;h=147" alt="" width="300" height="147" srcset="https://epmqueen.files.wordpress.com/2017/04/image0101.png?w=300&amp;h=147 300w, https://epmqueen.files.wordpress.com/2017/04/image0101.png?w=600&amp;h=294 600w, https://epmqueen.files.wordpress.com/2017/04/image0101.png?w=150&amp;h=74 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Measures:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0111.png"><img data-attachment-id="1722" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0111-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0111.png" data-orig-size="234,397" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0111" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0111.png?w=177&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0111.png?w=234" class="alignnone size-medium wp-image-1722" src="https://epmqueen.files.wordpress.com/2017/04/image0111.png?w=177&#038;h=300" alt="" width="177" height="300" srcset="https://epmqueen.files.wordpress.com/2017/04/image0111.png?w=177&amp;h=300 177w, https://epmqueen.files.wordpress.com/2017/04/image0111.png?w=88&amp;h=150 88w, https://epmqueen.files.wordpress.com/2017/04/image0111.png 234w" sizes="(max-width: 177px) 100vw, 177px" /></a></p> <p>Where TotalPay = BasePay + LocalityPay</p> <p>I have entered my Budget Version increases for both base pay (General Schedule Increase) and locality pay (Locality Pay Increase) over the previous year’s Actual-&gt;Final pay.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0011.png"><img data-attachment-id="1712" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0011-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0011.png" data-orig-size="562,140" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0011" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0011.png?w=300&#038;h=75" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0011.png?w=562" class="alignnone size-medium wp-image-1712" src="https://epmqueen.files.wordpress.com/2017/04/image0011.png?w=300&#038;h=75" alt="" width="300" height="75" srcset="https://epmqueen.files.wordpress.com/2017/04/image0011.png?w=300&amp;h=75 300w, https://epmqueen.files.wordpress.com/2017/04/image0011.png?w=150&amp;h=37 150w, https://epmqueen.files.wordpress.com/2017/04/image0011.png 562w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>If I build a visualization off the different Versions, I can see how they rank compared to each other. Notice that I have used 2 different Y-axes to show the 2 different types of pay. I wanted to compare them, but the disparity between the two didn’t allow for good visual increases/decreases.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0021.png"><img data-attachment-id="1713" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0021-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0021.png" data-orig-size="1624,902" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0021" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0021.png?w=300&#038;h=167" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0021.png?w=840" class="alignnone size-medium wp-image-1713" src="https://epmqueen.files.wordpress.com/2017/04/image0021.png?w=300&#038;h=167" alt="" width="300" height="167" srcset="https://epmqueen.files.wordpress.com/2017/04/image0021.png?w=300&amp;h=167 300w, https://epmqueen.files.wordpress.com/2017/04/image0021.png?w=600&amp;h=334 600w, https://epmqueen.files.wordpress.com/2017/04/image0021.png?w=150&amp;h=83 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>But what if you wanted to create a new version, on the fly, for what-if analyses without touching Essbase?</p> <p>Create a calculation!</p> <p>To create a new what-if Version in this case, I created a new Base Pay Increase, Locality Pay Increase, and a total of the two. Here are the calculations:</p> <p>Base Pay Increase – OTF (Final)</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0031.png"><img data-attachment-id="1714" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0031-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0031.png" data-orig-size="633,400" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0031" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0031.png?w=300&#038;h=190" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0031.png?w=633" class="alignnone size-medium wp-image-1714" src="https://epmqueen.files.wordpress.com/2017/04/image0031.png?w=300&#038;h=190" alt="" width="300" height="190" srcset="https://epmqueen.files.wordpress.com/2017/04/image0031.png?w=300&amp;h=190 300w, https://epmqueen.files.wordpress.com/2017/04/image0031.png?w=600&amp;h=380 600w, https://epmqueen.files.wordpress.com/2017/04/image0031.png?w=150&amp;h=95 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Locality Pay Increase – OTF (Final)</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0041.png"><img data-attachment-id="1715" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0041-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0041.png" data-orig-size="631,403" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0041" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0041.png?w=300&#038;h=192" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0041.png?w=631" class="alignnone size-medium wp-image-1715" src="https://epmqueen.files.wordpress.com/2017/04/image0041.png?w=300&#038;h=192" alt="" width="300" height="192" srcset="https://epmqueen.files.wordpress.com/2017/04/image0041.png?w=300&amp;h=192 300w, https://epmqueen.files.wordpress.com/2017/04/image0041.png?w=600&amp;h=384 600w, https://epmqueen.files.wordpress.com/2017/04/image0041.png?w=150&amp;h=96 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>You can see that I filtered out just the Final version for calculation using a CASE(If) statement.</p> <p>When I add these two items to the graph (and adjust the visualization properties to add the new Locality Pay Increase calculation to the 2nd Y-axis), I get the following visualization:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0051.png"><img data-attachment-id="1716" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0051-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0051.png" data-orig-size="1623,839" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0051" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0051.png?w=300&#038;h=155" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0051.png?w=840" class="alignnone size-medium wp-image-1716" src="https://epmqueen.files.wordpress.com/2017/04/image0051.png?w=300&#038;h=155" alt="" width="300" height="155" srcset="https://epmqueen.files.wordpress.com/2017/04/image0051.png?w=300&amp;h=155 300w, https://epmqueen.files.wordpress.com/2017/04/image0051.png?w=600&amp;h=310 600w, https://epmqueen.files.wordpress.com/2017/04/image0051.png?w=150&amp;h=78 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I’ve, essentially, created a new Version in my Budget scenario without touching the Essbase cube.</p> <p>Note that I filtered out to only Budget by putting the Scenario Name in the visualization filters and chose “Budget”.</p> <p>Now, if I want to adjust the numbers behind my new Version, it’s as simple as adjusting the calculation, not the Essbase cube!</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0061.png"><img data-attachment-id="1717" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0061-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0061.png" data-orig-size="631,401" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0061" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0061.png?w=300&#038;h=191" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0061.png?w=631" class="alignnone size-medium wp-image-1717" src="https://epmqueen.files.wordpress.com/2017/04/image0061.png?w=300&#038;h=191" alt="" width="300" height="191" srcset="https://epmqueen.files.wordpress.com/2017/04/image0061.png?w=300&amp;h=191 300w, https://epmqueen.files.wordpress.com/2017/04/image0061.png?w=600&amp;h=382 600w, https://epmqueen.files.wordpress.com/2017/04/image0061.png?w=150&amp;h=95 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>You can also add more dimensions to your CASE statement to get a true intersection of Essbase data.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0071.png"><img data-attachment-id="1718" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0071-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0071.png" data-orig-size="631,402" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0071" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0071.png?w=300&#038;h=191" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0071.png?w=631" class="alignnone size-medium wp-image-1718" src="https://epmqueen.files.wordpress.com/2017/04/image0071.png?w=300&#038;h=191" alt="" width="300" height="191" srcset="https://epmqueen.files.wordpress.com/2017/04/image0071.png?w=300&amp;h=191 300w, https://epmqueen.files.wordpress.com/2017/04/image0071.png?w=600&amp;h=382 600w, https://epmqueen.files.wordpress.com/2017/04/image0071.png?w=150&amp;h=96 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Result:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0081.png"><img data-attachment-id="1719" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0081-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0081.png" data-orig-size="1159,695" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0081" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0081.png?w=300&#038;h=180" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0081.png?w=840" class="alignnone size-medium wp-image-1719" src="https://epmqueen.files.wordpress.com/2017/04/image0081.png?w=300&#038;h=180" alt="" width="300" height="180" srcset="https://epmqueen.files.wordpress.com/2017/04/image0081.png?w=300&amp;h=180 300w, https://epmqueen.files.wordpress.com/2017/04/image0081.png?w=600&amp;h=360 600w, https://epmqueen.files.wordpress.com/2017/04/image0081.png?w=150&amp;h=90 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>If I choose the total for the year, I can quickly compare the original Budget numbers with my new “Version”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image0091.png"><img data-attachment-id="1720" data-permalink="https://realtrigeek.com/2017/04/18/custom-dv-what-if-analysis-using-essbase-data/image0091-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image0091.png" data-orig-size="1493,834" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0091" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image0091.png?w=300&#038;h=168" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image0091.png?w=840" class="alignnone size-medium wp-image-1720" src="https://epmqueen.files.wordpress.com/2017/04/image0091.png?w=300&#038;h=168" alt="" width="300" height="168" srcset="https://epmqueen.files.wordpress.com/2017/04/image0091.png?w=300&amp;h=168 300w, https://epmqueen.files.wordpress.com/2017/04/image0091.png?w=600&amp;h=336 600w, https://epmqueen.files.wordpress.com/2017/04/image0091.png?w=150&amp;h=84 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>So, there you go! No need for OAC Enterprise Edition to do simple what-if analyses in DV using Essbase data. Just use custom calculations!</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epmqueen.wordpress.com/1711/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/epmqueen.wordpress.com/1711/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=realtrigeek.com&#038;blog=70089387&#038;post=1711&#038;subd=epmqueen&#038;ref=&#038;feed=1" width="1" height="1" /> Sarah Craynon Zumbrum http://realtrigeek.com/?p=1711 Tue Apr 18 2017 10:51:07 GMT-0400 (EDT) Product Review: APEX R&D’s APEX Office Print https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/ <p>I am going to start this blog post off with a firm statement that I am not being paid in any way, shape, or form to write this blog. I am writing it because it solved a problem I had in, quite possibly, the simplest way possible!</p> <p>Business Case: I have created an APEX application that generates multiple calculations based off measurement readings that needs to be exported to a formatted document (Word or PDF).</p> <p>Business Problem: APEX doesn’t not export formatted Word or PDF (or other Microsoft documents).</p> <p>History &amp; Resolution: I’ve said this many times, but I want to state, again, that I am not an APEX expert. I like to say I’m an APEX basic user. I know enough knowledge to be dangerous, but not revolutionary. With this said, when I tried to implement exporting from APEX, I was surprised to learn that (this wonderful, fun, dynamic) tool does not export to, say, Word or PDF. This was a bit sad and frustrating for me because this was the last piece of my application’s puzzle. At first, I thought it was my lack of knowledge regarding the APEX toolset, but I quickly found out that it was a tool limitation, not a personal skillset limitation. I did some Googling to see what other APEX developers used to get around this feature limitation and one of the first I found was <a href="https://www.apexofficeprint.com/">APEX Office Print</a> (AOP) by APEX R&amp;D. It seemed like a straightforward process to implement, so I went down the rabbit hole to test the tool out in my apex.oracle.com environment.</p> <p>Recall that I am not an APEX developer… I am a BI &amp; EPM person. I work with KPIs, calculations, statistics, and numbers…not hardcore DBA or APEX standard skillsets. So when I say that AOP is easy to install and get up and running, trust me! I am going to show my process to install the tool via an upgrade process since I did not take screenshots around a year ago when I originally set up the tool.</p> <p>After you create a login to the AOP website, you can download the tool based on your APEX implementation type. My APEX installation is the basic (and free!) apex.oracle.com account, so I chose to download the Cloud Package.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image001.png"><img data-attachment-id="1697" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image001-10/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image001.png" data-orig-size="1073,498" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image001" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image001.png?w=300&#038;h=139" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image001.png?w=840" class="alignnone size-medium wp-image-1697" src="https://epmqueen.files.wordpress.com/2017/04/image001.png?w=300&#038;h=139" alt="" width="300" height="139" srcset="https://epmqueen.files.wordpress.com/2017/04/image001.png?w=300&amp;h=139 300w, https://epmqueen.files.wordpress.com/2017/04/image001.png?w=600&amp;h=278 600w, https://epmqueen.files.wordpress.com/2017/04/image001.png?w=150&amp;h=70 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>A zip file is downloaded that contains the files you need to get up and running in a matter of seconds to minutes.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image002.png"><img data-attachment-id="1698" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image002-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image002.png" data-orig-size="376,208" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image002" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image002.png?w=300&#038;h=166" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image002.png?w=376" class="alignnone size-medium wp-image-1698" src="https://epmqueen.files.wordpress.com/2017/04/image002.png?w=300&#038;h=166" alt="" width="300" height="166" srcset="https://epmqueen.files.wordpress.com/2017/04/image002.png?w=300&amp;h=166 300w, https://epmqueen.files.wordpress.com/2017/04/image002.png?w=150&amp;h=83 150w, https://epmqueen.files.wordpress.com/2017/04/image002.png 376w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>The db -&gt; aop_db_pkg.sql is the first script you will use.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image003.png"><img data-attachment-id="1699" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image003-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image003.png" data-orig-size="695,206" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image003" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image003.png?w=300&#038;h=89" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image003.png?w=695" class="alignnone size-medium wp-image-1699" src="https://epmqueen.files.wordpress.com/2017/04/image003.png?w=300&#038;h=89" alt="" width="300" height="89" srcset="https://epmqueen.files.wordpress.com/2017/04/image003.png?w=300&amp;h=89 300w, https://epmqueen.files.wordpress.com/2017/04/image003.png?w=600&amp;h=178 600w, https://epmqueen.files.wordpress.com/2017/04/image003.png?w=150&amp;h=44 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>In APEX, you will Upload this script the “SQL Scripts” area then “Run” the script.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image004.png"><img data-attachment-id="1700" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image004-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image004.png" data-orig-size="1717,214" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image004" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image004.png?w=300&#038;h=37" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image004.png?w=840" class="alignnone size-medium wp-image-1700" src="https://epmqueen.files.wordpress.com/2017/04/image004.png?w=300&#038;h=37" alt="" width="300" height="37" srcset="https://epmqueen.files.wordpress.com/2017/04/image004.png?w=300&amp;h=37 300w, https://epmqueen.files.wordpress.com/2017/04/image004.png?w=594&amp;h=74 594w, https://epmqueen.files.wordpress.com/2017/04/image004.png?w=150&amp;h=19 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Next, I imported the plug-in to my application’s Shared Components -&gt; Plug-ins section:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image005.png"><img data-attachment-id="1701" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image005-10/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image005.png" data-orig-size="567,170" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image005" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image005.png?w=300&#038;h=90" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image005.png?w=567" class="alignnone size-medium wp-image-1701" src="https://epmqueen.files.wordpress.com/2017/04/image005.png?w=300&#038;h=90" alt="" width="300" height="90" srcset="https://epmqueen.files.wordpress.com/2017/04/image005.png?w=300&amp;h=90 300w, https://epmqueen.files.wordpress.com/2017/04/image005.png?w=150&amp;h=45 150w, https://epmqueen.files.wordpress.com/2017/04/image005.png 567w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Note that the last 2 digits corresponds to the version of APEX you are running. If using the cloud version, you look in the lower right-hand portion of your screen to get your details:</p> <p><img data-attachment-id="1702" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image006-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image006.png" data-orig-size="165,19" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image006" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image006.png?w=300&#038;h=35" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image006.png?w=300&#038;h=35" class="alignnone size-medium wp-image-1702" src="https://epmqueen.files.wordpress.com/2017/04/image006.png?w=300&#038;h=35" alt="" srcset="https://epmqueen.files.wordpress.com/2017/04/image006.png 165w, https://epmqueen.files.wordpress.com/2017/04/image006.png?w=150&amp;h=17 150w" sizes="(max-width: 165px) 100vw, 165px" /></p> <p>Once uploaded, I can see my process type plug-in loaded.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image007.png"><img data-attachment-id="1703" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image007-7/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image007.png" data-orig-size="1719,248" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image007" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image007.png?w=300&#038;h=43" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image007.png?w=840" class="alignnone size-medium wp-image-1703" src="https://epmqueen.files.wordpress.com/2017/04/image007.png?w=300&#038;h=43" alt="" width="300" height="43" srcset="https://epmqueen.files.wordpress.com/2017/04/image007.png?w=300&amp;h=43 300w, https://epmqueen.files.wordpress.com/2017/04/image007.png?w=596&amp;h=86 596w, https://epmqueen.files.wordpress.com/2017/04/image007.png?w=150&amp;h=22 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>That’s it for installation!</p> <p>Now to use the tool…it’s the same level of easy…</p> <p>Say you have a template you want to use for AOP. I have a *very* simple example template in Word, shown below.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image008.png"><img data-attachment-id="1704" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image008-10/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image008.png" data-orig-size="356,275" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image008" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image008.png?w=300&#038;h=232" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image008.png?w=356" class="alignnone size-medium wp-image-1704" src="https://epmqueen.files.wordpress.com/2017/04/image008.png?w=300&#038;h=232" alt="" width="300" height="232" srcset="https://epmqueen.files.wordpress.com/2017/04/image008.png?w=300&amp;h=232 300w, https://epmqueen.files.wordpress.com/2017/04/image008.png?w=150&amp;h=116 150w, https://epmqueen.files.wordpress.com/2017/04/image008.png 356w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Notice the parts that I want pulled from the database are in the curly parentheses.</p> <p>I’m going to load this file to my application’s Shared Components -&gt; Static Application Files folder.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image009.png"><img data-attachment-id="1705" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image009-10/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image009.png" data-orig-size="1721,262" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image009" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image009.png?w=300&#038;h=46" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image009.png?w=840" class="alignnone size-medium wp-image-1705" src="https://epmqueen.files.wordpress.com/2017/04/image009.png?w=300&#038;h=46" alt="" width="300" height="46" srcset="https://epmqueen.files.wordpress.com/2017/04/image009.png?w=300&amp;h=46 300w, https://epmqueen.files.wordpress.com/2017/04/image009.png?w=600&amp;h=92 600w, https://epmqueen.files.wordpress.com/2017/04/image009.png?w=150&amp;h=23 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Now I’m going to go to the page where I want to utilize AOP.</p> <p>I’m using it on a button as a dynamic action. To correspond with the numbers below:</p> <p>1. Give the dynamic action a name.</p> <p>2. Choose APEX Office Print (AOP) [Plug-In] as the type.</p> <p>3. Choose Static Application Files as our Template Type since we loaded our Word document there.</p> <p>4. Enter the name of the Word document.</p> <p>5. Enter the SQL (second section below for those details).</p> <p>6. Choose an output file name.</p> <p>7. Choose the type of output you would like.</p> <p>Now, Save and run that page!</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image010.png"><img data-attachment-id="1706" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image010-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image010.png" data-orig-size="1918,906" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image010" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image010.png?w=300&#038;h=142" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image010.png?w=840" class="alignnone size-medium wp-image-1706" src="https://epmqueen.files.wordpress.com/2017/04/image010.png?w=300&#038;h=142" alt="" width="300" height="142" srcset="https://epmqueen.files.wordpress.com/2017/04/image010.png?w=300&amp;h=142 300w, https://epmqueen.files.wordpress.com/2017/04/image010.png?w=600&amp;h=284 600w, https://epmqueen.files.wordpress.com/2017/04/image010.png?w=150&amp;h=71 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>The SQL I used was this:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image011.png"><img data-attachment-id="1707" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image011-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image011.png" data-orig-size="362,303" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image011" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image011.png?w=300&#038;h=251" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image011.png?w=362" class="alignnone size-medium wp-image-1707" src="https://epmqueen.files.wordpress.com/2017/04/image011.png?w=300&#038;h=251" alt="" width="300" height="251" srcset="https://epmqueen.files.wordpress.com/2017/04/image011.png?w=300&amp;h=251 300w, https://epmqueen.files.wordpress.com/2017/04/image011.png?w=150&amp;h=126 150w, https://epmqueen.files.wordpress.com/2017/04/image011.png 362w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Notice that the column aliases correspond to the curly parentheses areas on the Word document.</p> <p>When I click the button to run my dynamic process, I get a Word document:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/04/image012.png"><img data-attachment-id="1708" data-permalink="https://realtrigeek.com/2017/04/17/product-review-apex-rds-apex-office-print/image012-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/04/image012.png" data-orig-size="285,258" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image012" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/04/image012.png?w=300&#038;h=272" data-large-file="https://epmqueen.files.wordpress.com/2017/04/image012.png?w=300&#038;h=272" class="alignnone size-medium wp-image-1708" src="https://epmqueen.files.wordpress.com/2017/04/image012.png?w=300&#038;h=272" alt="" srcset="https://epmqueen.files.wordpress.com/2017/04/image012.png 285w, https://epmqueen.files.wordpress.com/2017/04/image012.png?w=150&amp;h=136 150w" sizes="(max-width: 285px) 100vw, 285px" /></a></p> <p>Perfect and SO simple! That’s it!</p> <p>I want to add that there are certain number formatting options that should be observed when using AOP. With my inexperience with being an Oracle DBA, I struggled a bit to get it all working the first time around. I want to highlight that the support by the APEX R&amp;D team is about the best I have ever encountered. Their response time was within minutes and their patience with an APEX beginner was commendable. I even learned some things about data types from them! When I had issues this past weekend with some output changes, they, again, were extremely responsive and helped me get up and going <em>on the weekend</em>. I have no doubt that they would take care of a large installation just as well (if not better) than they took care of me, an installation that does around 100 printings a year.</p> <p>To conclude, if you are looking for a quick and easy APEX tool or plug-in to print Word, PDF, Excel, PowerPoint, or HTML, this is your tool. Easy to implement and easy to use. …And their support is top notch. Again, I’m not being paid in any way, but I want to share a simple solution to my APEX output issue!</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epmqueen.wordpress.com/1696/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/epmqueen.wordpress.com/1696/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=realtrigeek.com&#038;blog=70089387&#038;post=1696&#038;subd=epmqueen&#038;ref=&#038;feed=1" width="1" height="1" /> Sarah Craynon Zumbrum http://realtrigeek.com/?p=1696 Mon Apr 17 2017 17:21:58 GMT-0400 (EDT) Kscope17 Planning Track Highlights – Edina Chmielarski-White http://www.odtug.com/p/bl/et/blogaid=707&source=1 Edina Chmielarski-White has been leading the Planning Track for three years. She is looking forward to all the Planning track presentations, but here are the ones she doesn’t want to miss: ODTUG http://www.odtug.com/p/bl/et/blogaid=707&source=1 Mon Apr 17 2017 09:59:32 GMT-0400 (EDT) Deleting a large number of groups in PBCS http://garycris.blogspot.com/2017/04/deleting-large-number-of-groups-in-pbcs.html Adjusting to working in the cloud takes some time; there are things we are used to being able to do on-premise where the functionality may be more mature or we have additional utilities to assist us.<br /><br />Recently I ran into an issue in PBCS where we had imported a large number of groups and then decided we did not need them. &nbsp;At first glance it appeared the only way to remove them was one by one via the GUI. &nbsp;Since there were over 500 groups I was not willing to do that. &nbsp;I opened an SR and unfortunately Oracle confirmed there was no way to do it and I would need to submit an enhancement request.<br /><br />I did some poking around on blogs and the documentation, along with some more trial and error and actually figured out a way to do it by altering LCM exports and the Import Settings. &nbsp;Below are the steps I took to accomplish this. &nbsp;I suspect this method might be "unsupported" by Oracle, I'm not sure, so full disclosure that you are doing this at your own risk. &nbsp;Please be sure to take a full back up of your environment before you attempt this in case you have to roll back.<br /><br />With that said, these are the steps to delete groups en masse in PBCS.<br /><br /><br />1. LCM Export your current security, and name the snapshot GROUPS<br /><br /><a href="https://2.bp.blogspot.com/-YxP0VpL-3OA/WPDlXDMRqYI/AAAAAAAAAUY/FukbNlz9OsU5rah8Ht876ahRzVXEqKWHACLcB/s1600/Screen%2BShot%2B2017-04-14%2Bat%2B11.05.41%2BAM.png" imageanchor="1" style="clear: right; display: inline !important; margin-bottom: 1em; margin-left: 1em; text-align: center;"><img border="0" height="131" src="https://2.bp.blogspot.com/-YxP0VpL-3OA/WPDlXDMRqYI/AAAAAAAAAUY/FukbNlz9OsU5rah8Ht876ahRzVXEqKWHACLcB/s400/Screen%2BShot%2B2017-04-14%2Bat%2B11.05.41%2BAM.png" width="400" /></a><br /><br /><br />2. Download the GROUPS Snapshot<div><br /><div><a href="https://3.bp.blogspot.com/-SfnsB523b2o/WPDlx43abKI/AAAAAAAAAUc/q7eF1Bbwa1g1YwcO0KkiMHJUNf6kRAATACLcB/s1600/Screen%2BShot%2B2017-04-14%2Bat%2B11.07.23%2BAM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="145" src="https://3.bp.blogspot.com/-SfnsB523b2o/WPDlx43abKI/AAAAAAAAAUc/q7eF1Bbwa1g1YwcO0KkiMHJUNf6kRAATACLcB/s400/Screen%2BShot%2B2017-04-14%2Bat%2B11.07.23%2BAM.png" width="400" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>3. Once downloaded, extract GROUPS.zip to a temp directory on your PC, such as C:\Temp.&nbsp;</div><div><br />4. Open C:\Temp\GROUPS\HSS-Shared Services\resource\Native Directory\Groups.csv with a text editor.</div><div>&nbsp; &nbsp; &nbsp;- Remove the groups you want to <b>KEEP</b> from the #group section</div><div>&nbsp; &nbsp; &nbsp;- Remove all #group_children sections (you don't need them for delete operation)</div><div><br /></div><div>5. Go to C:\Temp\GROUPS\HSS-Shared Services\resource\Native Directory\Assigned Roles</div><div>&nbsp; &nbsp; &nbsp;- Open the various folders and modify the .csv files in them. &nbsp;You have to remove all references to the groups you are deleting. &nbsp;Leave references to groups that you are keeping.</div><div><ol><ol></ol></ol>6. Now that you are done editing, you can Zip your modified files for re-import to PBCS.</div><div><br /></div><div>*Note that I had a lot of issues when I first tried to re-zip my files. &nbsp;I was getting a lot of errors on upload and import. &nbsp;I will show the method I used that seems to work, this may or may not be optional.</div><div><br /></div><div>-If you do not already have 7zip, download and install it.</div><div>-Open 7zip and navigate to the temp directory where the modified files are located.<ol><ol><ol></ol></ol></ol></div><div>Note it is important that you do not zip the GROUPS folder, you have to archive the folder 'HSS-Shared Services', and the two xml files 'Export.xml' and 'Import.xml' (see screenshot)</div><div><br /></div><div><div style="text-align: start;"><a href="https://1.bp.blogspot.com/-bHeHewc8jxU/WPDrjx8BfvI/AAAAAAAAAUk/mviU8y5PE8o5aSXxSS90BSB5dTX1BuOegCLcB/s1600/Screen%2BShot%2B2017-04-14%2Bat%2B11.32.04%2BAM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="80" src="https://1.bp.blogspot.com/-bHeHewc8jxU/WPDrjx8BfvI/AAAAAAAAAUk/mviU8y5PE8o5aSXxSS90BSB5dTX1BuOegCLcB/s400/Screen%2BShot%2B2017-04-14%2Bat%2B11.32.04%2BAM.png" width="400" /></a></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div></div><div><br /></div><div>-Click the Add button&nbsp;</div><div><br /></div><div>In the 'Add to Archive' options select&nbsp;</div><div>Archive format = Zip&nbsp;</div><div>Compression level = Store</div><div><br /></div><div>(This is a case where other compression methods may work but I had errors with the few I tried. Stored essentially puts the file in a zip container but it doesn't actually compress it. &nbsp;This was the way I got it to import back into PBCS successfully.)</div><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-YH8yuuXJmmY/WPDvjFxEKwI/AAAAAAAAAUo/oHYywQyGDOk-rezi6bovIHbllPpBAsZ0gCLcB/s1600/Screen%2BShot%2B2017-04-14%2Bat%2B11.49.11%2BAM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="400" src="https://1.bp.blogspot.com/-YH8yuuXJmmY/WPDvjFxEKwI/AAAAAAAAAUo/oHYywQyGDOk-rezi6bovIHbllPpBAsZ0gCLcB/s400/Screen%2BShot%2B2017-04-14%2Bat%2B11.49.11%2BAM.png" width="396" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">7. Rename your zip to GROUPSMOD.zip</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">8. Go to PBCS and import your zip file</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-o42_34tVtmI/WPDw5NcX-sI/AAAAAAAAAUs/ZsaMTpLtia04AhzdMmjWZrXag9IZlV3qwCLcB/s1600/Screen%2BShot%2B2017-04-14%2Bat%2B11.54.30%2BAM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="140" src="https://1.bp.blogspot.com/-o42_34tVtmI/WPDw5NcX-sI/AAAAAAAAAUs/ZsaMTpLtia04AhzdMmjWZrXag9IZlV3qwCLcB/s400/Screen%2BShot%2B2017-04-14%2Bat%2B11.54.30%2BAM.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;">9. The next setting is extremely important. &nbsp;You need to tell LCM to Delete instead of add when you import the files back in. &nbsp;Next to the Refresh button is the 'Import Settings' button, it looks like a hammer and wrench. &nbsp;Open 'Import Settings' and change 'Groups and Membership - Import Mode' to 'Delete' and click 'Save and Close'.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://4.bp.blogspot.com/-fO29EGJuZdM/WPDypC1oWiI/AAAAAAAAAUw/X20UQYBPus8y-DRv9uVuLWbO4c64T43-wCLcB/s1600/Screen%2BShot%2B2017-04-14%2Bat%2B12.00.58%2BPM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="95" src="https://4.bp.blogspot.com/-fO29EGJuZdM/WPDypC1oWiI/AAAAAAAAAUw/X20UQYBPus8y-DRv9uVuLWbO4c64T43-wCLcB/s400/Screen%2BShot%2B2017-04-14%2Bat%2B12.00.58%2BPM.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">10. Import your modified LCM</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://3.bp.blogspot.com/-Xdci2B3kqvQ/WPDzJ6AtKuI/AAAAAAAAAU0/_dYfFbEqYRYOTQeHLmBDBeXBoHtr8TmYwCLcB/s1600/Screen%2BShot%2B2017-04-14%2Bat%2B12.04.14%2BPM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="158" src="https://3.bp.blogspot.com/-Xdci2B3kqvQ/WPDzJ6AtKuI/AAAAAAAAAU0/_dYfFbEqYRYOTQeHLmBDBeXBoHtr8TmYwCLcB/s400/Screen%2BShot%2B2017-04-14%2Bat%2B12.04.14%2BPM.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Check the migration status report for Completion</div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-xdV5OIgnlfE/WPDzivi9aiI/AAAAAAAAAU4/B5q7_fdt3REKNOmOl5mmPjt_1DzwlihpgCLcB/s1600/Screen%2BShot%2B2017-04-14%2Bat%2B12.06.01%2BPM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="61" src="https://1.bp.blogspot.com/-xdV5OIgnlfE/WPDzivi9aiI/AAAAAAAAAU4/B5q7_fdt3REKNOmOl5mmPjt_1DzwlihpgCLcB/s400/Screen%2BShot%2B2017-04-14%2Bat%2B12.06.01%2BPM.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Navigate back to Access Control and you should see your groups have been removed.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">***&nbsp;<b>Important</b> - Be sure to go back to 'Import Options' and change it from 'Delete' to the default 'Create or Update'. &nbsp;Failing to do this could result in a big problem the next time someone tries to restore a back up or migrate across environments.</div><div><br /><br /></div></div> Gary Crisci, Oracle Ace tag:blogger.com,1999:blog-5844205335075765519.post-780567371696088795 Fri Apr 14 2017 12:40:00 GMT-0400 (EDT) Stream Me Up (to the Cloud), Scotty https://medium.com/red-pill-analytics/stream-me-up-to-the-cloud-scotty-d7f36316c5a6?source=rss----abcc62a8d63e---4 <figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vMxJLRqFK42rHivVhj5sTQ.jpeg" /></figure><h4>Installing StreamSets Data Collector on Amazon Web Services EC2</h4><p>I’ve had some fun working with StreamSets Data Collector lately and wanted to share how to quickly get up and running on an Amazon Web Services (AWS) Elastic Compute Cloud (EC2) instance and build a simple pipeline.</p><p>For anyone unaware, StreamSets Data Collector is, in their own words, a low-latency ingest infrastructure tool that lets you create continuous data ingest pipelines using a drag and drop UI within an integrated development environment (IDE).</p><p>To be able to follow along, it is encouraged that you have enough working knowledge of AWS to be able to create and start an AWS EC2 instance and create and access an AWS Simple Storage Service (S3) bucket. That being said, these instructions also apply, for the most part, to any linux installation.</p><p>The most important prequisite is to have access to an instance that meets StreamSets installation requirements outlined <a href="https://streamsets.com/documentation/datacollector/latest/help/#Installation/InstallationAndConfig.html%23concept_vzg_n2p_kq">here</a>. I’m running an AWS Red Hat Enterprise Linux (RHEL) t2.micro instance for this demo; you will no doubt want something with a little more horsepower if you intend to use your instance for true development.</p><p>It is important to note that this is just one of many ways to install and configure StreamSets Data Collector. Make sure to check out the <a href="https://streamsets.com">StreamSets site</a> and read through the documentation to determine which method will work best for your use case. Now that the basics (and a slew of acronyms) are covered, we can get started.</p><p>Fire up the AWS EC2 instance and log in. I’m running on a Mac and using the built in terminal; I recommend PuTTY or something similar for folks running Windows.</p><pre>ssh ec2-user@&lt;public_ip&gt; -i &lt;loc_of_pem&gt;/&lt;name_of_pem&gt;.pem</pre><p>Install wget, if you haven’t already.</p><pre>sudo yum install wget</pre><p>Create a new directory for the StreamSets download and navigate to the new directory</p><pre>sudo mkdir /home/ec2-user/StreamSets<br>cd /home/ec2-user/StreamSets</pre><p>Download StreamSets Data Collector using wget. The URL below is for version 2.4.1 rpm install but a new version of Data Collector is likely out by the time this gets published (those guys and gals move quickly!). Be sure to check for the latest version on the <a href="https://streamsets.com/opensource/">StreamSets Data Collector website</a></p><p>Look for the download here:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Ehmoty7lgmM-THGDeq7JiA.png" /></figure><p>You’ll want to right click <em>Full Download (RPM)</em> and select ‘Copy Link’. Replace the link in the command below with the latest and greatest.</p><pre>sudo wget https://archives.streamsets.com/datacollector/2.4.1.0/rpm/streamsets-datacollector-2.4.1.0-all-rpms.tgz</pre><p>Extract the StreamSets Data Collector install files.</p><pre>sudo tar -xzf /home/ec2-user/StreamSets/streamsets-datacollector-2.4.1.0-all-rpms.tgz</pre><p>Install StreamSets using yum/localinstall</p><pre>sudo yum localinstall /home/ec2-user/StreamSets/streamsets-datacollector-2.4.1.0-all-rpms/streamsets*</pre><p>Attempting to start the service reveals there is one step remaining as the command fails.</p><pre>sudo service sdc start</pre><pre>ERROR: sdc has died, see log in &#39;/var/log/sdc&#39;.</pre><p>Note the File descriptors: 32768 line item in the installation requirements</p><p>Running ulimit -n shows 1024, this needs to be ≥32768</p><pre>ulimit -n</pre><pre>1024</pre><p>To increase the limit, edit /etc/security/limits.conf by navigating to /etc/security</p><pre>cd /etc/security</pre><p>As good habits dictate, make a copy of the limits.conf file</p><pre>sudo cp limits.conf orig_limits.conf</pre><p>Edit the limits.conf file</p><pre>sudo vi limits.conf</pre><p>Add the following two lines at the end of the file, setting the limits to a value greater than or equal to 32768</p><pre>* hard nofile 33000<br>* soft nofile 33000</pre><p>Log out of the AWS machine and log back in for the changes to take effect</p><p>Check that the changes were successful by running ulimit -n</p><pre>ulimit -n</pre><pre>33000</pre><p>Start the SDC service</p><pre>sudo service sdc start</pre><p>This message may show up:</p><pre>Unit sdc.service could not be found.</pre><p>The service will start fine. If you’re annoyed enough by the message, stop the service, run the command below, and start the service again</p><pre>sudo systemctl daemon-reload</pre><p>One last thing before we get to building a pipeline. Create a new subdirectory under the streamsets-datacollector directory to store a sample data file.</p><pre>sudo mkdir /opt/streamsets-datacollector/SampleData</pre><p>Create a sample file.</p><pre>sudo vi /opt/streamsets-datacollector/SampleData/TestFile.csv</pre><p>Enter the following records and save the file.</p><pre>Rownum,Descr<br>1,Hello<br>2,World</pre><p>The StreamSets Data Collector user interface (UI) is browser-based. In order to access the UI from your local machine, set up an SSH tunnel to forward port 18630, the port StreamSets runs on, to localhost:18630. Replace the appropriate IP address and .pem information.</p><pre>ssh -N -p 22 ec2-user@&lt;public_ip&gt; -i &lt;loc_of_pem&gt;/&lt;name_of_pem&gt;.pem -L 18630:localhost:18630</pre><p>On the local machine, open a browser, type or paste the following URL and press enter.</p><pre><a href="http://localhost:18630/">http://localhost:18630/</a></pre><p>The StreamSets login page should now be displayed. The initial username/password are admin/admin.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tfSSQg5-2hriBhtJ_jH_eA.png" /><figcaption>StreamSets login page</figcaption></figure><p>In the following steps, we’ll create a pipeline that streams the data from the TestFile.csv file created in the steps above to Amazon S3. First, create a new pipeline and give it a name.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*1z90PdWYAKGl-A6HLicf5A.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Qe60qZKFrybafdIAYDcKbQ.png" /></figure><p>Add an origin and a destination. For this example, I have selected the origin <em>Directory — Basic </em>and the destination <em>Amazon S3 — Amazon Web Services 1.10.59</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ctvU3kNUTSLWfTQTLFYGiQ.png" /></figure><p>Notice that the pipeline will display errors until all required elements are configured.</p><p>Configure the pipeline <em>Error Records</em> to Discard (Library: Basic)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A-t1ZT0iDtNpZOUSjtxrqA.png" /></figure><p>To set up the origin, under <em>Files</em>, configure the <em>File Directory</em> and <em>File Name Pattern</em> fields to /opt/streamsets-datacollector/SampleData and *.csv, respectively.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oreIJO4MRUXeFpyEpa8Zwg.png" /></figure><p>On the <em>Data Format </em>tab, configure the <em>Data Format</em> to Delimited and change the <em>Header Line</em> drop-down to With Header Line</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-vMa0zxFVELpJwVlmJVGfQ.png" /></figure><p>Configure the Amazon S3 items for your <em>Access Key ID</em>, <em>Secret Access Key</em>, and <em>Bucket</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cn_DIIxUGjr7EXN7mDrSGA.png" /></figure><p>Set the <em>Data Format</em> for S3; I’ve chosen Delimited but other options work just fine.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*j8hJWSmjz0zxc1KWT8n1UA.png" /></figure><p>In the top right corner, there are options for previewing and validating the pipeline as well as to start the pipeline. After everything checks out, start the pipeline.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WwfSfHNt3IoHWdYV5k1PLw.png" /></figure><p>The pipeline is alive and moved the data!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*u_NPiSHErNJdkkqeh56E_Q.png" /></figure><p>A review of S3 shows that the file has been created and contains the records that were created in the steps above. Notice that the pipeline is in ‘Running’ status and will continue to stream data from the directory as changes are made or *.csv files are added.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CiORgX8dQVZWanWP52j15A.png" /></figure><p>There you have it. This is just a basic pipeline to move a .csv file from one location to another without any data manipulation and is simply the tip of the iceberg. There is an abundance of options available to manipulate the data as well as technologies that StreamSets Data Collector integrates with that go far beyond this example. Happy streaming!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d7f36316c5a6" width="1" height="1"><hr><p><a href="https://medium.com/red-pill-analytics/stream-me-up-to-the-cloud-scotty-d7f36316c5a6">Stream Me Up (to the Cloud), Scotty</a> was originally published in <a href="https://medium.com/red-pill-analytics">Red Pill Analytics</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p> Mike Fuller https://medium.com/p/d7f36316c5a6 Fri Apr 14 2017 10:48:01 GMT-0400 (EDT) Stream Me Up (to the Cloud), Scotty http://redpillanalytics.com/streammeup/ <p><img width="300" height="200" src="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/paul-green-126960.jpg?fit=300%2C200" class="attachment-medium size-medium wp-post-image" alt="Installing StreamSets Data Collector on Amazon Web Services EC2" srcset="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/paul-green-126960.jpg?w=1920 1920w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/paul-green-126960.jpg?resize=300%2C200 300w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/paul-green-126960.jpg?resize=768%2C512 768w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/paul-green-126960.jpg?resize=1024%2C683 1024w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="4831" data-permalink="http://redpillanalytics.com/streammeup/paul-green-126960/" data-orig-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/paul-green-126960.jpg?fit=1920%2C1280" data-orig-size="1920,1280" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Installing StreamSets Data Collector on Amazon Web Services EC2" data-image-description="&lt;p&gt;Installing StreamSets Data Collector on Amazon Web Services EC2&lt;/p&gt; " data-medium-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/paul-green-126960.jpg?fit=300%2C200" data-large-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/04/paul-green-126960.jpg?fit=1024%2C683" /></p><p class="graf graf--h3">I’ve had some fun working with StreamSets Data Collector lately and wanted to share how to quickly get up and running on an Amazon Web Services (AWS) Elastic Compute Cloud (EC2) instance and build a simple pipeline.</p> <p class="graf graf--p">For anyone unaware, StreamSets Data Collector is, in their own words, a low-latency ingest infrastructure tool that lets you create continuous data ingest pipelines using a drag and drop UI within an integrated development environment (IDE).</p> <p class="graf graf--p">To be able to follow along, it is encouraged that you have enough working knowledge of AWS to be able to create and start an AWS EC2 instance and create and access an AWS Simple Storage Service (S3) bucket. That being said, these instructions also apply, for the most part, to any linux installation.</p> <p class="graf graf--p">The most important prequisite is to have access to an instance that meets StreamSets installation requirements outlined <a class="markup--anchor markup--p-anchor" href="https://streamsets.com/documentation/datacollector/latest/help/#Installation/InstallationAndConfig.html%23concept_vzg_n2p_kq" target="_blank" rel="noopener" data-href="https://streamsets.com/documentation/datacollector/latest/help/#Installation/InstallationAndConfig.html%23concept_vzg_n2p_kq">here</a>. I’m running an AWS Red Hat Enterprise Linux (RHEL) t2.micro instance for this demo; you will no doubt want something with a little more horsepower if you intend to use your instance for true development.</p> <p class="graf graf--p">It is important to note that this is just one of many ways to install and configure StreamSets Data Collector. Make sure to check out the <a class="markup--anchor markup--p-anchor" href="https://streamsets.com" target="_blank" rel="noopener" data-href="https://streamsets.com">StreamSets site</a> and read through the documentation to determine which method will work best for your use case. Now that the basics (and a slew of acronyms) are covered, we can get started.</p> <p class="graf graf--p">Fire up the AWS EC2 instance and log in. I’m running on a Mac and using the built in terminal; I recommend PuTTY or something similar for folks running Windows.</p> <pre class="graf graf--pre">ssh ec2-user@&lt;public_ip&gt; -i &lt;loc_of_pem&gt;/&lt;name_of_pem&gt;.pem</pre> <p class="graf graf--p">Install wget, if you haven’t already.</p> <pre class="graf graf--pre">sudo yum install wget</pre> <p class="graf graf--p">Create a new directory for the StreamSets download and navigate to the new directory</p> <pre class="graf graf--pre">sudo mkdir /home/ec2-user/StreamSets cd /home/ec2-user/StreamSets</pre> <p class="graf graf--p">Download StreamSets Data Collector using wget. The URL below is for version 2.4.1 rpm install but a new version of Data Collector is likely out by the time this gets published (those guys and gals move quickly!). Be sure to check for the latest version on the <a class="markup--anchor markup--p-anchor" href="https://streamsets.com/opensource/" target="_blank" rel="noopener" data-href="https://streamsets.com/opensource/">StreamSets Data Collector website</a></p> <p class="graf graf--p">Look for the download here:</p> <figure class="graf graf--figure"><img class="graf-image" src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*Ehmoty7lgmM-THGDeq7JiA.png?resize=1170%2C520&#038;ssl=1" data-image-id="1*Ehmoty7lgmM-THGDeq7JiA.png" data-width="2458" data-height="1092" data-recalc-dims="1" /></figure> <p class="graf graf--p">You’ll want to right click <em class="markup--em markup--p-em">Full Download (RPM)</em> and select ‘Copy Link’. Replace the link in the command below with the latest and greatest.</p> <pre class="graf graf--pre">sudo wget https://archives.streamsets.com/datacollector/2.4.1.0/rpm/streamsets-datacollector-2.4.1.0-all-rpms.tgz</pre> <p class="graf graf--p">Extract the StreamSets Data Collector install files.</p> <pre class="graf graf--pre">sudo tar -xzf /home/ec2-user/StreamSets/streamsets-datacollector-2.4.1.0-all-rpms.tgz</pre> <p class="graf graf--p">Install StreamSets using yum/localinstall</p> <pre class="graf graf--pre">sudo yum localinstall /home/ec2-user/StreamSets/streamsets-datacollector-2.4.1.0-all-rpms/streamsets*</pre> <p class="graf graf--p">Attempting to start the service reveals there is one step remaining as the command fails.</p> <pre class="graf graf--pre">sudo service sdc start</pre> <pre class="graf graf--pre">ERROR: sdc has died, see log in '/var/log/sdc'.</pre> <p class="graf graf--p">Note the File descriptors: 32768 line item in the installation requirements</p> <p class="graf graf--p">Running ulimit -n shows 1024, this needs to be ≥32768</p> <pre class="graf graf--pre">ulimit -n</pre> <pre class="graf graf--pre">1024</pre> <p class="graf graf--p">To increase the limit, edit /etc/security/limits.conf by navigating to /etc/security</p> <pre class="graf graf--pre">cd /etc/security</pre> <p class="graf graf--p">As good habits dictate, make a copy of the limits.conf file</p> <pre class="graf graf--pre">sudo cp limits.conf orig_limits.conf</pre> <p class="graf graf--p">Edit the limits.conf file</p> <pre class="graf graf--pre">sudo vi limits.conf</pre> <p class="graf graf--p">Add the following two lines at the end of the file, setting the limits to a value greater than or equal to 32768</p> <pre class="graf graf--pre">* hard nofile 33000 * soft nofile 33000</pre> <p class="graf graf--p">Log out of the AWS machine and log back in for the changes to take effect</p> <p class="graf graf--p">Check that the changes were successful by running ulimit -n</p> <pre class="graf graf--pre">ulimit -n</pre> <pre class="graf graf--pre">33000</pre> <p class="graf graf--p">Start the SDC service</p> <pre class="graf graf--pre">sudo service sdc start</pre> <p class="graf graf--p">This message may show up:</p> <pre class="graf graf--pre">Unit sdc.service could not be found.</pre> <p class="graf graf--p">The service will start fine. If you’re annoyed enough by the message, stop the service, run the command below, and start the service again</p> <pre class="graf graf--pre">sudo systemctl daemon-reload</pre> <p class="graf graf--p">One last thing before we get to building a pipeline. Create a new subdirectory under the streamsets-datacollector directory to store a sample data file.</p> <pre class="graf graf--pre">sudo mkdir /opt/streamsets-datacollector/SampleData</pre> <p class="graf graf--p">Create a sample file.</p> <pre class="graf graf--pre">sudo vi /opt/streamsets-datacollector/SampleData/TestFile.csv</pre> <p class="graf graf--p">Enter the following records and save the file.</p> <pre class="graf graf--pre">Rownum,Descr 1,Hello 2,World</pre> <p class="graf graf--p">The StreamSets Data Collector user interface (UI) is browser-based. In order to access the UI from your local machine, set up an SSH tunnel to forward port 18630, the port StreamSets runs on, to localhost:18630. Replace the appropriate IP address and .pem information.</p> <pre class="graf graf--pre">ssh -N -p 22 ec2-user@&lt;public_ip&gt; -i &lt;loc_of_pem&gt;/&lt;name_of_pem&gt;.pem -L 18630:localhost:18630</pre> <p class="graf graf--p">On the local machine, open a browser, type or paste the following URL and press enter.</p> <pre class="graf graf--pre"><a class="markup--anchor markup--pre-anchor" href="http://localhost:18630/" target="_blank" data-href="http://localhost:18630/">http://localhost:18630/</a></pre> <p class="graf graf--p">The StreamSets login page should now be displayed. The initial username/password are admin/admin.</p> <figure class="graf graf--figure"><img class="graf-image" src="https://i0.wp.com/cdn-images-1.medium.com/max/1600/1*tfSSQg5-2hriBhtJ_jH_eA.png?resize=1170%2C508&#038;ssl=1" data-image-id="1*tfSSQg5-2hriBhtJ_jH_eA.png" data-width="2744" data-height="1192" data-recalc-dims="1" /><figcaption class="imageCaption">StreamSets login page</figcaption></figure> <p class="graf graf--p">In the following steps, we’ll create a pipeline that streams the data from the TestFile.csv file created in the steps above to Amazon S3. First, create a new pipeline and give it a name.</p> <div class="section-inner sectionLayout--outsetRow" data-paragraph-count="2"> <figure class="graf graf--figure graf--layoutOutsetRow is-partialWidth"><img class="graf-image" src="https://i1.wp.com/cdn-images-1.medium.com/max/1200/1*1z90PdWYAKGl-A6HLicf5A.png?resize=936%2C514&#038;ssl=1" data-image-id="1*1z90PdWYAKGl-A6HLicf5A.png" data-width="936" data-height="514" data-recalc-dims="1" /></figure> <figure class="graf graf--figure graf--layoutOutsetRowContinue is-partialWidth"><img class="graf-image" src="https://i2.wp.com/cdn-images-1.medium.com/max/1200/1*Qe60qZKFrybafdIAYDcKbQ.png?resize=1170%2C638&#038;ssl=1" data-image-id="1*Qe60qZKFrybafdIAYDcKbQ.png" data-width="1200" data-height="654" data-recalc-dims="1" /></figure> <p class="graf graf--p">Add an origin and a destination. For this example, I have selected the origin <em class="markup--em markup--p-em">Directory — Basic </em>and the destination <em class="markup--em markup--p-em">Amazon S3 — Amazon Web Services 1.10.59</em></p> <figure class="graf graf--figure"><img class="graf-image" src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*ctvU3kNUTSLWfTQTLFYGiQ.png?resize=1170%2C606&#038;ssl=1" data-image-id="1*ctvU3kNUTSLWfTQTLFYGiQ.png" data-width="2724" data-height="1412" data-recalc-dims="1" /></figure> <p class="graf graf--p">Notice that the pipeline will display errors until all required elements are configured.</p> <p class="graf graf--p">Configure the pipeline <em class="markup--em markup--p-em">Error Records</em> to Discard (Library: Basic)</p> <figure class="graf graf--figure"><img class="graf-image" src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*A-t1ZT0iDtNpZOUSjtxrqA.png?resize=1170%2C605&#038;ssl=1" data-image-id="1*A-t1ZT0iDtNpZOUSjtxrqA.png" data-width="2730" data-height="1412" data-recalc-dims="1" /></figure> <p class="graf graf--p">To set up the origin, under <em class="markup--em markup--p-em">Files</em>, configure the <em class="markup--em markup--p-em">File Directory</em> and <em class="markup--em markup--p-em">File Name Pattern</em> fields to /opt/streamsets-datacollector/SampleData and *.csv, respectively.</p> <figure class="graf graf--figure"><img class="graf-image" src="https://i2.wp.com/cdn-images-1.medium.com/max/1600/1*oreIJO4MRUXeFpyEpa8Zwg.png?resize=1170%2C634&#038;ssl=1" data-image-id="1*oreIJO4MRUXeFpyEpa8Zwg.png" data-width="2364" data-height="1280" data-recalc-dims="1" /></figure> <p class="graf graf--p">On the <em class="markup--em markup--p-em">Data Format </em>tab, configure the <em class="markup--em markup--p-em">Data Format</em> to Delimited and change the <em class="markup--em markup--p-em">Header Line</em> drop-down to With Header Line</p> <figure class="graf graf--figure"><img class="graf-image" src="https://i2.wp.com/cdn-images-1.medium.com/max/1600/1*-vMa0zxFVELpJwVlmJVGfQ.png?resize=1170%2C606&#038;ssl=1" data-image-id="1*-vMa0zxFVELpJwVlmJVGfQ.png" data-width="2728" data-height="1414" data-recalc-dims="1" /></figure> <p class="graf graf--p">Configure the Amazon S3 items for your <em class="markup--em markup--p-em">Access Key ID</em>, <em class="markup--em markup--p-em">Secret Access Key</em>, and <em class="markup--em markup--p-em">Bucket</em>.</p> <figure class="graf graf--figure"><img class="graf-image" src="https://i0.wp.com/cdn-images-1.medium.com/max/1600/1*cn_DIIxUGjr7EXN7mDrSGA.png?resize=1170%2C611&#038;ssl=1" data-image-id="1*cn_DIIxUGjr7EXN7mDrSGA.png" data-width="2736" data-height="1428" data-recalc-dims="1" /></figure> <p class="graf graf--p">Set the <em class="markup--em markup--p-em">Data Format</em> for S3; I’ve chosen Delimited but other options work just fine.</p> <figure class="graf graf--figure"><img class="graf-image" src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*j8hJWSmjz0zxc1KWT8n1UA.png?resize=1170%2C606&#038;ssl=1" data-image-id="1*j8hJWSmjz0zxc1KWT8n1UA.png" data-width="2724" data-height="1412" data-recalc-dims="1" /></figure> <p class="graf graf--p">In the top right corner, there are options for previewing and validating the pipeline as well as to start the pipeline. After everything checks out, start the pipeline.</p> <figure class="graf graf--figure"><img class="graf-image" src="https://i0.wp.com/cdn-images-1.medium.com/max/1600/1*WwfSfHNt3IoHWdYV5k1PLw.png?resize=1170%2C606&#038;ssl=1" data-image-id="1*WwfSfHNt3IoHWdYV5k1PLw.png" data-width="2728" data-height="1412" data-recalc-dims="1" /></figure> <p class="graf graf--p">The pipeline is alive and moved the data!</p> <figure class="graf graf--figure"><img class="graf-image" src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*u_NPiSHErNJdkkqeh56E_Q.png?resize=1170%2C533&#038;ssl=1" data-image-id="1*u_NPiSHErNJdkkqeh56E_Q.png" data-width="2736" data-height="1246" data-recalc-dims="1" /></figure> <p class="graf graf--p">A review of S3 shows that the file has been created and contains the records that were created in the steps above. Notice that the pipeline is in ‘Running’ status and will continue to stream data from the directory as changes are made or *.csv files are added.</p> <figure class="graf graf--figure"><img class="graf-image" src="https://i0.wp.com/cdn-images-1.medium.com/max/1600/1*CiORgX8dQVZWanWP52j15A.png?resize=1170%2C427&#038;ssl=1" data-image-id="1*CiORgX8dQVZWanWP52j15A.png" data-width="2498" data-height="912" data-recalc-dims="1" /></figure> <p class="graf graf--p">There you have it. This is just a basic pipeline to move a .csv file from one location to another without any data manipulation and is simply the tip of the iceberg. There is an abundance of options available to manipulate the data as well as technologies that StreamSets Data Collector integrates with that go far beyond this example. Happy streaming!</p> </div> Mike Fuller http://redpillanalytics.com/?p=4822 Fri Apr 14 2017 10:47:56 GMT-0400 (EDT) ODTUG Kscope16 Award-Winning Session Recordings Available to All http://www.odtug.com/p/bl/et/blogaid=706&source=1 ODTUG full members get exclusive access to browse all session recordings from past Kscope conferences. To highlight our impressive speaker lineup for Kscope17, we want to give everyone a sneak peek at the quality sessions that are to come at Kscope17. ODTUG http://www.odtug.com/p/bl/et/blogaid=706&source=1 Thu Apr 13 2017 09:39:19 GMT-0400 (EDT) How to Connect DV to Essbase Cloud (Ep 050) https://www.youtube.com/watch?v=5-a3O41t00Y Red Pill Analytics yt:video:5-a3O41t00Y Wed Apr 12 2017 19:29:31 GMT-0400 (EDT) Kscope17 Database Track Session Highlights – Galo Balda http://www.odtug.com/p/bl/et/blogaid=705&source=1 Galo Balda, Database Track Lead for ODTUG Kscope17, shares his top 5 Database Track Sessions with reasons why they are his "don't miss sessions" at Kscope17. ODTUG http://www.odtug.com/p/bl/et/blogaid=705&source=1 Wed Apr 12 2017 10:01:50 GMT-0400 (EDT) Oracle Database 12.2 New Feature – Pluggable Database Performance Profiles http://gavinsoorma.com/2017/04/oracle-database-12-2-new-feature-pluggable-database-performance-profiles/ <p>In the earlier 12.1.0.2 Oracle database version, we could limit the amount of CPU utilization as well as Parallel Server allocation at the PDB level via Resource Plans.</p> <p>Now in 12c Release 2, we can not only regulate CPU and Parallelism at the Pluggable database level, but in addition <strong><em>we can also restrict the amount of memory that each PDB hosted by a Container Database (CDB) uses</em></strong>.</p> <p>Further, we can also limit the amount of I/O operations that each PDB performs so that now we have a far improved Resource Manager at work ensuring that no PDB hogs all the CPU or the IO because of maybe some runaway query and thereby impacts the other PDBs hosted in the same PDB.</p> <p>We can now limit the amount of SGA or PGA that an individual PDB can utilize as well as ensure that certain PDBs always are ensured a minimum level of both available SGA and PGA memory.</p> <p>For example we can now issue SQL statements like these while connected to the individual PDB.</p> <p>&nbsp;</p> <pre>SQL&gt; ALTER SYSTEM SET SGA_TARGET = 500M SCOPE = BOTH; SQL&gt; ALTER SYSTEM SET SGA_MIN_SIZE = 300M SCOPE = BOTH; SQL&gt; ALTER SYSTEM SET PGA_AGGREGATE_LIMIT = 200M SCOPE = BOTH; SQL&gt; ALTER SYSTEM SET MAX_IOPS = 10000 SCOPE = BOTH; </pre> <p>&nbsp;<br /> Another 12c Release 2 New Feature related to Multitenancy is <strong>Performance Profiles</strong>.</p> <p>With <strong>Performance Profiles</strong> we can manage resources for large numbers of PDBs by specifying Resource Manager directives for profiles instead for each individual PDB.</p> <p>These profiles are then allocated to the PDB via the initialization parameter <strong>DB_PERFORMANCE_PROFILE</strong></p> <p>Let us look at a worked example of Performance Profiles.</p> <p>In this example we have three PDBs (PDB1, PDB2 and PDB3) hosted in the container database CDB1. PDB1 pluggable database hosts some mission critical applications and we need to ensure that PDB1 gets a higher share of memory,I/O as well as CPU resources as compared to PDB2 and PDB3.</p> <p>So we will be enforcing this resource allocation via two sets of Performance Profiles &#8211; we call those TIER1 and TIER2.</p> <p>Here are the steps:</p> <p>&nbsp;</p> <p><strong>Create a Pending Area</strong></p> <p>&nbsp;</p> <pre>SQL&gt; exec DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA (); PL/SQL procedure successfully completed.</pre> <p>&nbsp;</p> <p>&nbsp;</p> <p><strong>Create a CDB Resource Plan </strong><br /> &nbsp;</p> <pre>SQL&gt; BEGIN  DBMS_RESOURCE_MANAGER.CREATE_CDB_PLAN(    plan   =&gt; 'profile_plan',    comment =&gt; 'Performance Profile Plan allocating highest share of resources to PDB1'); END; /  PL/SQL procedure successfully completed. </pre> <p>&nbsp;<br /> <strong>Create the CDB resource plan directives for the PDBs</strong></p> <p>Tier 1 performance profile ensures at least 60% (3 shares) of available CPU and parallel server resources and no upper limit on CPU utilization or parallel server execution. In addition it ensures a minimum allocation of at least 50% of available memory.</p> <p>&nbsp;</p> <pre>SQL&gt; BEGIN DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE( plan                 =&gt; 'profile_plan', profile              =&gt; 'Tier1', shares               =&gt; 3, memory_min           =&gt; 50); END; / PL/SQL procedure successfully completed.</pre> <p>&nbsp;</p> <p>Tier 2 performance profile is more restrictive in the sense that it has fewer shares as compared to Tier 1 and limits the amount of CPU/Parallel server usage to 40% as well as limits the amount of memory usage at the PDB level to a maximum of 25% of available memory.</p> <p>&nbsp;</p> <pre>SQL&gt; BEGIN  DBMS_RESOURCE_MANAGER.CREATE_CDB_PROFILE_DIRECTIVE(    plan                 =&gt; 'profile_plan',    profile              =&gt; 'Tier2',    shares               =&gt; 2,    utilization_limit    =&gt; 40,    memory_limit          =&gt; 25); END; /    PL/SQL procedure successfully completed.</pre> <p>&nbsp;</p> <p><strong>Validate and Submit the Pending Area </strong></p> <p>&nbsp;</p> <pre>SQL&gt; exec DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA(); PL/SQL procedure successfully completed. SQL&gt; exec DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA(); PL/SQL procedure successfully completed. </pre> <p>&nbsp;<br /> <strong>Allocate Performance Profiles to PDBs</strong></p> <p>&nbsp;</p> <p>TIER1 Performance Profile is allocated to PDB1 and TIER2 Performance Profile is allocated to PDB2 and PDB3.</p> <p>&nbsp;</p> <pre>SQL&gt; alter session set container=pdb1; Session altered. SQL&gt; alter system set DB_PERFORMANCE_PROFILE='TIER1' scope=spfile; System altered. SQL&gt; alter session set container=pdb2; Session altered. SQL&gt; alter system set DB_PERFORMANCE_PROFILE='TIER2' scope=spfile; System altered. SQL&gt; alter session set container=pdb3; Session altered. SQL&gt; alter system set DB_PERFORMANCE_PROFILE='TIER2' scope=spfile; System altered.</pre> <p>&nbsp;</p> <p><strong>Set the Resource Plan at the CDB level </strong></p> <p>&nbsp;</p> <pre>SQL&gt; conn / as sysdba Connected. SQL&gt; alter system set resource_manager_plan='PROFILE_PLAN' scope=both; System altered.</pre> <p>&nbsp;</p> <p><strong>Set the Performance Profiles at the PDB level </strong></p> <p>&nbsp;</p> <pre>SQL&gt; alter pluggable database all close immediate; Pluggable database altered. SQL&gt; alter pluggable database all open; Pluggable database altered. </pre> <p>&nbsp;<br /> <strong>Monitor memory utilization at PDB level </strong></p> <p>&nbsp;</p> <p>The V$RSRCPDBMETRIC view enables us to track the amount memory used by PDBs.</p> <p>We can see that the PDB1 belonging to the profile TIER1 has almost double the memory allocated to the other two PDBs in profile TIER2.</p> <p><img src="https://media.licdn.com/mpr/mpr/AAEAAQAAAAAAAAsiAAAAJDEzNmRmYzk4LThkN2YtNDg5Yi05MzdmLWI2YjRhYzhkMzYzNw.png" /></p> <p>Oracle 12.2 has a lot of new exciting features. <strong>Learn all about these at a forthcoming online training session</strong>. Contact <strong>prosolutions@gavinsoorma.com</strong> to register interest!</p> Gavin Soorma http://gavinsoorma.com/?p=7503 Tue Apr 11 2017 01:17:23 GMT-0400 (EDT) Kscope17 Financial Close Track Session Highlights – Chris Barbieri http://www.odtug.com/p/bl/et/blogaid=704&source=1 Chris Barbieri, Financial Close Track Lead for ODTUG Kscope17, shares his recommended Financial Close Track Sessions with reasons why they are his “don’t miss sessions” at Kscope17. ODTUG http://www.odtug.com/p/bl/et/blogaid=704&source=1 Mon Apr 10 2017 09:34:55 GMT-0400 (EDT) Build Custom Datasets From Database Tables (Ep 049) https://www.youtube.com/watch?v=lyh3Z_sNhVs Red Pill Analytics yt:video:lyh3Z_sNhVs Fri Apr 07 2017 10:09:40 GMT-0400 (EDT) Oracle Looking to Buy Accenture? Stranger Things Have Happened. http://bi.abhinavagarwal.net/2017/04/oracle-looking-to-buy-accenture.html <div dir="ltr" style="text-align: left;" trbidi="on"><div class="prose" itemprop="articleBody"><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody><tr><td style="text-align: center;"><a href="https://1.bp.blogspot.com/-mKC0xeNFRv8/WOElu7w-fJI/AAAAAAAAN9g/Me_Uoce5RXMtve9ufEm0oyyk65JQ5EnUgCLcB/s1600/pixels_chess.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="271" src="https://1.bp.blogspot.com/-mKC0xeNFRv8/WOElu7w-fJI/AAAAAAAAN9g/Me_Uoce5RXMtve9ufEm0oyyk65JQ5EnUgCLcB/s400/pixels_chess.jpg" width="400" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Image credit: pixels.com</td></tr></tbody></table><a href="https://www.theregister.co.uk/" rel="nofollow noopener" target="_blank">The Register</a> <a href="https://www.theregister.co.uk/2017/03/28/oracle_doing_due_diligence_on_accenture_yep_you_heard_that_right/" rel="nofollow noopener" target="_blank">reported</a> that Oracle may be exploring the "feasibility of buying multi-billion dollar consultancy Accenture."<br /><br />To summarize the numbers involved here, Oracle had <strong>FY16 revenues of $37 billion</strong>, net income of <strong>$8.9 billion</strong>, and a <strong>market cap of $180 billion</strong>.<br /><br />On the other hand, Accenture had <strong>FY16 revenues of US$34.8 billion</strong>, net income of <strong>$4.1 billion</strong>, and a <strong>market cap of $77 billion</strong>.<br /><br />Some questions that come to mind:<br /><ol><li><strong>Why?</strong> <a href="https://www.wsj.com/articles/oracle-set-to-complete-9-3-billion-deal-to-buy-netsuite-1478324011" rel="nofollow noopener" target="_blank">Oracle buying NetSuite</a> in 2016 made sense. <a href="https://www.thestreet.com/story/13606330/1/is-salesforce-com-oracle-s-next-target-buy-it-now.html" rel="nofollow noopener" target="_blank">Oracle buying Salesforce</a> would make even more sense. Oracle buying a management consulting and professional services company, and that too one with more than a quarter million employees, on the face of it, makes little sense. Would it help Oracle leapfrog Amazon's AWS cloud business? Would it help Oracle go after a new market segment? The answers are not clear, at all.<br /></li><li><strong>Who would be in charge of this combined entity?</strong> Both have similar revenues, though Accenture has a market cap that is less than half Oracle's and a workforce that is roughly three times Oracle's. The cultural meshing itself would prove to be a challenge. Mark Hurd, one of two CEOs of Oracle (the other CEO is Safra Catz, a former investment banker), has the experience running a large, heterogeneous organization. Prior to his stint at Oracle, he was credited with making the HP and Compaq merger work. At Oracle, however, he has not run software product development, which has been run by Thomas Kurian, and who reports to Larry Ellison, and not Hurd. A merger between Oracle and Accenture would place an even greater emphasis on synergies between Oracle's software division and Accenture's consulting business.<br /></li><li>Oracle would need to spend close to $100 billion to buy Accenture, if it does.<strong> How would it finance it</strong>, even assuming it spends all its $68 billion in cash to do so? Keep in mind that its largest acquisition was in the range of $10 billion. The financial engineering would be staggering. It helps that it has a former investment banker as one of two CEOs.<br /></li><li><strong>Will Oracle make Accenture focus on the Oracle red stack</strong> of software products and applications - both on-premise and in the cloud? If yes, it would need a much smaller-sized workforce than Accenture has. That in turn would diminish the value of Accenture to Oracle, and make the likely sticker price of $100 billion look even costlier.<br /></li><li>Is Oracle looking to become the <strong>IBM of the twenty-first century</strong>? It's certainly been a public ambition of Larry Ellison. In 2009, he <a href="http://www.zdnet.com/article/ellison-wants-to-model-new-oracle-after-t-j-watson-jr-s-ibm-6001024801/" rel="nofollow noopener" target="_blank">said </a>he wanted to pattern Oracle after Thomas Watson Jr's IBM, "combining both hardware and software systems." If Oracle keeps Accenture as a business unit free to pursue non-Oracle deals, does it mean Oracle is keen on morphing into a modern-day avatar of IBM and IBM Global Services, offering hardware, software, and professional services - all under one red, roof?<br /></li><li><strong>Is Oracle serious </strong>about such a merger? An acquisition of this size seems more conjecture than in the realms of possibility, at least as of now. One is reminded of the time in 2003 when <a href="https://news.microsoft.com/2004/06/07/statement-from-microsoft-on-past-exploratory-discussions-with-sap/" rel="nofollow noopener" target="_blank">Microsoft explored the possibility of buying SAP</a>. Those discussions went nowhere, and the idea was dropped. Combining two behemoths is no easy task, even for a company like Oracle, that has stitched together almost <a href="https://en.wikipedia.org/wiki/List_of_acquisitions_by_Oracle" rel="nofollow noopener" target="_blank">50 acquisitions</a> in just the last five years.<br /></li><li>If such an acquisition did go through, there would likely be few anti-trust concerns. That's a big "if".<br /></li><li>Stranger things have happened in the software industry, like <a href="https://www.ft.com/content/e657857a-7113-11e6-a0c9-1365ce54b926" rel="nofollow noopener" target="_blank">HP buying Autonomy</a>.<br /></li><li>I hope the Register piece was not an example of an early April Fool's joke.</li></ol><em>(HT Sangram Aglave whose LinkedIn post alerted me to this article)</em></div><br /><i>I first published this in LinkedIn Pulse on April 1, 2017.</i><br /><br />© 2017, Abhinav Agarwal.</div> Abhinav Agarwal tag:blogger.com,1999:blog-13714584.post-178251562685936179 Fri Apr 07 2017 08:30:00 GMT-0400 (EDT) A-Team Article: Lift and Shift to Oracle Data Integrator Cloud Service (ODICS) https://blogs.oracle.com/dataintegration/entry/a_team_article_lift_and <!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="&#45;-"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--> <p style="line-height: normal;" class="MsoNormal"><span style="font-size: 10pt;">Moving to the Cloud or interested in doing so?<span> </span>Interested in data movement and transformation?<span> </span>Read this A-Team article by Christophe Dupupet:<span> </span><a href="http://www.ateam-oracle.com/lift-and-shift-to-oracle-data-integrator-cloud-service-odics-moving-your-repository-to-the-cloud/"><span style="color: windowtext;">Lift and Shift to Oracle Data Integrator Cloud Service (ODICS) : Moving your Repository to the Cloud</span></a></span></p> <p style="line-height: normal;" class="MsoNormal"><span style="font-size: 10pt;">Oracle Data Integrator (ODI) is available as a Cloud Service: <a href="https://blogs.oracle.com/dataintegration/entry/introducing_oracle_data_integrator_cloud"><span style="color: windowtext;">Oracle Data Integrator Cloud Service (ODICS)</span></a>. For customers who are interested in a subscription model for their ODI installation and want to integrate and transform data in the Cloud, this is the solution.</span></p> <p style="line-height: normal;" class="MsoNormal"><span style="font-size: 10pt;">For customers who already have ODI developments on-premise, and want to migrate their existing, on-premise repository to the Cloud, read for a quick step by step approach in performing this repository migration.</span></p> <!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;} </style> <![endif]--> Sandrine Riley-Oracle https://blogs.oracle.com/dataintegration/entry/a_team_article_lift_and Thu Apr 06 2017 20:39:14 GMT-0400 (EDT) A-Team Article: Lift and Shift to Oracle Data Integrator Cloud Service (ODICS) https://blogs.oracle.com/dataintegration/a-team-article%3A-lift-and-shift-to-oracle-data-integrator-cloud-service-odics <p><span>Moving to the Cloud or interested indoing so?<span> </span>Interested in data movementand transformation?<span> </span>Read this A-Teamarticle by Christophe Dupupet:<span> </span><a href="http://www.ateam-oracle.com/lift-and-shift-to-oracle-data-integrator-cloud-service-odics-moving-your-repository-to-the-cloud/"><span>Lift and Shift to Oracle Data Integrator Cloud Service(ODICS) : Moving your Repository to the Cloud</span></a></span></p> <p><span>Oracle Data Integrator (ODI) is available as a Cloud Service: <a href="https://blogs.oracle.com/dataintegration/entry/introducing_oracle_data_integrator_cloud"><span>Oracle Data Integrator Cloud Service (ODICS)</span></a>.For customers who are interested in a subscription model for their ODIinstallation and want to integrate and transform data in the Cloud, this is thesolution.</span></p> <p><span>For customers who already have ODIdevelopments on-premise, and want to migrate their existing, on-premiserepository to the Cloud, read for a quick step by step approach in performingthis repository migration.</span></p> Sandrine Riley https://blogs.oracle.com/dataintegration/a-team-article%3A-lift-and-shift-to-oracle-data-integrator-cloud-service-odics Thu Apr 06 2017 20:39:14 GMT-0400 (EDT) OBIEE Component Status Notifications http://www.rittmanmead.com/blog/2017/04/obiee-component-status-notifications/ <p>At Rittman Mead, we often hear requests for features or solutions generally not provided by Oracle. These requests range from commentary functionality to custom javascript visualizations. There are many ways to implement these functionalities, but organizations often lack the in-house resources to engineer an acceptable solution. </p> <p>Rittman Mead has the capability to engineer any solution desired, and in many cases, has already developed a solution. Many of our accelerators currently offered, such as Chit Chat or User Engagement, grew out of numerous requests for these features.</p> <p>One of the more common requests we hear at Rittman Mead is for BI Administrators to receive notifications for the status of their OBIEE components. They want to be notified of the status of the system components throughout the day in a convenient manner, so any failures are recognized quickly. </p> <p>This particular feature can easily be implemented with Rittman Mead's Performance Analytics service. However, Rittman Mead would like to publicly provide this capability independent of our accelerator. We have developed a small Python script to provide this functionality, and we would like to give this script to the community.</p> <p>The provided script is available free of charge, and available under the MIT license. It has been tested on both OBIEE 11G and 12C environments, as well as on Windows and Linux operating systems. The rest of this blog will detail, at a high level, how the script works, and how to configure it correctly.</p> <p>The script is available through our public Github repository <a href="https://github.com/RittmanMead/scripts/blob/master/obi/alerts/email_component_status.py" target="_blank"> here</a>.</p> <h1 id="scriptoutput">Script Output</h1> <p>First, let's clarify how we will gather the status of the components in the first place. Thankfully, OBIEE includes some scripts to display this information on both Linux and Windows. In 12C, the script is <strong>status.sh/status.cmd</strong>, and in 11G the primary command is <strong>opmnctl status</strong>. </p> <p>When I execute this script on an OBIEE 12C OEL environment, I receive the following response:</p> <p><img width="700" src="http://www.rittmanmead.com/blog/content/images/2016/08/Screen-Shot-2016-08-24-at-9-26-19-AM.png"> <br> The output includes some extra information we don't require, but we can ignore it for now. With some programming knowledge, we can trim what we don't need, organize it into a nice table, and then send the output to nearly anywhere desired. For portability and stability, I will use Python to organize the message contents and I will also use email as the channel of communication.</p> <h1 id="sendingtheoutputthroughemail">Sending the Output Through Email</h1> <p>If we are only concerned with notifying administrators of the current status, one of the better avenues to send this data is through email. An email destination will allow users to be able to receive the status of the components almost instantaneously, and be able to take the appropriate action as soon as possible. </p> <p>Additionally, Python's standard set of modules includes functions to assist in sending SMTP messages, making the script even more portable and maintainable. The simplest method to generate the email is just by sending the complete output as the body of the message. An example of this output is below: <br> <img width="700" src="http://www.rittmanmead.com/blog/content/images/2016/08/Screen-Shot-2016-08-24-at-9-23-27-AM-1.png"> <br> While this works, it's not exactly attractive. With some Python and HTML/CSS skills, we can style the email to look much nicer:</p> <p><img width="700" src="http://www.rittmanmead.com/blog/content/images/2016/08/Screen-Shot-2016-08-25-at-11-37-32-AM-1.png"> <br> Now we have something nice we can send BI Administrators to show the status of the components.</p> <h1 id="configurationanduse">Configuration and Use</h1> <p>To effectively utilize this script, you will have to change some of the configuration parameters, located at the top of the script. The parameters I am using are shown below (with sensitive information hidden, of course): <br> <img src="http://www.rittmanmead.com/blog/content/images/2016/08/Screen-Shot-2016-08-25-at-11-47-44-AM.png" alt=""></p> <p>The sender and username fields should both be the user you are logging in as on the SMTP server to send the email. If you want the email address shown on a message to be different than the user configured on the SMTP server, then these can be set separately. The password field should be the password for the user being configured on the SMTP server. </p> <p>The recipient field should be the address of the user who will be receiving the emails. For simple management, this should be a single user, who should then be configured to forward all incoming status emails to the responsible parties. This will allow easier maintenance, since modifying the list of users can take place in the email configuration, rather than the script configuration. In this example, I am just sending the emails to my Rittman Mead email address.</p> <p>The SMTP settings should also be updated to reflect the SMTP server being utilized. If you are using Gmail as the SMTP server, then the configuration shown should work without modifications.</p> <p>Finally, the python script requires the absolute path to the status command to execute to produce the output (the <strong>opmnctl</strong> or <strong>status</strong> commands). Environment variables may not be taken into consideration by this script, so it's best to not use a variable in this path.</p> <p><strong>NOTE:</strong> If the <strong>\</strong> character is in the path, then you <strong>MUST</strong> use <strong>\\</strong> instead. This is especially true on Windows environments. If this change is required but omitted, the script will not function properly.</p> <p>Additionally, if you don't care about the HTML output (or if it doesn't render nicely in your email client), then it can be disabled by setting the value of <strong>render_html</strong> to <strong>False</strong>. If, for some reason, the nice HTML fails to render, then the email will just send the plain text output, instead of failing to deliver an email at all.</p> <p>Once configured, try executing the script: <br> <code>python email_component_status.py</code></p> <p>If everything worked correctly, then you should have received an email with the status of the components. If you do not receive an email, then you should check both the configuration settings, and the internet connection of the machine (firewalls included). The script will also generate output that should assist you in troubleshooting the cause of the problem.</p> <h1 id="additionalnotificationsordestinations">Additional Notifications or Destinations</h1> <p>The solution provided, while useful, is not perfect. What if you want to send this information to a destination other than an email address, such as a ticketing system like Atlassian JIRA? Or what if you want notifications based on other situations, such as slow running reports, or high CPU usage? </p> <p>There may be many situations in which you would want one, or several, employees to receive different notifications based on events or circumstances that occur in your OBIEE environment. The script in this blog post only provides one of these notifications, but implementing many more will quickly become burdensome.</p> <p>As part of Rittman Mead's Performance Analytics offering, we include custom software and code to fulfill this requirement. In addition to providing dashboards to explore the performance of your OBIEE systems, Performance Analytics can be configured to distribute alerts, based on any quantifiable condition, to any number of external systems. </p> <p>The full Performance Analytics suite can not only alert users of down system components, but of any number of conditions that may occur in your BI environment. </p> <p>If you have questions about this script, Performance Analytics, or anything else <a>Contact Us here</a>.</p> <p>To find out more about Performance Analytics, <a href="mailto:info+npsn@rittmanmead.com">contact us</a>, visit the product page <a href="http://www.rittmanmead.com/blog/performance-analytics" target="_blank">here</a>, or read some of the fantastic blogs from <a href="http://www.rittmanmead.com/blog/2015/10/introducing-the-rittman-mead-obiee-performance-analytics-service/" target="_blank">Robin Moffatt</a>.</p> Nick Padgett 561c951b-f1a7-4ecf-a7a1-19e2247781b8 Wed Apr 05 2017 10:00:00 GMT-0400 (EDT) Oracle Analytics Cloud: Product Overview http://www.rittmanmead.com/blog/2017/04/oracle-analytics-cloud-product-overview/ <img src="http://www.rittmanmead.com/blog/content/images/2017/03/Oracle-Cloud-aaS-3.png" alt="Oracle Analytics Cloud: Product Overview"><p>We at Rittman Mead are always helping our customer solving their problems, many times we heard them</p> <ul> <li>being unsure about the sizing of their server </li> <li>being worried about the upfront cost of the licensing</li> <li>having recurring nightmares about patching</li> <li>willing to try the cloud but couldn't find the right option to replace their on-premises system </li> </ul> <p>This is their lucky day: Oracle officially launched <a href="https://cloud.oracle.com/en_US/oac">Oracle Analytics Cloud </a> (OAC), a new PaaS (Platform as a Service) providing a complete and elastic Business Intelligence platform in the cloud, customizable and managed by you but all on the Oracle Cloud! </p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/04/1mn66d.jpg" alt="Oracle Analytics Cloud: Product Overview"></p> <p>If you haven't been on a remote island you may have noticed that in recent years Oracle's main focus has been around the <a href="https://cloud.oracle.com/en_US/home">Cloud</a>. Several products have been launched covering a vast spectrum of functionalities: Data Management, Application Development, Business Analytics and Security are only some of the areas covered by the Software/Platform/Infrastructure as a Service offering.</p> <p><img width="800px" alt="Oracle Analytics Cloud: Product Overview" src="http://www.rittmanmead.com/blog/content/images/2017/03/Oracle-Cloud-aaS-2.png"></p> <p>In the Business Analytics area, we at Rittman Mead started thinking long time ago on <a href="https://www.rittmanmead.com/blog/2013/11/thoughts-on-running-obiee-in-the-cloud-part-1-the-bi-platform/">how to host Oracle's BI on-premises (OBIEE) in the Cloud</a> and worked closely with Oracle since the beta phase of their first PaaS product: <a href="https://www.rittmanmead.com/blog/2014/09/introduction-to-oracle-bi-cloud-service-product-overview/">BI Cloud Service</a> (BICS). Effectively we put our hands on all the cloud products in the BA family like <a href="https://www.rittmanmead.com/blog/2015/02/introducing-oracle-big-data-discovery-part-1-the-visual-face-of-hadoop/">Big Data Discovery</a> (both on premises and cloud), <a href="https://www.rittmanmead.com/blog/2015/11/oracle-openworld-2015-roundup-part-1-obiee12c-and-data-visualisation-cloud-service/">Data Visualization Cloud Service</a>, <a href="https://www.rittmanmead.com/blog/2015/09/taking-a-look-at-oracle-big-data-preparation-cloud-service-spark-based-data-transformation-in-the-cloud/">Big Data Preparation Service</a>.</p> <h1 id="businessintelligencecloudproducts">Business Intelligence Cloud Products</h1> <p>Until few weeks ago Oracle's main Business Analytics cloud products were <a href="https://cloud.oracle.com/en_US/business_intelligence">BI Cloud Service</a> (BICS) and <a href="https://cloud.oracle.com/en_US/data-visualization">Data Visualization Cloud Service</a> (DVCS). As mentioned in <a href="https://www.rittmanmead.com/blog/2014/09/introduction-to-oracle-bi-cloud-service-product-overview/">our blog</a> both tools aimed initially at departmental use-cases: the simplicity of the data model interface and the lack of admin configuration options stopped them from being a compelling story for hosting a full enterprise Business Intelligence solution.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/04/BICS-and-DVCS.png" alt="Oracle Analytics Cloud: Product Overview"></p> <p>New features like <a href="http://www.oracle.com/technetwork/middleware/bicloud/downloads/index.html">BICS Data Sync</a>, <a href="http://www.oracle.com/technetwork/middleware/bicloud/downloads/index.html">Remote Data Connector</a> and <a href="http://www.ateam-oracle.com/lift-and-shift-on-premise-rpd-to-bi-cloud-service-bics/">RPD lift and shift</a> addressed almost all the limitations but the lack of detailed admin/maintenance capabilities represent a stopper for moving complex environments in the cloud. Still BICS and DVCS are perfect for their aim: business users analysing sets of data without needing to wait the IT to provision a server or to care about upfront licensing costs.</p> <h1 id="oracleanalyticscloud">Oracle Analytics Cloud</h1> <p>Oracle Analytics Cloud extends the watermark in every direction by providing a product that is:</p> <ul> <li><strong>Complete functionality</strong>: most of the tools, procedures and options provided on-premises are now available in OAC.</li> <li><strong>Combining all the offering of BICS, DV, BIEE and Essbase</strong>: OAC includes the features of Oracle's top BI products. </li> <li><strong>Licensing Tailored</strong>: the many options available (discussed in a later post) can be chosen depending on analytical needs, timeframe of service, required performances</li> <li><strong>Easily Scalable</strong>: do you want to expand your BI solution to the double of the users without loosing performances? Just buy some more horsepower!</li> <li><strong>Fully Accessible</strong>: SSH connection available to the server makes it easy to change settings as needed, REST API and Clients are provided for all lifecycle operations </li> <li><strong>Customizable</strong>: settings, images, networking, VPN all settings are available</li> <li><strong>Scriptable</strong>: settings like scaling, instance creation and deletion, start and stop can be easily scripted via the REST-APIs</li> <li><strong>Fully Customer Managed</strong>: Oracle provides the automation to backup and patch but the customer decides when to run them.</li> </ul> <h2 id="whatsthedifference">What's The Difference?</h2> <p>So what's the difference between Oracle Analytics Cloud and the "old" DVCS and BICS? How is OACS going to change Oracle's BI offer in the cloud?</p> <p>The great deal of using OACS is <strong>control</strong>: BICS/DVC limiting factors around admin options and development are solved providing a tool capable of hosting a full enterprise BI solution. Even if the platform is managed by Oracle SSH access is provided meaning that instance configurations can be changed. No more upfront server sizing decisions, now the size of the instance is decided during creation time and can be changed later in the process if the demand changes.</p> <p>The REST-APIs will enable the scripting of the full lifecycle of the instance, providing a way to automate the BI enterprise workflow even in complex environments where concurrent development is needed. Patching and Backups are not a problem anymore with the automated processes provided. </p> <p>Direct RPD online editing is available with the Admin tool. The old BICS Data Modeler is still there for simple models, but Admin Tool can be used in case of complex RPDs. </p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Modeler-1.png" alt="Oracle Analytics Cloud: Product Overview"></p> <p>The front-end is like the BICS and OBIEE 12c one, some new visualization have been added to Visual Analyzer in line with the new additions to Data Visualization Desktop: Parallel Coordinates, Chord, Network, Sankey diagrams are now available.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/New-Viz.png" alt="Oracle Analytics Cloud: Product Overview"></p> <p>A new console is now available in Visual Analyzer allowing settings like Mail or Deliveries that before were only accessible via Weblogic Console, Enterprise Manager or config files.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Console.png" alt="Oracle Analytics Cloud: Product Overview"></p> <p>Finally Essbase is now available in the cloud too with a new web interface! <br> Summarizing, if you wanted to go Cloud, but were worried about missing options, now Oracle Analytics Cloud provides all you need to host a full Enterprise BI solution.</p> <p>In the next few days I'll be analysing various aspects of Oracle Analytics Cloud Suite, so keep in touch!</p> <p>If you need assistance in checking if Oracle Analytics Cloud suits your needs or in planning your migration to the cloud don't hesitate to <a href="mailto:info+ftoac@rittmanmead.com">contact us</a> </p> Francesco Tisiot c316ab73-2e20-4ed5-97b0-49efe13e1e17 Tue Apr 04 2017 11:00:00 GMT-0400 (EDT) Managing memory allocation for Oracle R Enterprise Embedded Execution http://www.oralytics.com/2017/04/managing-memory-allocation-for-oracle-r.html <p>When working with Oracle R Enterprise and particularly when you are using the ORE functions that can spawn multiple R processes, on the DB Server, you need to be very aware of the amount of memory that will be consumed for each call of the ORE function.</p> <p>ORE has two sets of parallel functions for running your user defined R scripts stored in the database, as part of the Embedded R Execution feature of ORE. The R functions are called ore.groupApply, ore.rowApply and ore.indexApply. When using SQL there are "rqGroupApply" and rqRowApply. (There is no SQL function equivalent of the R function ore.indexApply)</p> <p>For each parallel R process that is spawned on the DB server a certain amount of memory (RAM) will be allocated to this R process. The default size of memory to be allocated can be found by using the following query.</p> <pre><br />select name, value from sys.rq_config;<br /><br />NAME VALUE<br />----------------------------------- -----------------------------------<br />VERSION 1.5<br />MIN_VSIZE 32M<br />MAX_VSIZE 4G<br />MIN_NSIZE 2M<br />MAX_NSIZE 20M<br /></pre> <p>The memory allocation is broken out into the amount of memory allocated for Cells and NCells for each R process.</p> <p>If your parallel ORE function create a large number of parallel R processes then you can see that the amount of overall memory consumed can be significant. I've seen a few customers who very quickly run out of memory on their DB servers. Now that is something you do not want to happen.</p> <p>How can you prevent this from happening ?</p> <p>There are a few things you need to keep in mind when using the parallel enabled ORE functions. The first one is, how many R processes will be spawned. For most cases this can be estimated or calculated to a high degree of accuracy. Secondly, how much memory will be used to process each of the R processes. Thirdly, how memory do you have available on the DB server. Fourthly, how many other people will be running parallel R processes at the same time?</p> <p>Examining and answering each of these may look to be a relatively trivial task, but the complexity behind these can increase dramatically depending on the answer to the fourth point/question above.</p> <p>To calculate the amount of memory used during the ORE user defined R script, you can use the R garbage function to calculate the memory usage at the start and at the end of the R script, and then return the calculated amount. Yes you need to add this extra code to your R script and then remove it when you have calculated the memory usage.</p> <pre><br />gc.start <- gc(reset=TRUE)<br />...<br />gc.end <- gc()<br />gc.used <- gc.end[,7] - gc.start[,7] # amount consumed by the processing<br /></pre> <p>Using this information and the answers to the points/questions I listed above you can now look at calculating how much memory you need to allocated to the R processes. You can set this to be static for all R processes or you can use some code to allocate the amount of memory that is needed for each R process. But this starts to become messy. The following gives some examples (using R) of changing the R memory allocations in the Oracle Database. Similar commands can be issued using SQL.</p> <pre><br />> sys.rqconfigset('MIN_VSIZE', '10M') -- min heap 10MB, default 32MB<br />> sys.rqconfigset('MAX_VSIZE', '100M') -- max heap 100MB, default 4GB<br />> sys.rqconfigset('MIN_NSIZE', '500K') -- min number cons cells 500x1024, default 1M<br />> sys.rqconfigset('MAX_NSIZE', '2M') -- max number cons cells 2M, default 20M<br /></pre> <p>Some guidelines - as with all guidelines you have to consider all the other requirements for the Database, and in reality you will have to try to find a balance between what is listed here and what is actually possible.</p> <ul> <li>Set parallel_degree_policy to MANUAL.</li> <li>Set parallel_min_servers to the number of parallel slave processes to be started when the database instances start, this avoids start up time for the R processes. This is not a problem for long running processes. But can save time with processes running for 10s seconds</li> <li>To avoid overloading the CPUs if the parallel_max_servers limit is reached, set the hidden parameter _parallel_statement_queuing to TRUE. Avoids overloading and lets processes wait.</li> <li>Set application tables and their indexes to DOP 1 to reinforce the ability of ORE to determine when to use parallelism.</li></ul> <p>Understanding the memory requirements for your ORE processes can be tricky business and can take some time to work out the right balance between what is needed by the spawned parallel R processes and everything else that is going on in the Database. There will be a lot of trial and error in working this out and it is always good to reach out for some help. If you have a similar scenario and need some help or guidance let me know.</p> Brendan Tierney tag:blogger.com,1999:blog-4669933501315263808.post-2421823361078030819 Mon Apr 03 2017 14:22:00 GMT-0400 (EDT) Metadata Modeling in the Database with Analytic Views http://www.rittmanmead.com/blog/2017/04/metadata-modeling-in-the-database-with-analytic-views/ <img src="http://www.rittmanmead.com/blog/content/images/2017/03/Overview.png" alt="Metadata Modeling in the Database with Analytic Views"><p><a href="http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html">12.2</a>, the latest Oracle database release provides a <a href="https://docs.oracle.com/en/cloud/paas/exadata-express-cloud/csdbf/oracle-database-12-2-new-features.html#GUID-D0673E3E-DF05-47C3-B1E2-BEF91FA36CEF">whole set of new features</a> enhancing various aspects of the product including JSON support, Auto-List Partitioning and APEX news among others. One of the biggest news in the Data Warehousing / Analytics area was the introduction of the <a href="https://docs.oracle.com/database/122/DWHSG/overview-analytic-views.htm#RESOURCEID-18323-7EE80A8A">Analytic Views</a>, that as per Oracle's definition are</p> <blockquote> <p>Metadata objects that enable the user to quickly and easily create complex hierarchical and dimensional queries on data in database tables and views</p> </blockquote> <h3 id="tldr">tl;dr</h3> <p>If you are on rush, here is an abstract of what you'll find in this looooong blog post:</p> <p>Metadata modeling can now be done directly in the database using Analytic Views, providing to end users a way of querying database objects without needing a knowledge of joining conditions, aggregation functions or order by clauses. <br> This post will guide you through the creation of an analytic view that replicates a part of a OBIEE's Sampleapp business model. The latest part of the post is dedicated to understanding the usage of analytic views and the benefits for end users especially in cases when self-service BI tools are used.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/1mfupd.jpg" alt="Metadata Modeling in the Database with Analytic Views"></p> <p>If you are still around and interested in the topic please take a drink and sit comfortably, it will be a good journey.</p> <h1 id="metadatamodeling">Metadata Modeling</h1> <p>What are then the Analytics Views in detail? How are they going to improve end user's ability in querying data? </p> <p>To answer above question I would take a step back. Many readers of this blog are familiar with OBIEE and its core: the <strong>Repository</strong>. The repository contains the metadata model from the physical sources till the presentation areas and includes the definition of:</p> <ul> <li><strong>Joins</strong> between tables</li> <li><strong>Hierarchies</strong> for dimensions</li> <li><strong>Aggregation</strong> rules</li> <li><strong>Security</strong> settings</li> <li><strong>Data Filters</strong></li> <li><strong>Data Sources</strong></li> </ul> <p>This allows end users to just pick columns from a Subject Area and display them in the appropriate way without needing to worry about writing SQL or knowing how the data is stored. Moreover definitions are held centrally providing the famous <strong>unique source of truth</strong> across the entire enterprise.</p> <p><img alt="Metadata Modeling in the Database with Analytic Views" width="600px" src="http://www.rittmanmead.com/blog/content/images/2017/03/RPD.png"></p> <p>The wave of self-service BI tools like Tableau or Oracle's <a href="https://www.rittmanmead.com/blog/2016/10/data-visualisation-desktop-12-2-2-0-new-features-2/">Data Visualization Desktop</a> provided products capable of querying almost any kind of data sources in a visual and intuitive way directly in the end user hands. An easy and direct access to data is a good thing for end user but, as stated above, requires knowledge of the data model, joins and aggregation methods. <br> The self-service tools can slightly simplify the process by providing some hints based on column names, types or values but the cruel reality is that the end-user has to build the necessary knowledge of the data source before providing correct results. This is why we've seen several times self-service BI tools being "attached" to OBIEE: get corporate official data from the unique source of truth and mash them up with information coming from external sources like personal Excel files or output of Big Data processes.</p> <h1 id="analyticsviews">Analytics Views</h1> <p>Analytic Views (AV) take OBIEE's metadata modeling concept and move it at database level providing a way of organizing data in a dimensional model so it can be queried with simpler SQL statements. <br> The Analytical Views are standard views with the following extra options:</p> <ul> <li>Enable the definition of facts, dimensions and hierarchies that are included in system-generated columns</li> <li>Automatically aggregate the data based on pre-defined calculations</li> <li>Include presentation metadata</li> </ul> <p>Analytics views are created with a <code>CREATE ANALYTIC VIEW</code> statement, some privileges need to be granted to the creating user, you can find the full list in Oracle's <a href="https://docs.oracle.com/database/122/DWHSG/overview-analytic-views.htm#DWHSG-GUID-6F948948-6AE6-4A89-8AAC-5B8952CEF41D">documentation</a>. </p> <p>Every analytical view is composed by the following metadata objects:</p> <ul> <li><strong>Attribute dimensions</strong>: organising table/view columns into attributes and levels.</li> <li><strong>Hierarchies</strong>: defining hierarchical relationships on top of an attribute dimension object.</li> <li><strong>Analytic view objects</strong>: defining fact data referencing both fact tables and hierarchies.</li> </ul> <p>With all the above high level concepts in mind it's now time to try how Analytical Views could be used in a reporting environment.</p> <h2 id="databaseprovisioning">Database Provisioning</h2> <p>For the purpose blog post I used <a href="https://github.com/oracle/docker-images/tree/master/OracleDatabase">Oracle's 12.2.0.1 database Docker image</a>, provided by <a href="https://twitter.com/geraldvenzl">Gerald Venzl</a>, the quickest way of spinning up a local instance. You just need to:</p> <ul> <li>Install Docker</li> <li>Download database installer from <a href="http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html">Oracle's website</a></li> <li>Place the installer in the proper location mentioned in the <a href="https://github.com/oracle/docker-images/tree/master/OracleDatabase">documentation</a></li> <li>Build Oracle Database 12.1.0.2 Enterprise Edition Docker image by executing </li> </ul> <pre><code>./buildDockerImage.sh -v 12.1.0.2 -e </code></pre> <ul> <li>Running the image by executing </li> </ul> <pre><code>docker run --name db12c -p 1521:1521 -p 5500:5500 -e ORACLE_SID=orcl -e ORACLE_PDB=pdborcl -e ORACLE_CHARACTERSET=AL32UTF8 oracle/database:12.2.0.1-ee </code></pre> <p>The detailed parameters definition can be found in the <a href="https://github.com/oracle/docker-images/tree/master/OracleDatabase">GitHub repository</a>. You can then connect via sqlplus to your local instance by executing the standard </p> <pre><code>sqlplus sys/pwd@//localhost:1521/pdborcl as sysdba </code></pre> <p>The password is generated automatically during the first run of the image and can be found in the logs, look for the following string</p> <pre><code>ORACLE AUTO GENERATED PASSWORD FOR SYS, SYSTEM AND PDBAMIN: XXXXxxxxXXX </code></pre> <p>Once the database is created it's time to set the goal: I'll try to recreate a piece of the <a href="http://www.oracle.com/technetwork/middleware/bi-foundation/obiee-samples-167534.html">Oracle's Sampleapp</a> RPD model in the database using Analytic Views.</p> <h1 id="modeldescription">Model description</h1> <p>In this blog post I'll look in the <code>01 - Sample App</code> business model and specifically I'll try to replicate the logic behind Time, Product and the <code>F0 Sales Base Measures</code> using Analytic Views.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Goal.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <h1 id="dimproduct">Dim Product</h1> <p>The Sampleapp's <code>D1 - Products (Level Based Hierarchy)</code> is based on two logical table sources: <code>SAMP_PRODUCTS_D</code> providing product name, description, LOB and Brand and the <code>SAMP_PROD_IMG_D</code> containing product images. For the purpose of this test we'll keep our focus on <code>SAMP_PRODUCTS_D</code> only. <br> The physical mapping of Logical columns is shown in the image below.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Product.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <h3 id="attributedimension">Attribute Dimension</h3> <p>The first piece we're going to build is the <em>attribute dimension</em>, where we'll be defining attributes and levels. The mappings in above image can "easily" be translated into an attributes with the following SQL.</p> <pre><code>CREATE OR REPLACE ATTRIBUTE DIMENSION D1_DIM_PRODUCT USING SAMP_PRODUCTS_D ATTRIBUTES (PROD_KEY as P0_Product_Number CLASSIFICATION caption VALUE 'P0 Product Number', PROD_DSC as P1_Product CLASSIFICATION caption VALUE 'P1 Product', TYPE as P2_Product_Type CLASSIFICATION caption VALUE 'P2 Product Type', TYPE_KEY as P2k_Product_Type CLASSIFICATION caption VALUE 'P2k Product Type', LOB as P3_LOB CLASSIFICATION caption VALUE 'P3 LOB', LOB_KEY as P3k_LOB CLASSIFICATION caption VALUE 'P3k LOB', BRAND as P4_Brand CLASSIFICATION caption VALUE 'P4 Brand', BRAND_KEY as P4k_Brand CLASSIFICATION caption VALUE 'P4k Brand', ATTRIBUTE_1 as P5_Attribute_1 CLASSIFICATION caption VALUE 'P5 Attribute 1', ATTRIBUTE_2 as P6_Attribute_2 CLASSIFICATION caption VALUE 'P6 Attribute 2', SEQUENCE as P7_Product_Sequence CLASSIFICATION caption VALUE 'P7 Product Sequence', TOTAL_VALUE as P99_Total_Value CLASSIFICATION caption VALUE 'P99 Total Value') </code></pre> <p>Few pieces to note:</p> <ul> <li><code>CREATE OR REPLACE ATTRIBUTE DIMENSION</code>: we are currently defining a dimension, the attributes and levels. </li> <li><code>USING SAMP_PRODUCTS_D</code>: defines the datasource, in our case the table <code>SAMP_PRODUCTS_D</code>. Only one datasource is allowed per dimension.</li> <li><code>PROD_KEY as P0_Product_Number</code>: using the standard notification <code>as</code> we can easily recaption columns names</li> <li><code>CLASSIFICATION CAPTION ...</code> several options can be added for each attribute like caption or description</li> </ul> <p>The dimension definition is not complete with only attribute declaration, we also need to define the levels. Those can be taken from OBIEE's hierarchy</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Hierachy.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <p>For each level we can define:</p> <ul> <li>The level name, caption and description</li> <li>The Key</li> <li>the Member Name and Caption</li> <li>the Order by Clause</li> </ul> <p>Translating above OBIEE's hierarchy levels into Oracle SQL</p> <pre><code>LEVEL BRAND CLASSIFICATION caption VALUE 'BRAND' CLASSIFICATION description VALUE 'Brand' KEY P4k_Brand MEMBER NAME P4_Brand MEMBER CAPTION P4_Brand ORDER BY P4_Brand LEVEL Product_LOB CLASSIFICATION caption VALUE 'LOB' CLASSIFICATION description VALUE 'Lob' KEY P3k_LOB MEMBER NAME P3_LOB MEMBER CAPTION P3_LOB ORDER BY P3_LOB DETERMINES(P4k_Brand) LEVEL Product_Type CLASSIFICATION caption VALUE 'Type' CLASSIFICATION description VALUE 'Type' KEY P2k_Product_Type MEMBER NAME P2_Product_Type MEMBER CAPTION P2_Product_Type ORDER BY P2_Product_Type DETERMINES(P3k_LOB,P4k_Brand) LEVEL Product_Details CLASSIFICATION caption VALUE 'Detail' CLASSIFICATION description VALUE 'Detail' KEY P0_Product_Number MEMBER NAME P1_Product MEMBER CAPTION P1_Product ORDER BY P1_Product DETERMINES(P2k_Product_Type,P3k_LOB,P4k_Brand) ALL MEMBER NAME 'ALL PRODUCTS'; </code></pre> <p>There is an additional <code>DETERMINES</code> line in above sql for each level apart from <code>Brand</code>, this is how we can specify the relationship between level keys. If we take the <code>Product_LOB</code> example, the <code>DETERMINES(P4k_Brand)</code> defines that any LOB in our table automatically determines a Brand (in OBIEE terms that LOB is a child of Brand).</p> <h3 id="hierarchy">Hierarchy</h3> <p>Next step is defining a hierarchy on top of the attribute dimension <code>D1_PRODUCTS</code> defined above. We can create it just by specifying:</p> <ul> <li>the attribute dimension to use</li> <li>the list of levels and the relation between them</li> </ul> <p>which in our case becomes</p> <pre><code>CREATE OR REPLACE HIERARCHY PRODUCT_HIER CLASSIFICATION caption VALUE 'Products Hierarchy' USING D1_DIM_PRODUCT (Product_Details CHILD OF Product_Type CHILD OF Product_LOB CHILD OF BRAND); </code></pre> <p>When looking into the hierarchy <code>Product_hier</code> we can see that it's creating an OLAP-style dimension with a row for each member at each level of the hierarchy and extra fields like <code>DEPT</code>, <code>IS_LEAF</code> and <code>HIER_ORDER</code></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Hierarchy-Details.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <p>The columns contained in <code>Product_hier</code> are:</p> <ul> <li>One for each Attribute defined in attribute dimension <code>D1_PRODUCTS</code> like <code>P0_PRODUCT_NUMBER</code> or <code>P2K_PRODUCT_TYPE</code></li> <li>The member name, caption and description and unique name </li> <li>The level name in the hierarchy and related depth</li> <li>The relative order of the member in the hierarchy</li> <li>A field <code>IS_LEAF</code> flagging hierarchy endpoints</li> <li>References to the parent level</li> </ul> <h3 id="memberuniquenames">Member Unique Names</h3> <p>A particularity to notice is that the <code>MEMBER_UNIQUE_NAME</code> of <code>Cell Phones</code> is <code>[PRODUCT_TYPE].&amp;[101]</code> which is the concatenation of the <code>LEVEL</code> and the <code>P2K_PRODUCT_TYPE</code> value. <br> One could expect the member unique name being represented as the concatenation of all the preceding hierarchy members, Brand and LOB, and the member key itself in a string like <code>[PRODUCT_TYPE].&amp;[10001]&amp;[1001]&amp;[101]</code>. </p> <p>This is the default behaviour, however in our case is not happening since we set the <code>DETERMINES(P3k_LOB,P4k_Brand)</code> in the attribute dimension definition. We Specified that Brand (<code>[10001]</code>) and LOB (<code>[1001]</code>) can automatically be inferred by the Product Type so there is no need to store those values in the member key. We can find the same setting in OBIEE's Product Type logical level</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Product-Type-Key.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <h1 id="dimdate">Dim Date</h1> <p>The basic <code>D0 Dim Date</code> can be built starting from the table <code>SAMP_TIME_DAY_D</code> following the same process as above. Like in OBIEE, some additional settings are required when creating a time dimension:</p> <ul> <li><code>DIMENSION TYPE TIME</code>: the time dimension type <strong>need</strong> to be specified</li> <li><code>LEVEL TYPE &lt;LEVEL_NAME&gt;</code>: each level in the time hierarchy needs to belong to a precise level type chosen from: <ul><li>YEARS</li> <li>HALF_YEARS</li> <li>QUARTERS</li> <li>MONTHS</li> <li>WEEKS</li> <li>DAYS</li> <li>HOURS</li> <li>MINUTES</li> <li>SECONDS</li></ul></li> </ul> <h2 id="attributedimension">Attribute Dimension</h2> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Time-Column-Mapping.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <p>Taking into consideration the additional settings, the <code>Dim Date</code> column mappings in above image can be translated in the following attribute dimension SQL definition.</p> <pre><code>CREATE OR REPLACE ATTRIBUTE DIMENSION D0_DIM_DATE DIMENSION TYPE TIME USING SAMP_TIME_DAY_D ATTRIBUTES (CALENDAR_DATE AS TOO_CALENDAR_DATE, PER_NAME_MONTH AS T02_PER_NAME_MONTH, PER_NAME_QTR AS T03_PER_NAME_QTR, PER_NAME_YEAR AS T04_PER_NAME_YEAR, DAY_KEY AS T06_ROW_WID, BEG_OF_MTH_WID AS T22_BEG_OF_MTH_WID, BEG_OF_QTR_WID AS T23_BEG_OF_QTR_WID ) LEVEL CAL_DAY LEVEL TYPE DAYS KEY TOO_CALENDAR_DATE ORDER BY TOO_CALENDAR_DATE DETERMINES(T22_BEG_OF_MTH_WID, T23_BEG_OF_QTR_WID,T04_PER_NAME_YEAR) LEVEL CAL_MONTH LEVEL TYPE MONTHS KEY T22_BEG_OF_MTH_WID MEMBER NAME T02_PER_NAME_MONTH ORDER BY T22_BEG_OF_MTH_WID DETERMINES(T23_BEG_OF_QTR_WID,T04_PER_NAME_YEAR) LEVEL CAL_QUARTER LEVEL TYPE QUARTERS KEY T23_BEG_OF_QTR_WID MEMBER NAME T03_PER_NAME_QTR ORDER BY T23_BEG_OF_QTR_WID DETERMINES(T04_PER_NAME_YEAR) LEVEL CAL_YEAR LEVEL TYPE YEARS KEY T04_PER_NAME_YEAR MEMBER NAME T04_PER_NAME_YEAR ORDER BY T04_PER_NAME_YEAR ALL MEMBER NAME 'ALL TIMES'; </code></pre> <p>You may have noticed a different mapping of keys, member names and order by attributes. Let's take the <code>CAL_MONTH</code> as example. It's defined by two columns </p> <ul> <li><code>BEG_OF_MTH_WID</code>: used for joins and ordering</li> <li><code>PER_NAME_MONTH</code>: used as "display label"</li> </ul> <p><code>PER_NAME_MONTH</code> in the <code>YYYY / MM</code> format could be also used for ordering, but most of the times end user requests months in the <code>MM / YYYY</code> format. Being able to set a ordering column different from the member name allows us to properly manage the hierarchy.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Cal_month.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <h2 id="hierarchy">Hierarchy</h2> <p>Time hierarchy follows the same rules as the product one, no additional settings are required.</p> <pre><code>CREATE OR REPLACE HIERARCHY TIME_HIER USING D0_DIM_DATE (CAL_DAY CHILD OF CAL_MONTH CHILD OF CAL_QUARTER CHILD OF CAL_YEAR); </code></pre> <h1 id="factsales">Fact Sales</h1> <p>The last step in the journey is the definition of the analytic view of the fact table that as per Oracle's <a href="https://docs.oracle.com/database/122/DWHSG/analytic-views.htm#RESOURCEID-186323-7FDC9206">documentation</a> </p> <blockquote> <p>An analytic view specifies the source of its fact data and defines measures that describe calculations or other analytic operations to perform on the data. An analytic view also specifies the attribute dimensions and hierarchies that define the rows of the analytic view.</p> </blockquote> <p>The analytic view definition contains the following specifications:</p> <ul> <li>The <strong>data source</strong>: the table or view that will be used for the calculation</li> <li>The <strong>columns</strong>: which columns from the source objects to use in the calculations</li> <li>The <strong>attribute dimensions</strong> and <strong>hierarchies</strong>: defining both the list of attributes and the levels of the analysis</li> <li>The <strong>measures</strong>: a set of aggregations based on the predefined columns from the data source.</li> </ul> <p>Within analytical views definition a <strong>materialized view</strong> can be defined in order to store aggregated values. This is a similar to OBIEE's Logical Table Source setting for aggregates.</p> <h2 id="analyticviewdefinition">Analytic View Definition</h2> <p>For the purpose of the post I'll use <code>SAMP_REVENUE_F</code> which is one of the sources of <code>F0 Sales Base Measures</code> in Sampleapp. The following image shows the logical column mapping.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Fact-Table-Column-Mapping.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <p>The above mappings can be translated in the following SQL</p> <pre><code>CREATE OR REPLACE ANALYTIC VIEW F0_SALES_BASE_MEASURES USING SAMP_REVENUE_F DIMENSION BY (D0_DIM_DATE KEY BILL_DAY_DT REFERENCES TOO_CALENDAR_DATE HIERARCHIES ( TIME_HIER DEFAULT), D1_DIM_PRODUCT KEY PROD_KEY REFERENCES P0_Product_Number HIERARCHIES ( PRODUCT_HIER DEFAULT) ) MEASURES (F1_REVENUE FACT REVENUE AGGREGATE BY SUM, F10_VARIABLE_COST FACT COST_VARIABLE AGGREGATE BY SUM, F11_FIXED_COST FACT COST_FIXED AGGREGATE BY SUM, F2_BILLED_QTY FACT UNITS, F3_DISCOUNT_AMOUNT FACT DISCNT_VALUE AGGREGATE BY SUM, F4_AVG_REVENUE FACT REVENUE AGGREGATE BY AVG, F21_REVENUE_AGO AS (LAG(F1_REVENUE) OVER (HIERARCHY TIME_HIER OFFSET 1)) ) DEFAULT MEASURE F1_REVENUE; </code></pre> <p>Some important parts need to be highlighted:</p> <ul> <li><code>USING SAMP_REVENUE_F</code>: defines the analytic view source, in our case the table <code>SAMP_REVENUE_F</code></li> <li><code>DIMENSION BY</code>: this section provides the list of dimensions and related hierarchies to take into account</li> <li><code>KEY BILL_DAY_DT REFERENCES TOO_CALENDAR_DATE</code>: defines the join between the fact table and attribute dimension</li> <li><code>HIERARCHIES (TIME_HIER DEFAULT)</code>: multiple hierarchies can be defined on top of an attribute dimension and used in an analytical view, however like in OBIEE only one will be used by default</li> <li><code>F1_REVENUE FACT REVENUE AGGREGATE BY SUM</code>: defines the measure with alias, source column and aggregation method</li> <li><code>F2_BILLED_QTY FACT UNITS</code>: if aggregation method is not defined it replies on default <code>SUM</code> </li> <li><code>F21_REVENUE_AGO</code>: new metrics can be calculated based on previously defined columns replicating OBIEE functions like time-series. The formula <code>(LAG(F1_REVENUE) OVER (HIERARCHY TIME_HIER OFFSET 1))</code> calculates the equivalent of the OBIEE's <code>AGO</code> function for each level of the hierarchy.</li> <li><code>DEFAULT MEASURE F1_REVENUE</code>: defines the default measure of the analytic view</li> </ul> <h1 id="usinganalyticviews">Using Analytic Views</h1> <p>After the analytic view definition, it's time to analyse what benefits end users have when using them. We are going to take a simple example: a query to return the <em>Revenue</em> and <em>Billed Qty</em> per <em>Month</em> and <em>Brand</em>.</p> <p>Using only the original tables we would have the following SQL</p> <pre><code>SELECT D.CAL_MONTH, D.BEG_OF_MTH_WID, P.BRAND, SUM(F.REVENUE) AS F01_REVENUE, SUM(F.UNITS) AS F02_BILLED_QTY FROM SAMP_REVENUE_F F JOIN SAMP_PRODUCTS_D P ON (F.PROD_KEY = P.PROD_KEY) JOIN SAMP_TIME_DAY_D D ON (F.BILL_DAY_DT = D.CALENDAR_DATE) GROUP BY D.CAL_MONTH, D.BEG_OF_MTH_WID, P.BRAND ORDER BY D.BEG_OF_MTH_WID, P.BRAND; </code></pre> <p>The above SQL requires the knowledge of:</p> <ul> <li>Aggregation methods</li> <li>Joins</li> <li>Group by</li> <li>Ordering</li> </ul> <p>Even if this is an oversimplification of the analytic view usage you can already spot that some knowledge of the base data structure and SQL language is needed.</p> <p>Using the analytic views defined above, the query can be written as </p> <pre><code>SELECT TIME_HIER.MEMBER_NAME AS TIME_SLICE, PRODUCT_HIER.MEMBER_NAME AS PRODUCT_SLICE, F1_REVENUE, F2_BILLED_QTY FROM F0_SALES_BASE_MEASURES WHERE TIME_HIER.LEVEL_NAME IN ('CAL_MONTH') AND PRODUCT_HIER.LEVEL_NAME IN ('BRAND') ORDER BY TIME_HIER.HIER_ORDER, PRODUCT_HIER.HIER_ORDER; </code></pre> <p>As you can see, there is a simplification of the SQL statement: no more aggregation, joining conditions and group by predicates are needed. All the end-user has to know is the analytical view name, and the related hierarchies that can be used.</p> <p>The additional benefit is that if we want to change the level of granularity of the above query we just need to change the <code>WHERE</code> condition. E.g. to have the rollup per Year and LOB we just have to substitute</p> <pre><code>WHERE TIME_HIER.LEVEL_NAME IN ('CAL_MONTH') AND PRODUCT_HIER.LEVEL_NAME IN ('BRAND') </code></pre> <p>with </p> <pre><code>WHERE TIME_HIER.LEVEL_NAME IN ('CAL_YEAR') AND PRODUCT_HIER.LEVEL_NAME IN ('LOB') </code></pre> <p>without touching granularity, group by and order by statements.</p> <h2 id="usinganalyticviewsindvd">Using Analytic Views in DVD</h2> <p>At the beginning of my blog post I wrote that Analytic Views could be useful when used in conjunction with self-service BI tools. Let's have a look at how the end user journey is simplified in the case of Oracle's <a href="https://www.rittmanmead.com/blog/2016/10/data-visualisation-desktop-12-2-2-0-new-features-2/">Data Visualization Desktop</a>.</p> <p>Without AV the end-user had two options to source the data:</p> <ul> <li><strong>Write the complex SQL statement</strong> with joining condition, group and order by clause in the SQL editor to retrieve data at the correct level with the related dimension</li> <li>Import the fact table and dimensions as <strong>separate datasources</strong> and join them together in DVD's project.</li> </ul> <p>Both options require a SQL and joining conditions knowledge in order to being able to present correct data. Using Analytic Views the process is simplified. We just need to create a new source pointing to the database where the analytic views are sitting. <br> Next step is retrieve the necessary columns from the analytic view. Unfortunately analytic views are not visible from DVD object explorer (only standard table and views are shown)</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/List-of-Tables.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <p>We can however specify with a simple SQL statement all the informations we need like Time and Member Slice, the related levels and the order in hierarchy.</p> <pre><code>SELECT TIME_HIER.MEMBER_NAME AS TIME_SLICE, PRODUCT_HIER.MEMBER_NAME AS PRODUCT_SLICE, TIME_HIER.LEVEL_NAME AS TIME_LEVEL, PRODUCT_HIER.LEVEL_NAME AS PRODUCT_LEVEL, TIME_HIER.HIER_ORDER AS TIME_HIER_ORDER, PRODUCT_HIER.HIER_ORDER AS PRODUCT_HIER_ORDER, F1_REVENUE, F2_BILLED_QTY FROM F0_SALES_BASE_MEASURES ORDER BY TIME_HIER.HIER_ORDER, PRODUCT_HIER.HIER_ORDER; </code></pre> <p>You may have noted that I'm not specifying any <code>WHERE</code> clause for level filtering: as end user I want to be able to retrieve all the necessary levels by just changing a filter in my DVD project. After including the above SQL in the datasource definition and amending the measure/attribute definition I can start playing with the analytic view data.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/DVD-Source.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <p>I can simply include the dimension's <code>MEMBER_NAME</code> in the graphs together with the measures and add the <code>LEVEL_NAME</code> in the filters. In this way I can change the graph granularity by simply selecting the appropriate <code>LEVEL</code> in the filter selector for all the dimensions available.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/DVD-Graphs.png" alt="Metadata Modeling in the Database with Analytic Views"></p> <p>One particular to notice however is that all the data coming from various columns like date, month and year are "condensed" into a single <code>VARCHAR</code> column. In case of different datatypes (like date in the time dimension) this will prevent a correct usage of some DVD's capabilities like time series or trending functions. However if a particular type of graph is needed for a specific level, either an ad-hoc query or a casting operation can be used.</p> <h1 id="conclusion">Conclusion</h1> <p>In this blog post we analysed the Analytic Views, a new component in Oracle Database 12.2 and how those can be used to "move" the metadata modeling at DB level to provide an easier query syntax to end-users.</p> <p>Usually metadata modeling is done in reporting tools like OBIEE that offers additional set of features on top of the one included in analytic views. However centralized reporting tools like OBIEE are not present everywhere and, with the wave of self-service BI tools, analytic views represent a perfect method of enabling users not familiar with SQL to simply query their enterprise data.</p> <p>If you are interested in understanding more about analytic views or metadata modeling, don't hesitate to <a href="https://www.rittmanmead.com/contact/">contact us</a>! <br> If you want to improve the SQL skills of your company workforce, check out our recently launched <a href="https://www.rittmanmead.com/sql-for-beginners/?utm_campaign=SQL%2520Training&amp;utm_source=SQL%2520Training">SQL for beginners training</a>!</p> Francesco Tisiot bb5fb1ef-3c82-474b-be4f-abe49c2d0ae7 Mon Apr 03 2017 10:00:00 GMT-0400 (EDT) Oracle GoldenGate Consultant http://gavinsoorma.com/2017/04/oracle-goldengate-consultant/ <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/04/ad2.jpg" rel="attachment wp-att-7498"><img class="aligncenter size-full wp-image-7498" src="http://gavinsoorma.com/wp-content/uploads/2017/04/ad2.jpg" alt="ad2" width="1281" height="483" srcset="http://gavinsoorma.com/wp-content/uploads/2017/04/ad2.jpg 1281w, http://gavinsoorma.com/wp-content/uploads/2017/04/ad2-300x113.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/04/ad2-768x290.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/04/ad2-1024x386.jpg 1024w, http://gavinsoorma.com/wp-content/uploads/2017/04/ad2-300x113@2x.jpg 600w" sizes="(max-width: 1281px) 100vw, 1281px" /></a></p> Gavin Soorma http://gavinsoorma.com/?p=7500 Mon Apr 03 2017 00:49:14 GMT-0400 (EDT) Oracle OpenWorld 2017: Call for Speakers Is Now Open http://www.odtug.com/p/bl/et/blogaid=695&source=1 What’s the big idea? Share yours with the world's largest gathering of Oracle technologists and business leaders during Oracle OpenWorld 2017, happening October 1-5, 2017 in San Francisco. This year’s Call for Speakers is NOW open. ODTUG http://www.odtug.com/p/bl/et/blogaid=695&source=1 Fri Mar 31 2017 11:19:25 GMT-0400 (EDT) Installing OBIEE 12c on Exalytics https://medium.com/red-pill-analytics/installing-obiee-12c-on-exalytics-a5042778eb12?source=rss----abcc62a8d63e---4 <figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MOovkVtOVq8JNqe_3P0JlA.jpeg" /><figcaption>Photo Credit: <a href="https://unsplash.com/collections/614563/utility-infrastructure?photo=v_CxSroHKWg">Matthew Hamilton</a></figcaption></figure><h4>The Definitive Guide (Since Oracle Doesn’t Have One Yet)</h4><p>Red Pill Analytics recently performed the installation of OBIEE 12c on an Exalytics machine for one of our customers. There is no option to use the <a href="https://docs.oracle.com/cd/E62968_01/bi.1/e62967/install_procedure.htm#BIXIA3634">Domain Management Utility</a> for installing OBIEE 12c… that’s still only capable of installing OBIEE 11g. Therefore OBIEE 12c is a manual install on Exalytics, but it’s very similar to installing OBIEE 12c on OEL 6.6 instead.</p><p>The customer wanted to host both the DEV and TEST environments on one machine. We could have used one Middleware Home and multiple Domains — which is very easy in 12c — but the client wanted complete isolation between DEV and TEST, which is best delivered by persisting dual Middleware Homes. There are of course pros and cons to each approach, but due to the customer requirements, we took this route.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/754/1*tcyRxDOONaxKa4-1hvWSpw.png" /><figcaption>This is the recommended architecture for this installation.</figcaption></figure><p>Finally, we also wanted to split the BI Domains from the Middleware Homes as well, which is the <a href="https://docs.oracle.com/middleware/12212/lcm/BIEIG/GUID-16F78BFD-4095-45EE-9C3B-DB49AD5CBAAD.htm#GUID-EF0F7D8D-6338-4AB4-AE53-F8F7797D2316">recommended install technique for 12c</a>. This was not an option in OBIEE 11g, as the Domain was really useless, and it was the Instance that was key, so patching meant upgrading the installation and the configuration at the same time. Now, everything that was done by the Instance in 11g is managed by the Domain, which like most of Oracle Middleware, is where it belongs.</p><p>So what does this actually mean? In simple terms, an upgrade of OBIEE 12c means creating a new Fusion Middleware Home, and then upgrading the Domain to use that new Fusion Middleware Home. With an architecture like this, we can avoid some confusion. For example if we place the Domain inside of the Fusion Middleware Home (old school), when we upgrade, the Domain will be within an older version of FMW, but pointed at a newer version. Seems strange and confusing to me. Don’t feel bad if you didn’t know this OBIEE 12c fun fact; we were in contact with Oracle ACS during this process, and surprisingly even they were unaware of it!</p><p>This post will walk through the steps of accomplishing these tasks. These steps could be adapted for installing on any Linux environment that is pursuing an architecture set up like this.</p><p>A few additional notes before we get started, then. I have set up the directory structure so that each OBI instance will be on it’s own mount point (/u01 and /u02). I also created two separate oracle users — one for each instance. Usernames like Oracle01 and Oracle02 (or something similar) work well in this case; these easily correspond to the mount points our environments are deployed on. Why bother with separate users at all? This allows us to avoid any complications of having one user be the software owner for multiple instances. You may need to edit the memory limits set for these users in the /etc/security/limits.conf file. Our default limits were lower than what we needed to run the services, which could make you look a bit like Han Solo when you see the config failing upon the start up phase.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/268/1*ZoAixM33Muh_u8ObAb9Y8Q.gif" /><figcaption>Yeah, yeah. We know it wasn’t in the documentation to edit that file.</figcaption></figure><p>I installed using /u02, so the instructions will reflect those paths. Be sure to change your scripts to match your directories where applicable. Also note that I will be installing via response file, not with the GUI. Here are the response files for the <a href="https://redpillanalytics.slack.com/files/phil.goerdt/F4S5UJYH1/fmw_install.rsp">FMW Infrastructure Install,</a> the <a href="https://slack-files.com/T06TQHAHM-F4S8ZJ160-835e6a8325">OBIEE Install</a>, and the <a href="https://slack-files.com/T06TQHAHM-F4S8ZE0DA-6ef87c6397">OBIEE Configuration</a>.</p><ol><li>Obtain the software files and move them to your Linux environment. You can download them and SCP them to the machine; or, you can use WGET to have the files land directly on to your machine. For this installation you will need JDK1.8.0 version 101 or higher, the FMW Infrastructure installer, and the OBIEE 12c files.</li><li>Install the JDK (be sure to have 64 bit) into the appropriate directory by unzipping the package and moving the directory. We’ll be using partitioned JDKs in this environment, meaning that we will have a JDK that supports each OBI environment. I placed mine in /u02/oracle/java.</li><li>Then set the JAVA_HOME variable to your new jdk directory by running an export command. Additionally, export this to the PATH variable. Make sure that they have exported correctly by echoing these variables. Finally, check the java version with the java version command. The commands are listed below.</li></ol><pre>export JAVA_HOME=/u02/oracle/java/jdk1.8.0_111</pre><pre>export PATH=$JAVA_HOME/bin:$PATH</pre><pre>echo $JAVA_HOME $PATH</pre><pre>java -version</pre><p>To work around any potential X forwarding or tunneling issues you may have on your machine, I’ll be describing how to do the silent install. This install type will run the install without a GUI window, meaning that all of the parameters for the install must be set within the response file. This also means that we will have to create all of the directories that we want our files to land in, as we won’t be able to create them on the fly within the GUI. Let’s begin.</p><p>Run the following commands to create the directory structure:</p><pre>mkdir /u02/oracle/product<br>mkdir /u02/oracle/product/12.2.1.2<br>mkdir /u02/oracle/product/12.2.1.2/obi_1<br>mkdir /u02/oracle/config<br>mkdir /u02/oracle/config/domains<br>mkdir /u02/oracle/config/domains/bi<br>mkdir /u02/oracle/oraInventory<br>echo &#39;inventory_loc=/u02/oracle/oraInventory&#39; &gt;&gt; /u02/oracle/oraInventory/oraInst.loc<br>echo &#39;inst_group=oracle&#39; &gt;&gt; /u02/oracle/oraInventory/oraInst.loc</pre><p>Once you have created the directory and the install files, it’s time to edit the response files. In the location where you have unzipped the software, open the .rsp file and edit the ORACLE_HOME value to match the directory above. Mine was /u02/oracle/product/12.2.1.2/obi_1. Also edit any other parameters in the response file that need to be changed for your environment. Then execute the following command to install the infrastructure. Your command may be different depending on your directory set up.</p><pre>java -jar fmw_12.2.1.2.0_infrastructure.jar -silent -responseFile ./fmw_12.2.1.2.0_infrastructure.rsp -invPtrLoc /u02/oracle/oraInventory/oraInst.loc </pre><p>Once the infrastructure has finished installing, we’ll need to export several variables for the OBIEE software install. Run the following commands to export the DOMAIN_HOME, FMW_HOME, and PATH variables. As before, I recommend setting these in the user’s bash profile as well. Once you have set the variables, be sure to check them with the echo command.</p><pre>export DOMAIN_HOME=/u02/oracle/config/domains/bi<br>export FMW_HOME=/u02/oracle/product/12.2.1.2/obi_1<br>export PATH=$PATH:$DOMAIN_HOME/bitools/bin:$FMW_HOME/oracle_common/common/bin<br>echo $DOMAIN_HOME $FMW_HOME $PATH</pre><p>Now unzip the OBIEE software packages and edit the response file to reflect the environment you’d like to create. Specifically, you will have to edit the DECLINE_AUTO_UPDATES, ORACLE_HOME, and INSTALL_TYPE parameters to conduct the install. Once the file is ready, execute the installer by running the following command (again, be sure to tailor it to your environment).</p><pre>./biplatform-12.2.1.2.0_linux64.bin -silent -responseFile /u02/oracle/bi_platform-12.2.1.2.0_linux64.rsp -invPtrLoc /u02/oracle/oraInventory/oraInst.loc</pre><p>Once this install has completed, make edits to your config response file, and navigate to the following path: $FMW_HOME/bi/bin. Here you will find the config scripts for running the configuration of your environment. Run the below command to kick off the configuration (with edits made for your environment, of course).</p><pre>./config.sh -silent -responseFile /u01/oracle/config.rsp</pre><p>Once the configuration has completed, the services should start right up, and you’ll be able to start using your environment!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a5042778eb12" width="1" height="1"><hr><p><a href="https://medium.com/red-pill-analytics/installing-obiee-12c-on-exalytics-a5042778eb12">Installing OBIEE 12c on Exalytics</a> was originally published in <a href="https://medium.com/red-pill-analytics">Red Pill Analytics</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p> Phil Goerdt https://medium.com/p/a5042778eb12 Fri Mar 31 2017 09:13:07 GMT-0400 (EDT) Installing OBIEE 12c on Exalytics http://redpillanalytics.com/installing-obiee-12c-on-exalytics/ <p><img width="300" height="200" src="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil2.jpg?fit=300%2C200" class="attachment-medium size-medium wp-post-image" alt="Installing OBIEE 12c on Exalytics" srcset="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil2.jpg?w=2000 2000w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil2.jpg?resize=300%2C200 300w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil2.jpg?resize=768%2C512 768w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil2.jpg?resize=1024%2C682 1024w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="4776" data-permalink="http://redpillanalytics.com/installing-obiee-12c-on-exalytics/phil2/" data-orig-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil2.jpg?fit=2000%2C1333" data-orig-size="2000,1333" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Installing OBIEE 12c on Exalytics" data-image-description="&lt;p&gt;Installing OBIEE 12c on Exalytics&lt;/p&gt; " data-medium-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil2.jpg?fit=300%2C200" data-large-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil2.jpg?fit=1024%2C682" /></p><p id="fa33" class="graf graf--p graf-after--h4">Red Pill Analytics recently performed the installation of OBIEE 12c on an Exalytics machine for one of our customers. There is no option to use the <a class="markup--anchor markup--p-anchor" href="https://medium.com/r/?url=https%3A%2F%2Fdocs.oracle.com%2Fcd%2FE62968_01%2Fbi.1%2Fe62967%2Finstall_procedure.htm%23BIXIA3634" target="_blank" rel="nofollow" data-href="https://medium.com/r/?url=https%3A%2F%2Fdocs.oracle.com%2Fcd%2FE62968_01%2Fbi.1%2Fe62967%2Finstall_procedure.htm%23BIXIA3634">Domain Management Utility</a> for installing OBIEE 12c… that’s still only capable of installing OBIEE 11g. Therefore OBIEE 12c is a manual install on Exalytics, but it’s very similar to installing OBIEE 12c on OEL 6.6 instead.</p> <p id="b062" class="graf graf--p graf-after--p">The customer wanted to host both the DEV and TEST environments on one machine. We could have used one Middleware Home and multiple Domains — which is very easy in 12c — but the client wanted complete isolation between DEV and TEST, which is best delivered by persisting dual Middleware Homes. There are of course pros and cons to each approach, but due to the customer requirements, we took this route.</p> <figure class="graf graf--figure graf--layoutOutsetLeft"></figure> <div id="attachment_4775" style="width: 764px" class="wp-caption alignnone"><img data-attachment-id="4775" data-permalink="http://redpillanalytics.com/installing-obiee-12c-on-exalytics/phil1/" data-orig-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil1.png?fit=754%2C600" data-orig-size="754,600" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Recommended Install" data-image-description="" data-medium-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil1.png?fit=300%2C239" data-large-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil1.png?fit=754%2C600" class="wp-image-4775 size-full" src="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil1.png?resize=754%2C600" alt="Installing OBIEE 12c on Exalytics" srcset="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil1.png?w=754 754w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Phil1.png?resize=300%2C239 300w" sizes="(max-width: 754px) 100vw, 754px" data-recalc-dims="1" /><p class="wp-caption-text">This is the recommended architecture for this installation.</p></div> <hr /> <p id="9292" class="graf graf--p graf-after--figure">Finally, we also wanted to split the BI Domains from the Middleware Homes as well, which is the <a class="markup--anchor markup--p-anchor" href="https://medium.com/r/?url=https%3A%2F%2Fdocs.oracle.com%2Fmiddleware%2F12212%2Flcm%2FBIEIG%2FGUID-16F78BFD-4095-45EE-9C3B-DB49AD5CBAAD.htm%23GUID-EF0F7D8D-6338-4AB4-AE53-F8F7797D2316" target="_blank" rel="nofollow" data-href="https://medium.com/r/?url=https%3A%2F%2Fdocs.oracle.com%2Fmiddleware%2F12212%2Flcm%2FBIEIG%2FGUID-16F78BFD-4095-45EE-9C3B-DB49AD5CBAAD.htm%23GUID-EF0F7D8D-6338-4AB4-AE53-F8F7797D2316">recommended install technique for 12c</a>. This was not an option in OBIEE 11g, as the Domain was really useless, and it was the Instance that was key, so patching meant upgrading the installation and the configuration at the same time. Now, everything that was done by the Instance in 11g is managed by the Domain, which like most of Oracle Middleware, is where it belongs.</p> <p id="a846" class="graf graf--p graf-after--p">So what does this actually mean? In simple terms, an upgrade of OBIEE 12c means creating a new Fusion Middleware Home, and then upgrading the Domain to use that new Fusion Middleware Home. With an architecture like this, we can avoid some confusion. For example if we place the Domain inside of the Fusion Middleware Home (old school), when we upgrade, the Domain will be within an older version of FMW, but pointed at a newer version. Seems strange and confusing to me. Don’t feel bad if you didn’t know this OBIEE 12c fun fact; we were in contact with Oracle ACS during this process, and surprisingly even they were unaware of it!</p> <p class="graf graf--p">This post will walk through the steps of accomplishing these tasks. These steps could be adapted for installing on any Linux environment that is pursuing an architecture set up like this.</p> <hr /> <p id="8ebb" class="graf graf--p graf--leading">A few additional notes before we get started, then. I have set up the directory structure so that each OBI instance will be on it’s own mount point (/u01 and /u02). I also created two separate oracle users — one for each instance. Usernames like Oracle01 and Oracle02 (or something similar) work well in this case; these easily correspond to the mount points our environments are deployed on. Why bother with separate users at all? This allows us to avoid any complications of having one user be the software owner for multiple instances. You may need to edit the memory limits set for these users in the /etc/security/limits.conf file. Our default limits were lower than what we needed to run the services, which could make you look a bit like Han Solo when you see the config failing upon the start up phase.</p> <figure id="d47c" class="graf graf--figure graf-after--p"> <div class="aspectRatioPlaceholder is-locked"> <div class="aspectRatioPlaceholder-fill"></div> <div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="1*ZoAixM33Muh_u8ObAb9Y8Q.gif" data-width="268" data-height="290" data-scroll="native"> <p>&nbsp;</p> <div style="width: 278px" class="wp-caption aligncenter"><img class="progressiveMedia-image js-progressiveMedia-image" src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*ZoAixM33Muh_u8ObAb9Y8Q.gif?resize=268%2C290&#038;ssl=1" alt="" data-src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*ZoAixM33Muh_u8ObAb9Y8Q.gif?resize=268%2C290&#038;ssl=1" data-recalc-dims="1" /><p class="wp-caption-text">Yeah, yeah. We know it wasn’t in the documentation to edit that file.</p></div> </div> </div><figcaption class="imageCaption"></figcaption></figure> <p id="b180" class="graf graf--p graf-after--figure">I installed using /u02, so the instructions will reflect those paths. Be sure to change your scripts to match your directories where applicable. Also note that I will be installing via response file, not with the GUI. Here are the response files for the <a class="markup--anchor markup--p-anchor" href="https://medium.com/r/?url=https%3A%2F%2Fredpillanalytics.slack.com%2Ffiles%2Fphil.goerdt%2FF4S5UJYH1%2Ffmw_install.rsp" target="_blank" rel="nofollow" data-href="https://medium.com/r/?url=https%3A%2F%2Fredpillanalytics.slack.com%2Ffiles%2Fphil.goerdt%2FF4S5UJYH1%2Ffmw_install.rsp">FMW Infrastructure Install,</a> the <a class="markup--anchor markup--p-anchor" href="https://medium.com/r/?url=https%3A%2F%2Fslack-files.com%2FT06TQHAHM-F4S8ZJ160-835e6a8325" target="_blank" rel="nofollow" data-href="https://medium.com/r/?url=https%3A%2F%2Fslack-files.com%2FT06TQHAHM-F4S8ZJ160-835e6a8325">OBIEE Install</a>, and the <a class="markup--anchor markup--p-anchor" href="https://medium.com/r/?url=https%3A%2F%2Fslack-files.com%2FT06TQHAHM-F4S8ZE0DA-6ef87c6397" target="_blank" rel="nofollow" data-href="https://medium.com/r/?url=https%3A%2F%2Fslack-files.com%2FT06TQHAHM-F4S8ZE0DA-6ef87c6397">OBIEE Configuration</a>.</p> <ol class="postList"> <li id="a303" class="graf graf--li graf-after--p">Obtain the software files and move them to your Linux environment. You can download them and SCP them to the machine; or, you can use WGET to have the files land directly on to your machine. For this installation you will need JDK1.8.0 version 101 or higher, the FMW Infrastructure installer, and the OBIEE 12c files.</li> <li id="a259" class="graf graf--li graf-after--li">Install the JDK (be sure to have 64 bit) into the appropriate directory by unzipping the package and moving the directory. We’ll be using partitioned JDKs in this environment, meaning that we will have a JDK that supports each OBI environment. I placed mine in /u02/oracle/java.</li> <li id="8626" class="graf graf--li graf-after--li">Then set the JAVA_HOME variable to your new jdk directory by running an export command. Additionally, export this to the PATH variable. Make sure that they have exported correctly by echoing these variables. Finally, check the java version with the java version command. The commands are listed below.</li> </ol> <p>&nbsp;</p> <p><code> export JAVA_HOME=/u02/oracle/product/java/jdk1.8.0_111<br /> export PATH=$JAVA_HOME/bin:$PATH<br /> echo $JAVA_HOME $PATH<br /> java -version</code></p> <p>&nbsp;</p> <p id="6061" class="graf graf--p graf-after--pre">To work around any potential X forwarding or tunneling issues you may have on your machine, I’ll be describing how to do the silent install. This install type will run the install without a GUI window, meaning that all of the parameters for the install must be set within the response file. This also means that we will have to create all of the directories that we want our files to land in, as we won’t be able to create them on the fly within the GUI. Let’s begin.</p> <p id="e572" class="graf graf--p graf-after--p">Run the following commands to create the directory structure:</p> <p><code>mkdir /u02/oracle/product<br /> mkdir /u02/oracle/product/12.2.1.2<br /> mkdir /u02/oracle/product/12.2.1.2/obi_1<br /> mkdir /u02/oracle/config<br /> mkdir /u02/oracle/config/domains<br /> mkdir /u02/oracle/config/domains/bi<br /> mkdir /u02/oracle/oraInventory<br /> echo 'inventory_loc=/u02/oracle/oraInventory' &gt;&gt; /u02/oracle/oraInventory/oraInst.loc<br /> echo 'inst_group=oracle' &gt;&gt; /u02/oracle/oraInventory/oraInst.loc</code></p> <p>&nbsp;</p> <p>Once you have created the directory and the install files, it’s time to edit the response files. In the location where you have unzipped the software, open the .rsp file and edit the ORACLE_HOME value to match the directory above. Mine was /u02/oracle/product/12.2.1.2/obi_1. Also edit any other parameters in the response file that need to be changed for your environment. Then execute the following command to install the infrastructure. Your command may be different depending on your directory set up.</p> <p>&nbsp;</p> <p><code>java -jar fmw_12.2.1.2.0_infrastructure.jar -silent -responseFile ./fmw_12.2.1.2.0_infrastructure.rsp -invPtrLoc /u02/oracle/oraInventory/oraInst.loc</code></p> <p>&nbsp;</p> <p>Once the infrastructure has finished installing, we’ll need to export several variables for the OBIEE software install. Run the following commands to export the DOMAIN_HOME, FMW_HOME, and PATH variables. As before, I recommend setting these in the user’s bash profile as well. Once you have set the variables, be sure to check them with the echo command.</p> <p>&nbsp;</p> <p><code>export DOMAIN_HOME=/u02/oracle/config/domains/bi<br /> export FMW_HOME=/u02/oracle/product/12.2.1.2/obi_1<br /> export PATH=$PATH:$DOMAIN_HOME/bitools/bin:$FMW_HOME/oracle_common/common/bin<br /> echo $DOMAIN_HOME $FMW_HOME $PATH</code></p> <p>&nbsp;</p> <p>Now unzip the OBIEE software packages and edit the response file to reflect the environment you’d like to create. Specifically, you will have to edit the DECLINE_AUTO_UPDATES, ORACLE_HOME, and INSTALL_TYPE parameters to conduct the install. Once the file is ready, execute the installer by running the following command (again, be sure to tailor it to your environment).</p> <p>&nbsp;</p> <p><code>./biplatform-12.2.1.2.0_linux64.bin -silent -responseFile /u02/oracle/bi_platform-12.2.1.2.0_linux64.rsp -invPtrLoc /u02/oracle/oraInventory/oraInst.loc</code></p> <p>&nbsp;</p> <p>Once this install has completed, make edits to your config response file, and navigate to the following path: $FMW_HOME/bi/bin. Here you will find the config scripts for running the configuration of your environment. Run the below command to kick off the configuration (with edits made for your environment, of course).</p> <p>&nbsp;</p> <p><code>./config.sh -silent -responseFile /u01/oracle/config.rsp</code></p> <p>&nbsp;</p> <p>Once the configuration has completed, the services should start right up, and you’ll be able to start using your environment!</p> Phil Goerdt http://redpillanalytics.com/?p=4767 Fri Mar 31 2017 09:12:17 GMT-0400 (EDT) GaOUG Tech Days Session http://redpillanalytics.com/gaoug-session/ <p><img width="300" height="150" src="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/atlanta.jpg?fit=300%2C150" class="attachment-medium size-medium wp-post-image" alt="GAOUG" srcset="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/atlanta.jpg?w=3397 3397w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/atlanta.jpg?resize=300%2C150 300w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/atlanta.jpg?resize=768%2C385 768w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/atlanta.jpg?resize=1024%2C513 1024w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/atlanta.jpg?w=2340 2340w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="4806" data-permalink="http://redpillanalytics.com/gaoug-session/atlanta/" data-orig-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/atlanta.jpg?fit=3397%2C1703" data-orig-size="3397,1703" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;8&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;NIKON D200&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1168297991&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;155&quot;,&quot;iso&quot;:&quot;100&quot;,&quot;shutter_speed&quot;:&quot;30&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;1&quot;}" data-image-title="GAOUG" data-image-description="&lt;p&gt;GAOUG&lt;/p&gt; " data-medium-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/atlanta.jpg?fit=300%2C150" data-large-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/atlanta.jpg?fit=1024%2C513" /></p><p><a href="http://gaoug.strikingly.com/#tech-days-2017">GaOUG Tech Days</a> is just around the corner: May 9-10 to be exact. We have an incredible venue in Downtown Atlanta called <a href="http://loudermilkcenter.com">the Loudermilk Center</a> with exceptional event space throughout. We have a great <a href="https://www.technicalconferencesolutions.com/pls/caat/caat_abstract_reports.schedule?conference_id=174">collection of national speakers</a> from the Oracle Community, so the locals in Atlanta can get a feel for larger, more national conferences without leaving the Dirty Dirty. Additionally, we have the hugely popular, always engaging, Oracle Master Product Manager <a href="https://twitter.com/sqlmaria">Maria Colgan</a> giving the keynote <a href="http://gaoug.strikingly.com/#keynote-address">What to Expect from Oracle Database 12c</a>.</p> <div id="attachment_4784" style="width: 656px" class="wp-caption aligncenter"><img data-attachment-id="4784" data-permalink="http://redpillanalytics.com/gaoug-session/2f861d5/" data-orig-file="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/2f861d5.png?fit=646%2C223" data-orig-size="646,223" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="The Loudermilk Center in Downtown Atlanta" data-image-description="" data-medium-file="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/2f861d5.png?fit=300%2C104" data-large-file="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/2f861d5.png?fit=646%2C223" class="wp-image-4784 size-full" src="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/2f861d5.png?resize=646%2C223" alt="" srcset="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/2f861d5.png?w=646 646w, https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/2f861d5.png?resize=300%2C104 300w" sizes="(max-width: 646px) 100vw, 646px" data-recalc-dims="1" /><p class="wp-caption-text">The Loudermilk Center in Downtown Atlanta is the perfect venue for GaOUG Tech Days.</p></div> <p>This blog post is a member of a &#8220;blog hop&#8221; from several of the GaOUG Tech Days speakers. A blog hop is similar to a <a href="https://en.wikipedia.org/wiki/Webring">webring</a> (I&#8217;m dating myself here): a group of bloggers get together and orchestrate a series of posts that are published in unison with links between them. We tried to represent several streams running at Tech Days: Cloud, Database, Middleware, and Big Data. Just like my post here, each of the blog posts below will be talking about sessions, and why you should attend GaOUG Tech Days. Thanks to the speakers for all that they do, including helping us get the word out about the conference.</p> <p>&nbsp;</p> <p><a href="http://dbasolved.com/2017/03/31/oracle-goldengate-101-at-ioug-17-and-gaoug-techdays-17-within-two-month/">Bobby Curtis</a>, Oracle, &#8220;Oracle GoldenGate 101&#8221;</p> <p><a href="http://blog.dbvisit.com/kafka-for-the-oracle-dba/">Chris Lawless</a>, Dbvisit, &#8220;Kafka for the Oracle DBA&#8221;</p> <p><a href="http://dbaontap.com/2017/03/31/gaoug-tech-days-session-rest-request-json-apex-packages/">Danny Bryant</a>, Accenture Enkitec, &#8220;REST Request and JSON with APEX Packages&#8221;</p> <p><a href="https://theitside.net/2017/03/30/the-east-coast-gets-some-epm-lovegatechdays17/">Eric Helmer</a>, Mercury Technology Group, &#8220;Maintaining, Monitoring, Administering, and Patching Oracle EPM Systems&#8221;</p> <p><a href="https://jimczuprynski.wordpress.com/2017/03/31/2017-05-09_gaoug/">Jim Czuprynski</a>, OnX Enterprise Solutions, &#8220;DBA 3.0: Transform Yourself into a Cloud DBA, or Face a Stormy Future&#8221; and &#8220;Stop Guessing, Start Analyzing: New Analytic View Features in Oracle Database 12cR2&#8221;</p> <h2>Apache Kafka and Data Streaming</h2> <p>So you&#8217;d like me to tell you a little bit about my session? Sure. Of course. If you say so. As you can guess from the title, I&#8217;ll be talking about Apache Kafka. With new data management and data pipeline frameworks burrowing their way into the enterprise, Kafka has been a popular project lately because it provides a single point of ingestion for enterprise data regardless of their downstream implication. Traditionally, when building standard ETL processes, we would tightly couple the ingestion of data, the processing of data, and their downstream delivery: it&#8217;s all right there in the name: &#8220;extract, transform, load.&#8221; Kafka brings an elevated order to this chaos. It serves as the enterprise distributed commit log and enables us to ingest data without worrying about how we plan to use them.</p> <div id="attachment_4789" style="width: 710px" class="wp-caption aligncenter"><img data-attachment-id="4789" data-permalink="http://redpillanalytics.com/gaoug-session/kafka-high-level/" data-orig-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Kafka-High-Level.png?fit=2666%2C1500" data-orig-size="2666,1500" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Kafka High Level" data-image-description="" data-medium-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Kafka-High-Level.png?fit=300%2C169" data-large-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Kafka-High-Level.png?fit=1024%2C576" class="wp-image-4789" src="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Kafka-High-Level.png?resize=700%2C394" alt="" srcset="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Kafka-High-Level.png?resize=1024%2C576 1024w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Kafka-High-Level.png?resize=300%2C169 300w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Kafka-High-Level.png?resize=768%2C432 768w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Kafka-High-Level.png?w=2340 2340w" sizes="(max-width: 700px) 100vw, 700px" data-recalc-dims="1" /><p class="wp-caption-text">Apache Kafka is a single point of Data Ingestion</p></div> <p>Even though it wasn&#8217;t available when I submitted the abstract, <a href="https://cloud.oracle.com/event-hub">Event Hub in the Oracle Cloud</a> is now available, which is full-on Apache Kafka in the Cloud, and perhaps the first of the enterprise Cloud vendors to introduce this. There&#8217;s quite a bit of scaffolding around Event Hub to make it gel with the rest of the Oracle Cloud; we&#8217;ll take a look and see how &#8220;Kafka&#8221; it is, and whether this additional scaffolding bears fruit for developers and administrators.</p> <h2>Analytic Microservices</h2> <p>With Kafka as the backbone, I&#8217;ll prescribe a new way of thinking about data and analytics. Taking a beat from the modern practice of building applications as disparate collections of separate, connected applications, we&#8217;ll investigate this practice and see why it&#8217;s so appealing. We&#8217;ll explore how Apache Kafka enables the use of similar design techniques to deliver a cohesive analytics platform.</p> <h2>See us at GaOUG Tech Days</h2> <p>If you&#8217;re going to be in Atlanta on May 9 and 10, then <a href="https://www.eventbrite.com/e/gaoug-tech-days-2017-registration-28290002158">register for GaOUG Tech Days</a> and join us for a great couple of days. 2017 will be our best event to date for the GaOUG, including excellent content and a can&#8217;t-be-beat keynote speaker in Maria Colgan. If you want to chat with me directly about Tech Days, then <a href="http://www.twitter.com/stewartbryson">reach out of me</a> and let me know how I can help. We look forward to seeing you in Atlanta in May.</p> Stewart Bryson http://redpillanalytics.com/?p=4761 Fri Mar 31 2017 00:39:44 GMT-0400 (EDT) Oracle Database 12c Release 2 New Feature – Application Containers http://gavinsoorma.com/2017/03/oracle-database-12c-release-2-new-feature-application-containers/ <p>One of the new multitenancy related features in Oracle 12c Release 2 is <strong>Application Containers</strong>.</p> <p>In 12c Release 1, we could have a Container database (CDB) host a number of optional pluggable databases or PDBs. Now in 12.2.0.1, the multitenancy feature has been enhanced further and we can now have not only CDBs and PDBs but also have another component called an Application Container which in essence is a hybrid of a CDB and a PDB.</p> <p>So now in 12.2.0.1, a CDB can contain (optionally) user created Application Containers and then Application Containers can in turn host one or more PDBs.</p> <p>For example, an Application Container can contain a number of PDBs which contain individual sales data of different regions, but at the same time can share what are called common objects.</p> <p>Maybe each region&#8217;s PDB has data just for that region, but the table structure is the same regardless of the region. In that case the table definition (or metadata) is stored in the application container accessible to all the PDBs hosted by that application container. If any changes are required to be made for application tables, then that DDL change need only be made once in the central application container and that change will then be visible to all the PDBs hosted by that application container.</p> <p>Or there are some tables which are common to all the PDBs &#8211; some kind of master data maybe. And rather than have to store this common data in each individual PDB (as was the case in 12.1.0.2), we just store it once in a central location which is the application container and then that data is visible to all the hosted PDBs.</p> <p>In other words, <strong>an application container functions as an application specific CDB within a CDB</strong>.</p> <p>Think of a Software as a Service (SaaS) deployment model where we are hosting a number of customers and each customer has its own individual data which needs to be stored securely in a separate database but at the same time we need to share some metadata or data which is common to all the customers.</p> <p>Let&#8217;s have a look a simple example of 12c Release 2 Application Containers at work.</p> <p>The basic steps are:</p> <ul> <li>Create the Application Container</li> <li>Create the Pluggable Databases</li> <li>Install the Application</li> <li>After installing the application, synchronize the pluggable databases with the application container root so that any changes in terms of DDL or DML made by the application are now visible to all hosted pluggable databases</li> <li>Optionally upgrade or deinstall the application </li> </ul> <p>&nbsp;</p> <p><strong>Create</strong> the <strong>Application Container</strong><br /> &nbsp;</p> <pre>SQL&gt; CREATE PLUGGABLE DATABASE appcon1 AS APPLICATION CONTAINER ADMIN USER appadm IDENTIFIED BY oracle FILE_NAME_CONVERT=('/u03/app/oradata/cdb1/pdbseed/','/u03/app/oradata/cdb1/appcon1/');  Pluggable database created. </pre> <p>&nbsp;<br /> <strong>Create the Pluggable Databases</strong> which are to be hosted by the Application Container by connecting to the application container root<br /> &nbsp;</p> <pre> SQL&gt; alter session set container=appcon1; &nbsp; Session altered. &nbsp; SQL&gt; alter pluggable database open; &nbsp; Pluggable database altered. &nbsp; SQL&gt; CREATE PLUGGABLE DATABASE pdbhr1 ADMIN USER pdbhr1_adm IDENTIFIED BY oracle FILE_NAME_CONVERT=('/u03/app/oradata/cdb1/pdbseed/','/u03/app/oradata/cdb1/appcon1/pdbhr1/'); &nbsp; Pluggable database created. &nbsp; SQL&gt; SQL&gt; CREATE PLUGGABLE DATABASE pdbhr2 ADMIN USER pdbhr2_adm IDENTIFIED BY oracle FILE_NAME_CONVERT=('/u03/app/oradata/cdb1/pdbseed/','/u03/app/oradata/cdb1/appcon1/pdbhr2/'); &nbsp; Pluggable database created. &nbsp; SQL&gt; SQL&gt; alter pluggable database all open; &nbsp; Pluggable database altered. </pre> <p>&nbsp;</p> <p><strong>Install </strong>the application<br /> &nbsp;<br /> In the first example we will be seeing how some common data is being shared among all the pluggable databases. Note the keyword <strong>SHARING=DATA</strong>.<br /> &nbsp;</p> <pre> SQL&gt; alter pluggable database application region_app begin install '1.0'; &nbsp; Pluggable database altered. &nbsp; SQL&gt; create user app_owner identified by oracle; &nbsp; User created. &nbsp; SQL&gt; grant connect,resource,unlimited tablespace to app_Owner; &nbsp; Grant succeeded. &nbsp; SQL&gt; create table app_owner.regions 2  sharing=data 3  (region_id number, region_name varchar2(20)); &nbsp; Table created. &nbsp; SQL&gt; insert into app_owner.regions 2  values (1,'North'); &nbsp; 1 row created. &nbsp; SQL&gt; insert into app_owner.regions 2  values (2,'South'); &nbsp; 1 row created. &nbsp; SQL&gt; commit; &nbsp; Commit complete. &nbsp; SQL&gt; alter pluggable database application region_app end install '1.0'; &nbsp; Pluggable database altered. </pre> <p>&nbsp;</p> <p><strong>View </strong>information about Application Containers via the <strong>DBA_APPLICATIONS</strong> view</p> <p>&nbsp;</p> <pre>SQL&gt; select app_name,app_status from dba_applications; APP_NAME -------------------------------------------------------------------------------- APP_STATUS ------------ APP$4BDAAF8836A20F9CE053650AA8C0AF21 NORMAL REGION_APP NORMAL </pre> <p><strong>Synchronize</strong> the pluggable databases with the application root<br /> &nbsp;<br /> Note that until this is done, changes made by the application install are not visible to the hosted PDBs.<br /> &nbsp;</p> <pre> SQL> alter session set container=pdbhr1; Session altered. SQL> select * from app_owner.regions; select * from app_owner.regions * ERROR at line 1: ORA-00942: table or view does not exist SQL> alter pluggable database application region_app sync; Pluggable database altered. SQL> select * from app_owner.regions; REGION_ID REGION_NAME ---------- -------------------- 1 North 2 South SQL> alter session set container=pdbhr2; Session altered. SQL> alter pluggable database application region_app sync; Pluggable database altered. SQL> select * from app_owner.regions; REGION_ID REGION_NAME ---------- -------------------- 1 North 2 South </pre> <p>&nbsp;</p> <p>Note that any direct DDL or DML is not permitted in this case<br /> &nbsp;</p> <pre> SQL> drop table app_owner.regions; drop table app_owner.regions * ERROR at line 1: ORA-65274: operation not allowed from outside an application action SQL> insert into app_owner.regions values (3,'East'); insert into app_owner.regions values (3,'East') * ERROR at line 1: ORA-65097: DML into a data link table is outside an application action </pre> <p>Let us now <strong>upgrade the application</strong> we just created and create the same application table, but this time with the keyword <strong>SHARING=METADATA</strong><br /> &nbsp;</p> <pre> SQL> alter pluggable database application region_app begin upgrade '1.0' to '1.1'; Pluggable database altered. SQL> select app_name,app_status from dba_applications; APP_NAME -------------------------------------------------------------------------------- APP_STATUS ------------ APP$4BDAAF8836A20F9CE053650AA8C0AF21 NORMAL REGION_APP UPGRADING SQL> drop table app_owner.regions; Table dropped. SQL> create table app_owner.regions 2 sharing=metadata 3 (region_id number,region_name varchar2(20)); Table created. SQL> alter pluggable database application region_app end upgrade; Pluggable database altered. </pre> <p>&nbsp;<br /> We can now see that the table definition is the same in both the PDBs, but each PDB can now insert its own individual data in the table.<br /> &nbsp;</p> <pre> SQL> alter session set container=pdbhr1; Session altered. SQL> alter pluggable database application region_app sync; Pluggable database altered. SQL> desc app_owner.regions Name Null? Type ----------------------------------------- -------- ---------------------------- REGION_ID NUMBER REGION_NAME VARCHAR2(20) SQL> insert into app_owner.regions 2 values (1,'North'); 1 row created. SQL> insert into app_owner.regions 2 values (2,'North-East'); 1 row created. SQL> commit; Commit complete. SQL> select * from app_owner.regions; REGION_ID REGION_NAME ---------- -------------------- 1 North 2 North-East SQL> alter session set container=pdbhr2; Session altered. SQL> alter pluggable database application region_app sync; Pluggable database altered. SQL> desc app_owner.regions Name Null? Type ----------------------------------------- -------- ---------------------------- REGION_ID NUMBER REGION_NAME VARCHAR2(20) SQL> select * from app_owner.regions; no rows selected SQL> insert into app_owner.regions 2 values (1,'South'); 1 row created. SQL> insert into app_owner.regions 2 values (2,'South-East'); 1 row created. SQL> commit; Commit complete. SQL> select * from app_owner.regions; REGION_ID REGION_NAME ---------- -------------------- 1 South 2 South-East </pre> <p>&nbsp;<br /> While DML activity was permitted in this case, still any DDL activity is not permitted.<br /> &nbsp;</p> <pre> SQL> drop table app_owner.regions; drop table app_owner.regions * ERROR at line 1: ORA-65274: operation not allowed from outside an application action SQL> alter table app_owner.regions 2 add (region_location varchar2(10)); alter table app_owner.regions * ERROR at line 1: ORA-65274: operation not allowed from outside an application action </pre> <p>&nbsp;<br /> We will now perform another upgrade to the application and this time note the keyword <strong>SHARING=EXTENDED DATA</strong>. In this case while some portion of the data is common and shared among all the PDBs, the individual PDBs can still have the flexibility to have additional data specific to that PDB stored in the table along with the common data which is the same for all the PDBs.<br /> &nbsp;</p> <pre> SQL> alter session set container=appcon1; Session altered. SQL> alter pluggable database application region_app begin upgrade '1.1' to '1.2'; Pluggable database altered. SQL> drop table app_owner.regions; Table dropped. SQL> create table app_owner.regions 2 sharing=extended data 3 (region_id number,region_name varchar2(20)); Table created. SQL> insert into app_owner.regions 2 values (1,'North'); 1 row created. SQL> commit; Commit complete. SQL> alter pluggable database application region_app end upgrade; Pluggable database altered. </pre> <p>&nbsp;<br /> Note that the PDBs share some common data, but individual PDB can insert its own data.<br /> &nbsp;</p> <pre> SQL> alter session set container=pdbhr1; Session altered. SQL> alter pluggable database application region_app sync; Pluggable database altered. SQL> select * from app_owner.regions; REGION_ID REGION_NAME ---------- -------------------- 1 North SQL> insert into app_owner.regions 2 values 3 (2,'North-West'); 1 row created. SQL> commit; Commit complete. SQL> select * from app_owner.regions; REGION_ID REGION_NAME ---------- -------------------- 1 North 2 North-West SQL> alter session set container=pdbhr2; Session altered. SQL> select * from app_owner.regions; REGION_ID REGION_NAME ---------- -------------------- 1 South 2 South-East SQL> alter pluggable database application region_app sync; Pluggable database altered. SQL> select * from app_owner.regions; REGION_ID REGION_NAME ---------- -------------------- 1 North </pre> Gavin Soorma http://gavinsoorma.com/?p=7489 Wed Mar 29 2017 23:23:22 GMT-0400 (EDT) OUG Ireland 2017 Presentation http://www.oralytics.com/2017/03/oug-ireland-2017-presentation.html Here are the slides from my presentation at OUG Ireland 2017. All about running R using SQL. <iframe src="//www.slideshare.net/slideshow/embed_code/key/if3lYyJZEXrzEE" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/BrendanTierney/embedded-r-execution-using-sql" title="Embedded R Execution using SQL" target="_blank">Embedded R Execution using SQL</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/BrendanTierney">Brendan Tierney</a></strong> </div> Brendan Tierney tag:blogger.com,1999:blog-4669933501315263808.post-2092800735146639166 Wed Mar 29 2017 12:36:00 GMT-0400 (EDT) Real World OBIEE: Demystification of Variables Pt. 3 http://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-3/ <img src="http://www.rittmanmead.com/blog/content/images/2017/03/OBIEE-12c.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"><p>In <a href="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-2/">part two</a> of this blog series, I went over using Repository, System and Presentation Variables to make reports dynamic for any series of time. In part three, I am going to talk about making reports dynamic for periods of time using built in functions within Answers itself. </p> <p><strong>Real World</strong></p> <p>While it's a lot more efficient to create Repository Variables to use in filters and prompts for time dimensions, sometimes it is simply not possible. Perhaps you are a front end developer for OBIEE and have no access to the RPD or the database . Perhaps you have no communication with the person in your organization who handles all of the RPD development and therefore can not submit any change requests.</p> <p>Don't worry. We've got you covered.</p> <p>There are several functions and tricks you can use within Answers itself to make reports dynamic and eliminate having to hardcode dates. </p> <p><strong>The Scenario</strong></p> <p>I am going to use the same scenario I used for <a href="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-2/">part two</a> of this series for the example one. To recap, here are the requirements:</p> <p>I have been asked to create a report that is going to reside on a products dashboard. It needs to have the same product grouping as the report I used in <a href="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-1/">part one</a> of this series, needs to contain 'Gross Rev $', 'Net Rev $' and '# of Orders' and have a prompt that can select between the first and current day of the month and every day in-between. The person who requested the report wants the prompt to change dynamically with each month and does not want users to be able to select future dates.</p> <p>In <a href="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-2/">part two</a>, I used a custom SQL statment which used Repository Variables I created to populate all the date values from the first of every month to the current date for Variable Prompts. There is a gap in the data loads for # of Orders in which data does not update until the 2nd or 3rd of each new month. The person who requested the report wanted a summary of the previous months '# of Orders' to be shown until the data is updated for the current month. I used a Repository Variable that returned the value of the previous month with the current year and used a CASE statement with along with Filter Expressions to switch between the Filter Expression using the Repository Variable (<em>Prev_Month</em>) if the date was &lt;=2 or if # of Orders is null and the Filter Expression which contained the <em>Start Date</em> and <em>End_Date</em> Presentation Variable placeholders which were defined in my Variable Prompts.</p> <p><strong>Example One</strong></p> <p>In this example, I have to figure out a way to make the report dynamic with only the functions available within Answers. There are two parts to this example. First I need to use a function that will return the previous month's value for the Calendar Year Month column to use with the '# of Orders' column. This will replace the Repository Variable <em>Prev_Month</em> I used in <a href="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-2/">part two</a> of this series. Second I need to write a new SQL statment for the <em>Start Date</em> and <em>End_Date</em> prompts I created in <a href="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-2/">part two</a> and also define a new SQL statment for the default values in those prompts.</p> <p><strong>Part 1</strong></p> <p>I am going to start by creating a new statement to return the previous month's value for the Calendar Year Month column. I can use the <em>TIMESTAMPADD</em> function in conjunction with the extraction syntax 'YEAR' and 'MONTH' to return the desired results. Let's take a look at the entire statment and then I will break it down. </p> <pre><code>CAST(YEAR(timestampadd(SQL_TSI_YEAR, -1,CURRENT_DATE))*100+MONTH(timestampadd(SQL_TSI_MONTH, -1,CURRENT_DATE)) AS VARCHAR(6))</code></pre> <p><strong>1</strong>. <em>TIMESTAMPADD</em> - This is what defines that I am going to use addition to return a date by adding or one date to another.</p> <p><strong>2</strong>. <em>SQL_TSI_YEAR</em> and <em>SQL_TSI_MONTH</em> - The first argument in the function. It defines what interval of time the function will work with.</p> <p><strong>3</strong>. -1. This the interval of time that is compared to the third argument. </p> <p><strong>4</strong>. <em>CURRENT_DATE</em> - The third argument in the function. This is what the second argument is compared against.</p> <p><strong>5</strong>. <em>YEAR</em> and <em>MONTH</em> - This is the extraction syntax that will return only the year and the month respectively.</p> <p>Also notice that I have used <em>VARCHAR(6)</em> for the <em>CAST</em> argument. If I use <em>VARCHAR</em>, I can specify the exact number of characters I want returned. </p> <p>Now I need to copy my column formula and paste it into the column formula that I created for '# of Orders' in <a href="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-2/">part two</a> of this series.</p> <p>I am going to replace the <em>Prev_Month</em> Repository Variable with my statement, which will look like this.</p> <pre><code>CASE WHEN DAY(CURRENT_DATE)<=2 or="" "sales="" -="" fact="" sales"."measures"."#="" of="" orders"="" is="" null="" then="" filter("sales="" using="" ("sales="" sales"."periods"."calendar="" year="" month"="CAST(YEAR(timestampadd(SQL_TSI_MONTH," -1,current_date))*100+month(timestampadd(sql_tsi_month,="" -1,current_date))="" as="" varchar(6))))="" else="" ("periods"."day="" date"="" between="" @{pv_start_dt}{date="" '2015-10-01'}="" and="" @{pv_end_dt}{date="" '2015-10-15'}))="" end<="" code=""></=2></code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-29-at-9.16.06-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>If I run the report, my results return as expected.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-01-at-3.13.57-PM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p><strong>Part 2</strong></p> <p>Now I need to write a new SQL statement for my <em>Start Date</em> and <em>End Date</em> prompts. In order to do this, I am going to need to use two functions: TIMESTAMPS and CURRENT_DATE. First, lets take a look at the TIMESTAMP function. </p> <p>I am going to use the TIMESTAMP function to filter the <em>Day Date</em> column for the first day of the month. To demonstrate, I am going to create a new analysis and use the TIMESTAMP function in a column formula. My column formula looks like the following:</p> <pre><code>TIMESTAMPADD(SQL_TSI_DAY, -DAYOFMONTH(CURRENT_DATE) +1, CURRENT_DATE)</code></pre> <p>This formula can be broken down into four parts:</p> <p><strong>1</strong>. <em>TIMESTAMPADD</em> - This is what defines that I am going to use addition to return a date by adding or one date to another.</p> <p><strong>2</strong>. <em>SQL_TSI_DAY</em> - The first argument in the function. It defines what interval of time the function will work with (in this case days)</p> <p><strong>3</strong>. <em>-DAYOFMONTH(CURRENT_DATE)+1</em> - This the interval of time that is compared to the third argument. In this case I am taking the negative value of the day of the month, adding 1 and then adding it with current date which always returns 1 or the first day of the month. </p> <p><strong>4</strong>. <em>CURRENT_DATE</em> - The third argument in the function. This is what the second argument is compared against. </p> <p>This is only scratching the surface of what you can do with the <em>TIMESTAMP</em> function. If you would like more information, check out the blog on <a href="https://www.rittmanmead.com/blog/2014/12/timestamps-and-presentation-variables/">TIMESTAMPS</a> written by Brian Hall.</p> <p>I am going to add an additional column to the Criteria and use the <em>CURRENT_DATE</em> function in a column formula.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-01-at-3.30.39-PM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-8.36.13-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>Now I am going to click on Results to show the results of the <em>TIMESTAMP</em> function and the <em>CURRRENT_DATE</em> function.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-01-at-3.30.53-PM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>From the results you can see that I have both the first day of the month and the current date. Now I need to convert this into a filter for the <em>Day Date</em> column so that I can get the logical SQL query for my <em>Start Date</em> and <em>End Date</em> prompts.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-8.54.16-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>In the New Filter window, I need to change the operator to <em>is between</em> and click on <em>Add More Options</em> to add a <em>SQL Expression</em>.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-8.54.47-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>In the <em>SQL Expression</em> box, I need to put the <em>TIMESTAMP</em> function for current date from the previous example. In addition I need to add another <em>SQL Expression</em> for the <em>CURRENT_DATE</em> function.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-8.55.27-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-8.56.10-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>When I return to my Criteria, I can see the filter I created in the Filter window.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-9.17.24-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>I can click on Results to run the report. The results for the <em>Day Date</em> column return as expected.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-8.58.22-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>Now I can click on the Advanced tab and copy the logical SQL statement to use for my <em>Start Date</em> and <em>End Date</em> prompts.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-9.23.34-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>Now I am going to paste the following into my <em>Start Date</em> Variable Prompt</p> <p><strong>Choice List Values > SQL Results</strong></p> <pre><code>SELECT "Sales - Fact Sales"."Periods"."Day Date" FROM "Sales - Fact Sales" WHERE ("Periods"."Day Date" BETWEEN TIMESTAMPADD(SQL_TSI_DAY, -DAYOFMONTH(CURRENT_DATE), CURRENT_DATE) AND CURRENT_DATE) ORDER BY "Periods"."Day Date"</code></pre> <p><strong>Default Selection > SQL Results</strong></p> <pre><code>SELECT TIMESTAMPADD(SQL_TSI_DAY, -DAYOFMONTH(CURRENT_DATE) +1, CURRENT_DATE) FROM "Sales - Fact Sales" FETCH FIRST 65001 ROWS ONLY</code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-9.50.24-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>For the default selection, I am using a SQL statment that is selecting the first day of the month using the same <em>TIMESTAMP</em> function used in the above query from my subject area "Sales - Fact Sales".</p> <p>Now I need to change the SQL query for both the Choice List Values and Default Selection for my <em>End Date</em> Variable Prompt.</p> <p>I am going to use the same SQL query for the Choice List Values in my <em>End Date</em> prompt as I did in my <em>Start Date</em> prompt. I am going to change the default selection to the following:</p> <pre><code>SELECT CURRENT_DATE FROM "Sales - Fact Sales" FETCH FIRST 65001 ROWS ONLY</code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-10.03.56-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>If I go to the <em>Display</em> window, I can view the results of my changes.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-10.06.11-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-10.06.27-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p>Notice that the results are exactly the same as the results in <a href="http://">part two</a> of this series.</p> <p>I can save the dashboard prompt and go to my dashboard and test the prompt.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-10.07.38-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-10.12.30-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-02-at-10.16.35-AM.png" alt="Real World OBIEE: Demystification of Variables Pt. 3"></p> <p><strong>In Conclusion</strong></p> <p>In <a href="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-1/">part one</a> of this series, we looked at using Bins, CASE statements to create custom grouping for values and switch between those groups and values using Presentation Variables.</p> <p>In <a href="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-2/">part two</a> of this series, we looked at creating Repository Variables to make reports dynamic using those Repository Variables in Variable Prompts and passing them into column formulas using Presentation Variables.</p> <p>In the third and final part of this series, we looked at making reports dynamic by using built in functions within Answers such as <em>TIMESTAMPS</em> and <em>CURRENT_DATE</em>.</p> <p>My hope is that you can take these examples and apply them in your own OBIEE development. If you would like to know more about front end or RPD development, please check out the <a href="https://www.rittmanmead.com/training/">variety of training courses</a> we offer at Rittman Mead. Until next time.</p> Matthew Walding b02e3da2-70b9-43e3-a249-01f634fdeebf Tue Mar 28 2017 09:00:00 GMT-0400 (EDT) EssCS Command Line Interface Notes https://realtrigeek.com/2017/03/27/esscs-command-line-interface-notes/ <p>This was not supposed to be a two blog post day, but here I am living the dream…</p> <p>I wanted to show how you can use EssCS Command Line Interface (CLI) to kick off various tasks in EssCS. And I will… But I found an interesting bug that I want to show you, as well, so if you are Googling on this error, you can see how to work around it (details later…sorry for the vagueness).</p> <p>The EssCS CLI is a tool to do various tasks outside of the EssCS GUI. You can kickoff calc scripts, build dimensions, upload/download items, and do LCM imports/exports among other things. It’s kind of like MaxL for the cloud. I ran a few scripts and copied them to Notepad++ to show you what the commands look like and how the job status is returned. I’ve highlighted various commands in red boxes (I will get to the errors in just a minute…).</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0012.png"><img data-attachment-id="1689" data-permalink="https://realtrigeek.com/2017/03/27/esscs-command-line-interface-notes/image0012-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0012.png" data-orig-size="1916,923" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0012" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0012.png?w=300&#038;h=145" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0012.png?w=840" class="alignnone size-medium wp-image-1689" src="https://epmqueen.files.wordpress.com/2017/03/image0012.png?w=300&#038;h=145" alt="" width="300" height="145" srcset="https://epmqueen.files.wordpress.com/2017/03/image0012.png?w=300&amp;h=145 300w, https://epmqueen.files.wordpress.com/2017/03/image0012.png?w=600&amp;h=290 600w, https://epmqueen.files.wordpress.com/2017/03/image0012.png?w=150&amp;h=72 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>It’s a straightforward tool to use and doesn’t take as much understanding (or, at times, patience) as MaxL. The examples I showed were:</p> <p>· Logging into EssCS CLI</p> <p>· Executing a calculation</p> <p>· Downloading a file (ie: a calc script, in my example)</p> <p>· Listing all the files from my user</p> <p>· Listing the version of EssCS I’m using</p> <p>Something you may have noticed was each time I tried to execute a calculation, I would get an error “Error happened while executing Calculation job. Please make sure all artifacts exist and valid”. I logged into EssCS to see the Job console to see if I could get details on why the calc execution failed. However, I see that my calcs executed successfully. Hmm…</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image003.jpg"><img data-attachment-id="1691" data-permalink="https://realtrigeek.com/2017/03/27/esscs-command-line-interface-notes/image003-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image003.jpg" data-orig-size="833,252" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image003" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image003.jpg?w=300&#038;h=91" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image003.jpg?w=833" class="alignnone size-medium wp-image-1691" src="https://epmqueen.files.wordpress.com/2017/03/image003.jpg?w=300&#038;h=91" alt="" width="300" height="91" srcset="https://epmqueen.files.wordpress.com/2017/03/image003.jpg?w=300&amp;h=91 300w, https://epmqueen.files.wordpress.com/2017/03/image003.jpg?w=600&amp;h=182 600w, https://epmqueen.files.wordpress.com/2017/03/image003.jpg?w=150&amp;h=45 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I decided to check the application logs to see if there was something in them to give me an answer… They also showed success.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image005.jpg"><img data-attachment-id="1692" data-permalink="https://realtrigeek.com/2017/03/27/esscs-command-line-interface-notes/image005-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image005.jpg" data-orig-size="624,430" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image005" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image005.jpg?w=300&#038;h=207" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image005.jpg?w=624" class="alignnone size-medium wp-image-1692" src="https://epmqueen.files.wordpress.com/2017/03/image005.jpg?w=300&#038;h=207" alt="" width="300" height="207" srcset="https://epmqueen.files.wordpress.com/2017/03/image005.jpg?w=300&amp;h=207 300w, https://epmqueen.files.wordpress.com/2017/03/image005.jpg?w=600&amp;h=414 600w, https://epmqueen.files.wordpress.com/2017/03/image005.jpg?w=150&amp;h=103 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Well, this is odd. I’m happy my scripts ran successfully, however, the CLI was not reporting back correctly. CLI gives an option of adding a “-v” to each command which tells the system to return “verbose output” for the command. I decided to use this for one of my calc scripts and got the following:</p> <p>C:cli&gt;esscs calc -v -application USG_WF -db Emp_Dets -script Calc2018.CSC</p> <p>Picked up _JAVA_OPTIONS: -Xmx512M</p> <p><strong>POST: {&#8220;application&#8221;:&#8221;USG_WF&#8221;,&#8221;db&#8221;:&#8221;Emp_Dets&#8221;,&#8221;jobtype&#8221;:&#8221;calc&#8221;,&#8221;parameters&#8221;:{&#8220;script&#8221;:&#8221;Calc2018.CSC&#8221;}}</strong></p> <p><strong>RETURN: {&#8220;JOB_ID&#8221;:40,&#8221;appName&#8221;:&#8221;USG_WF&#8221;,&#8221;jobfileName&#8221;:&#8221;Calc2018&#8243;,&#8221;dbName&#8221;:&#8221;Emp_Dets&#8221;,&#8221;startTime&#8221;:&#8221;2017-03-27 18:08:01 UTC&#8221;,&#8221;endTime&#8221;:&#8221;2017-03-27 18:08:01 UTC&#8221;,&#8221;jobInputInfo&#8221;:&#8221;{&#8220;calcScriptHasRTSV&#8221;:false,&#8221;calcScriptExecDefault&#8221;:false,&#8221;calcScriptName&#8221;:&#8221;Calc2018&#8243;,&#8221;calcScriptIsScript&#8221;:false}&#8221;,&#8221;userName&#8221;:&#8221;cloud.user&#8221;,&#8221;jobtype&#8221;:&#8221;Calc Execution&#8221;,&#8221;statusMessage&#8221;:&#8221;In Progress&#8221;,&#8221;status&#8221;:100,&#8221;jobOutputInfo&#8221;:&#8221;&#8221;,&#8221;links&#8221;:[{&#8220;rel&#8221;:&#8221;self&#8221;,&#8221;href&#8221;:&#8221;<a href="http://localhost:9000/essbase/rest/v1/jobs&#038;#8221" rel="nofollow">http://localhost:9000/essbase/rest/v1/jobs&#038;#8221</a>;,&#8221;method&#8221;:&#8221;POST&#8221;},{&#8220;rel&#8221;:&#8221;canonical&#8221;,&#8221;href&#8221;:&#8221;<a href="http://localhost:9000/essbase/rest/v1/jobs&#038;#8221" rel="nofollow">http://localhost:9000/essbase/rest/v1/jobs&#038;#8221</a>;,&#8221;method&#8221;:&#8221;POST&#8221;},{&#8220;rel&#8221;:&#8221;Job Status&#8221;,&#8221;href&#8221;:&#8221;<a href="http://localhost:9000/essbase/rest/v1/jobs/40&#038;#8243" rel="nofollow">http://localhost:9000/essbase/rest/v1/jobs/40&#038;#8243</a>;,&#8221;method&#8221;:&#8221;GET&#8221;}]}</strong></p> <p>Error happened while executing Calculation job. Please make sure all artifacts exist and valid.</p> <p>Okay…I’ve been playing around (and presented a couple times) with REST and recognize that’s what is occurring in the background. I decide to go to the first URL and see the jobs:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0081.png"><img data-attachment-id="1690" data-permalink="https://realtrigeek.com/2017/03/27/esscs-command-line-interface-notes/image0081-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0081.png" data-orig-size="417,218" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0081" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0081.png?w=300&#038;h=157" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0081.png?w=417" class="alignnone size-medium wp-image-1690" src="https://epmqueen.files.wordpress.com/2017/03/image0081.png?w=300&#038;h=157" alt="" width="300" height="157" srcset="https://epmqueen.files.wordpress.com/2017/03/image0081.png?w=300&amp;h=157 300w, https://epmqueen.files.wordpress.com/2017/03/image0081.png?w=150&amp;h=78 150w, https://epmqueen.files.wordpress.com/2017/03/image0081.png 417w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Nothing of real value. I then tried the second URL, the actual job number, and got the following. I have a handy JSON viewer plugin for my browser, so I got formatted JSON details:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0102.png"><img data-attachment-id="1693" data-permalink="https://realtrigeek.com/2017/03/27/esscs-command-line-interface-notes/image0102-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0102.png" data-orig-size="1055,621" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0102" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0102.png?w=300&#038;h=177" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0102.png?w=840" class="alignnone size-medium wp-image-1693" src="https://epmqueen.files.wordpress.com/2017/03/image0102.png?w=300&#038;h=177" alt="" width="300" height="177" srcset="https://epmqueen.files.wordpress.com/2017/03/image0102.png?w=300&amp;h=177 300w, https://epmqueen.files.wordpress.com/2017/03/image0102.png?w=600&amp;h=354 600w, https://epmqueen.files.wordpress.com/2017/03/image0102.png?w=150&amp;h=88 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I see all the details of my job. The status is 200, which in HTTP status code speak means “OK”. This is a total guess, but if you compare PBCS REST status codes, 0 means OK. Perhaps a translation misstep between 200 and 0 to signify success? I’m not really sure, but if you see this error using CLI, check in EssCS to see if it is really an error, or use the verbose command to get the REST URL for the job. It may just be this bug to look past for now!</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epmqueen.wordpress.com/1688/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/epmqueen.wordpress.com/1688/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=realtrigeek.com&#038;blog=70089387&#038;post=1688&#038;subd=epmqueen&#038;ref=&#038;feed=1" width="1" height="1" /> Sarah Craynon Zumbrum http://realtrigeek.com/?p=1688 Mon Mar 27 2017 15:23:54 GMT-0400 (EDT) EssCS – Essbase LCM Utility https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/ <p>About a week and a half ago I <a href="https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/">wrote</a> at a high level about 2 Essbase Cloud Service (EssCS) command line scripts, the Export Utility and Command Line Tool. Another utility in the mix that I didn’t talk about (due to environment constraints) was the Essbase LCM Utility. I finally got my environment set up to use the tool and played around with an export and import today.</p> <p>On the EssCS homepage, you will see a green icon named “Utilities”. I clicked on this to download the utility.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image019.jpg"><img data-attachment-id="1675" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image019-6/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image019.jpg" data-orig-size="624,253" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image019" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image019.jpg?w=300&#038;h=122" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image019.jpg?w=624" class="alignnone size-medium wp-image-1675" src="https://epmqueen.files.wordpress.com/2017/03/image019.jpg?w=300&#038;h=122" alt="" width="300" height="122" srcset="https://epmqueen.files.wordpress.com/2017/03/image019.jpg?w=300&amp;h=122 300w, https://epmqueen.files.wordpress.com/2017/03/image019.jpg?w=600&amp;h=244 600w, https://epmqueen.files.wordpress.com/2017/03/image019.jpg?w=150&amp;h=61 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>In the list, it will be the third item. I clicked the down arrow next to “Life Cycle Management”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image020.jpg"><img data-attachment-id="1676" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image020-7/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image020.jpg" data-orig-size="624,300" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image020" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image020.jpg?w=300&#038;h=144" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image020.jpg?w=624" class="alignnone size-medium wp-image-1676" src="https://epmqueen.files.wordpress.com/2017/03/image020.jpg?w=300&#038;h=144" alt="" width="300" height="144" srcset="https://epmqueen.files.wordpress.com/2017/03/image020.jpg?w=300&amp;h=144 300w, https://epmqueen.files.wordpress.com/2017/03/image020.jpg?w=600&amp;h=288 600w, https://epmqueen.files.wordpress.com/2017/03/image020.jpg?w=150&amp;h=72 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>After I downloaded and extracted the tool to my favorite utility location, I read the “README.txt”. Below I have highlight some items I thought were key:</p> <p>· The supported releases of Essbase are 11.1.2.4.0xx, 11.1.2.4.5xx , and 12c EssCS.</p> <p>· The command and variables to use when exporting a cube.</p> <p>· The command and variables to use when importing a cube.</p> <p>Note that there are also details about how to deal with scenarios (workflow and/or sandbox) and partitions. I’m not using these in my example cube, so I won’t be addressing them in this blog post.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image021.jpg"><img data-attachment-id="1677" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image021-7/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image021.jpg" data-orig-size="623,260" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image021" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image021.jpg?w=300&#038;h=125" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image021.jpg?w=623" class="alignnone size-medium wp-image-1677" src="https://epmqueen.files.wordpress.com/2017/03/image021.jpg?w=300&#038;h=125" alt="" width="300" height="125" srcset="https://epmqueen.files.wordpress.com/2017/03/image021.jpg?w=300&amp;h=125 300w, https://epmqueen.files.wordpress.com/2017/03/image021.jpg?w=600&amp;h=250 600w, https://epmqueen.files.wordpress.com/2017/03/image021.jpg?w=150&amp;h=63 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>The first thing I want to do is export my on-premises (OP) cube to a zip file. I have highlighted that syntax below in the window. Also, I have supplied it to copy and paste for your environment.</p> <p>EssbaseLCM export –server {servername}:1423 –user {username} –password {password} –application {appname} –zipFile {FileName}.zip</p> <p>If all goes successfully, you should get a line for each artifact in your application. You can also choose to not import data by adding “-nodata” at the end of the export command.</p> <p>Note: The parameters given in the command can be in any order, not just the one shown!</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image022.jpg"><img data-attachment-id="1678" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image022-5/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image022.jpg" data-orig-size="624,327" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image022" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image022.jpg?w=300&#038;h=157" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image022.jpg?w=624" class="alignnone size-medium wp-image-1678" src="https://epmqueen.files.wordpress.com/2017/03/image022.jpg?w=300&#038;h=157" alt="" width="300" height="157" srcset="https://epmqueen.files.wordpress.com/2017/03/image022.jpg?w=300&amp;h=157 300w, https://epmqueen.files.wordpress.com/2017/03/image022.jpg?w=600&amp;h=314 600w, https://epmqueen.files.wordpress.com/2017/03/image022.jpg?w=150&amp;h=79 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Because I’m curious, I opened the zip file to see how it was organized.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0091.png"><img data-attachment-id="1673" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image0091-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0091.png" data-orig-size="389,415" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0091" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0091.png?w=281&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0091.png?w=389" class="alignnone size-medium wp-image-1673" src="https://epmqueen.files.wordpress.com/2017/03/image0091.png?w=281&#038;h=300" alt="" width="281" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image0091.png?w=281&amp;h=300 281w, https://epmqueen.files.wordpress.com/2017/03/image0091.png?w=141&amp;h=150 141w, https://epmqueen.files.wordpress.com/2017/03/image0091.png 389w" sizes="(max-width: 281px) 100vw, 281px" /></a></p> <p>I can see there are folders for the various artifacts.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0101.png"><img data-attachment-id="1674" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image0101-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0101.png" data-orig-size="396,286" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0101" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0101.png?w=300&#038;h=217" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0101.png?w=396" class="alignnone size-medium wp-image-1674" src="https://epmqueen.files.wordpress.com/2017/03/image0101.png?w=300&#038;h=217" alt="" width="300" height="217" srcset="https://epmqueen.files.wordpress.com/2017/03/image0101.png?w=300&amp;h=217 300w, https://epmqueen.files.wordpress.com/2017/03/image0101.png?w=150&amp;h=108 150w, https://epmqueen.files.wordpress.com/2017/03/image0101.png 396w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Now to import the application… I tried the import command for a new cube first, but because I already have the cube in my environment, I was given an error and told to use “-overwrite” in my parameters. So, that’s what I did (shown with the yellow box). The command I used for the import was:</p> <p>EssbaseLCM –server {servername}:1423 –user {username} –password {password} –application {appname} –zipFile {filename}.zip -overwrite</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image023.jpg"><img data-attachment-id="1679" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image023-5/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image023.jpg" data-orig-size="624,424" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image023" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image023.jpg?w=300&#038;h=204" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image023.jpg?w=624" class="alignnone size-medium wp-image-1679" src="https://epmqueen.files.wordpress.com/2017/03/image023.jpg?w=300&#038;h=204" alt="" width="300" height="204" srcset="https://epmqueen.files.wordpress.com/2017/03/image023.jpg?w=300&amp;h=204 300w, https://epmqueen.files.wordpress.com/2017/03/image023.jpg?w=600&amp;h=408 600w, https://epmqueen.files.wordpress.com/2017/03/image023.jpg?w=150&amp;h=102 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>To double-check to make sure it worked, I logged into EssCS, chose my database name, and clicked “Settings”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image024.jpg"><img data-attachment-id="1680" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image024-5/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image024.jpg" data-orig-size="624,321" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image024" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image024.jpg?w=300&#038;h=154" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image024.jpg?w=624" class="alignnone size-medium wp-image-1680" src="https://epmqueen.files.wordpress.com/2017/03/image024.jpg?w=300&#038;h=154" alt="" width="300" height="154" srcset="https://epmqueen.files.wordpress.com/2017/03/image024.jpg?w=300&amp;h=154 300w, https://epmqueen.files.wordpress.com/2017/03/image024.jpg?w=600&amp;h=308 600w, https://epmqueen.files.wordpress.com/2017/03/image024.jpg?w=150&amp;h=77 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>In the Properties tab under Basic, I can see that the expected number of members were loaded as well as data. Perfect!</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image025.jpg"><img data-attachment-id="1681" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image025-6/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image025.jpg" data-orig-size="624,252" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image025" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image025.jpg?w=300&#038;h=121" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image025.jpg?w=624" class="alignnone size-medium wp-image-1681" src="https://epmqueen.files.wordpress.com/2017/03/image025.jpg?w=300&#038;h=121" alt="" width="300" height="121" srcset="https://epmqueen.files.wordpress.com/2017/03/image025.jpg?w=300&amp;h=121 300w, https://epmqueen.files.wordpress.com/2017/03/image025.jpg?w=600&amp;h=242 600w, https://epmqueen.files.wordpress.com/2017/03/image025.jpg?w=150&amp;h=61 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>The data is not aggregated, so I thought it would be a good chance to see if my calc scripts came in…Yep! From here I could execute the scripts if I desired.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image026.jpg"><img data-attachment-id="1682" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image026-6/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image026.jpg" data-orig-size="624,473" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image026" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image026.jpg?w=300&#038;h=227" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image026.jpg?w=624" class="alignnone size-medium wp-image-1682" src="https://epmqueen.files.wordpress.com/2017/03/image026.jpg?w=300&#038;h=227" alt="" width="300" height="227" srcset="https://epmqueen.files.wordpress.com/2017/03/image026.jpg?w=300&amp;h=227 300w, https://epmqueen.files.wordpress.com/2017/03/image026.jpg?w=600&amp;h=454 600w, https://epmqueen.files.wordpress.com/2017/03/image026.jpg?w=150&amp;h=114 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>And I’m done! That was easy enough…</p> <p>And to take a step further, this is <em>easily</em> something that could be run routinely via a batch (or shell) script. This would be great for backing up your environment, versioning, or simply moving cubes from one environment to another. …And if you were wondering if you can only download from OP, nope, cloud is an option as shown below:</p> <p>Command Line:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0272.png"><img data-attachment-id="1683" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image0272/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0272.png" data-orig-size="979,665" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0272" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0272.png?w=300&#038;h=204" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0272.png?w=840" class="alignnone size-medium wp-image-1683" src="https://epmqueen.files.wordpress.com/2017/03/image0272.png?w=300&#038;h=204" alt="" width="300" height="204" srcset="https://epmqueen.files.wordpress.com/2017/03/image0272.png?w=300&amp;h=204 300w, https://epmqueen.files.wordpress.com/2017/03/image0272.png?w=600&amp;h=408 600w, https://epmqueen.files.wordpress.com/2017/03/image0272.png?w=150&amp;h=102 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Folder:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0282.png"><img data-attachment-id="1684" data-permalink="https://realtrigeek.com/2017/03/27/esscs-essbase-lcm-utility/image0282/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0282.png" data-orig-size="364,423" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0282" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0282.png?w=258&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0282.png?w=364" class="alignnone size-medium wp-image-1684" src="https://epmqueen.files.wordpress.com/2017/03/image0282.png?w=258&#038;h=300" alt="" width="258" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image0282.png?w=258&amp;h=300 258w, https://epmqueen.files.wordpress.com/2017/03/image0282.png?w=129&amp;h=150 129w, https://epmqueen.files.wordpress.com/2017/03/image0282.png 364w" sizes="(max-width: 258px) 100vw, 258px" /></a></p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epmqueen.wordpress.com/1672/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/epmqueen.wordpress.com/1672/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=realtrigeek.com&#038;blog=70089387&#038;post=1672&#038;subd=epmqueen&#038;ref=&#038;feed=1" width="1" height="1" /> Sarah Craynon Zumbrum http://realtrigeek.com/?p=1672 Mon Mar 27 2017 13:22:04 GMT-0400 (EDT) Tips for Using Essbase in Data Visualization https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/ <p>Last Friday I wrote a <a href="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/">blog</a> on how to connect Essbase and Essbase Cloud Service (EssCS) to Data Visualization (DV). I’ve decided to put together a couple tips to help you start using Essbase/EssCS as a data source in DV.</p> <p>Let’s start…</p> <p>If you followed the steps and have Essbase or EssCS as a DV data source, you might find yourself annoyed that the hierarchy names came in as Generations. Here is one of my examples from last week:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0011.png"><img data-attachment-id="1640" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image0011-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0011.png" data-orig-size="381,530" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0011" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0011.png?w=216&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0011.png?w=381" class="alignnone size-medium wp-image-1640" src="https://epmqueen.files.wordpress.com/2017/03/image0011.png?w=216&#038;h=300" alt="" width="216" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image0011.png?w=216&amp;h=300 216w, https://epmqueen.files.wordpress.com/2017/03/image0011.png?w=108&amp;h=150 108w, https://epmqueen.files.wordpress.com/2017/03/image0011.png 381w" sizes="(max-width: 216px) 100vw, 216px" /></a></p> <p>If you administer a cube, you might know what each generation refers to in the dimension. For example, “Gen2, Location” might be country, “Gen3, Location” might be state, and “Gen4, Location” might be city. However, if you are the end user, you might get confused with these details.</p> <p>Doesn’t this look easier to navigate?</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image027.jpg"><img data-attachment-id="1660" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image027-5/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image027.jpg" data-orig-size="184,279" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image027" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image027.jpg?w=198&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image027.jpg?w=198&#038;h=300" class="alignnone size-medium wp-image-1660" src="https://epmqueen.files.wordpress.com/2017/03/image027.jpg?w=198&#038;h=300" alt="" srcset="https://epmqueen.files.wordpress.com/2017/03/image027.jpg 184w, https://epmqueen.files.wordpress.com/2017/03/image027.jpg?w=99&amp;h=150 99w" sizes="(max-width: 184px) 100vw, 184px" /></a></p> <p>So, how can you give the generations a clearer definition of the hierarchy granularity? It’s actually pretty simple! I’ll show you how to do this in EssCS then in Essbase, but it’s really the logic, just different steps.</p> <p><strong>EssCS</strong></p> <p>There are two ways we can define generations for EssCS. You can choose which one you like best.</p> <p>The first way is to log into EssCS, choose your cube, and click “Settings”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image003.png"><img data-attachment-id="1641" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image003-7/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image003.png" data-orig-size="1160,390" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image003" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image003.png?w=300&#038;h=101" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image003.png?w=840" class="alignnone size-medium wp-image-1641" src="https://epmqueen.files.wordpress.com/2017/03/image003.png?w=300&#038;h=101" alt="" width="300" height="101" srcset="https://epmqueen.files.wordpress.com/2017/03/image003.png?w=300&amp;h=101 300w, https://epmqueen.files.wordpress.com/2017/03/image003.png?w=600&amp;h=202 600w, https://epmqueen.files.wordpress.com/2017/03/image003.png?w=150&amp;h=50 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>In the “Dimensions” section, you will see the each dimension listed with details.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image004.png"><img data-attachment-id="1642" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image004-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image004.png" data-orig-size="1207,446" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image004" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image004.png?w=300&#038;h=111" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image004.png?w=840" class="alignnone size-medium wp-image-1642" src="https://epmqueen.files.wordpress.com/2017/03/image004.png?w=300&#038;h=111" alt="" width="300" height="111" srcset="https://epmqueen.files.wordpress.com/2017/03/image004.png?w=300&amp;h=111 300w, https://epmqueen.files.wordpress.com/2017/03/image004.png?w=600&amp;h=222 600w, https://epmqueen.files.wordpress.com/2017/03/image004.png?w=150&amp;h=55 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>For demo purposes, I’m going to update Years.</p> <p>Note that the generation names are “Gen1” and “Gen2”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image005.png"><img data-attachment-id="1643" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image005-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image005.png" data-orig-size="793,242" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image005" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image005.png?w=300&#038;h=92" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image005.png?w=793" class="alignnone size-medium wp-image-1643" src="https://epmqueen.files.wordpress.com/2017/03/image005.png?w=300&#038;h=92" alt="" width="300" height="92" srcset="https://epmqueen.files.wordpress.com/2017/03/image005.png?w=300&amp;h=92 300w, https://epmqueen.files.wordpress.com/2017/03/image005.png?w=600&amp;h=184 600w, https://epmqueen.files.wordpress.com/2017/03/image005.png?w=150&amp;h=46 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Let’s update “Gen1” to be “All Years” and “Gen2” to be “Year”. This is done by clicking on the Name (“Gen1” or “Gen2”) and entering the name you would like to enter.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image006.png"><img data-attachment-id="1644" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image006-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image006.png" data-orig-size="795,251" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image006" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image006.png?w=300&#038;h=95" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image006.png?w=795" class="alignnone size-medium wp-image-1644" src="https://epmqueen.files.wordpress.com/2017/03/image006.png?w=300&#038;h=95" alt="" width="300" height="95" srcset="https://epmqueen.files.wordpress.com/2017/03/image006.png?w=300&amp;h=95 300w, https://epmqueen.files.wordpress.com/2017/03/image006.png?w=600&amp;h=190 600w, https://epmqueen.files.wordpress.com/2017/03/image006.png?w=150&amp;h=47 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Once I have finished naming my generations, I click “Save”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image007.png"><img data-attachment-id="1645" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image007-6/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image007.png" data-orig-size="1905,288" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image007" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image007.png?w=300&#038;h=45" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image007.png?w=840" class="alignnone size-medium wp-image-1645" src="https://epmqueen.files.wordpress.com/2017/03/image007.png?w=300&#038;h=45" alt="" width="300" height="45" srcset="https://epmqueen.files.wordpress.com/2017/03/image007.png?w=300&amp;h=45 300w, https://epmqueen.files.wordpress.com/2017/03/image007.png?w=595&amp;h=90 595w, https://epmqueen.files.wordpress.com/2017/03/image007.png?w=150&amp;h=23 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Now, when I go into DV and connect to this cube, I have an updated data element name.</p> <p>Previous:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image028.jpg"><img data-attachment-id="1661" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image028-6/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image028.jpg" data-orig-size="177,254" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image028" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image028.jpg?w=209&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image028.jpg?w=209&#038;h=300" class="alignnone size-medium wp-image-1661" src="https://epmqueen.files.wordpress.com/2017/03/image028.jpg?w=209&#038;h=300" alt="" srcset="https://epmqueen.files.wordpress.com/2017/03/image028.jpg 177w, https://epmqueen.files.wordpress.com/2017/03/image028.jpg?w=105&amp;h=150 105w" sizes="(max-width: 177px) 100vw, 177px" /></a></p> <p>Current:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image029.jpg"><img data-attachment-id="1662" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image029-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image029.jpg" data-orig-size="183,251" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image029" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image029.jpg?w=219&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image029.jpg?w=219&#038;h=300" class="alignnone size-medium wp-image-1662" src="https://epmqueen.files.wordpress.com/2017/03/image029.jpg?w=219&#038;h=300" alt="" srcset="https://epmqueen.files.wordpress.com/2017/03/image029.jpg 183w, https://epmqueen.files.wordpress.com/2017/03/image029.jpg?w=109&amp;h=150 109w" sizes="(max-width: 183px) 100vw, 183px" /></a></p> <p>The second way to do this in EssCS is to use the Cube Designer workbook. On the “Cube.Generations” tab, enter the names of the generations for the dimensions you want updated.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image010.png"><img data-attachment-id="1646" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image010-7/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image010.png" data-orig-size="539,820" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image010" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image010.png?w=197&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image010.png?w=539" class="alignnone size-medium wp-image-1646" src="https://epmqueen.files.wordpress.com/2017/03/image010.png?w=197&#038;h=300" alt="" width="197" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image010.png?w=197&amp;h=300 197w, https://epmqueen.files.wordpress.com/2017/03/image010.png?w=394&amp;h=600 394w, https://epmqueen.files.wordpress.com/2017/03/image010.png?w=99&amp;h=150 99w" sizes="(max-width: 197px) 100vw, 197px" /></a></p> <p>From the Cube Designer ribbon, choose “Build Cube”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image011.png"><img data-attachment-id="1647" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image011-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image011.png" data-orig-size="643,117" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image011" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image011.png?w=300&#038;h=55" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image011.png?w=643" class="alignnone size-medium wp-image-1647" src="https://epmqueen.files.wordpress.com/2017/03/image011.png?w=300&#038;h=55" alt="" width="300" height="55" srcset="https://epmqueen.files.wordpress.com/2017/03/image011.png?w=300&amp;h=55 300w, https://epmqueen.files.wordpress.com/2017/03/image011.png?w=600&amp;h=110 600w, https://epmqueen.files.wordpress.com/2017/03/image011.png?w=150&amp;h=27 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Choose to “Update Cube – Retain All Data” and click “Run”. You will likely not want to load the data sheets, but you can if you would like to.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image012.png"><img data-attachment-id="1648" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image012-7/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image012.png" data-orig-size="336,309" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image012" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image012.png?w=300&#038;h=276" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image012.png?w=336" class="alignnone size-medium wp-image-1648" src="https://epmqueen.files.wordpress.com/2017/03/image012.png?w=300&#038;h=276" alt="" width="300" height="276" srcset="https://epmqueen.files.wordpress.com/2017/03/image012.png?w=300&amp;h=276 300w, https://epmqueen.files.wordpress.com/2017/03/image012.png?w=150&amp;h=138 150w, https://epmqueen.files.wordpress.com/2017/03/image012.png 336w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Confirm that you want to update the listed cube.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image013.png"><img data-attachment-id="1649" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image013-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image013.png" data-orig-size="237,188" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image013" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image013.png?w=300&#038;h=238" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image013.png?w=300&#038;h=238" class="alignnone size-medium wp-image-1649" src="https://epmqueen.files.wordpress.com/2017/03/image013.png?w=300&#038;h=238" alt="" srcset="https://epmqueen.files.wordpress.com/2017/03/image013.png 237w, https://epmqueen.files.wordpress.com/2017/03/image013.png?w=150&amp;h=119 150w" sizes="(max-width: 237px) 100vw, 237px" /></a></p> <p>Choose Yes to see the job run.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image014.png"><img data-attachment-id="1650" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image014-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image014.png" data-orig-size="242,173" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image014" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image014.png?w=300&#038;h=214" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image014.png?w=300&#038;h=214" class="alignnone size-medium wp-image-1650" src="https://epmqueen.files.wordpress.com/2017/03/image014.png?w=300&#038;h=214" alt="" srcset="https://epmqueen.files.wordpress.com/2017/03/image014.png 242w, https://epmqueen.files.wordpress.com/2017/03/image014.png?w=150&amp;h=107 150w" sizes="(max-width: 242px) 100vw, 242px" /></a></p> <p>Once the job finishes, you should have generation names available in DV.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image030.jpg"><img data-attachment-id="1663" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image030-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image030.jpg" data-orig-size="227,474" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image030" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image030.jpg?w=144&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image030.jpg?w=227" class="alignnone size-medium wp-image-1663" src="https://epmqueen.files.wordpress.com/2017/03/image030.jpg?w=144&#038;h=300" alt="" width="144" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image030.jpg?w=144&amp;h=300 144w, https://epmqueen.files.wordpress.com/2017/03/image030.jpg?w=72&amp;h=150 72w, https://epmqueen.files.wordpress.com/2017/03/image030.jpg 227w" sizes="(max-width: 144px) 100vw, 144px" /></a></p> <p><strong>Essbase</strong></p> <p>If want to name the generations in Essbase, choose “Generations” from the right-click menu of the dimension you want to update:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image016.png"><img data-attachment-id="1651" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image016-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image016.png" data-orig-size="327,560" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image016" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image016.png?w=175&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image016.png?w=327" class="alignnone size-medium wp-image-1651" src="https://epmqueen.files.wordpress.com/2017/03/image016.png?w=175&#038;h=300" alt="" width="175" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image016.png?w=175&amp;h=300 175w, https://epmqueen.files.wordpress.com/2017/03/image016.png?w=88&amp;h=150 88w, https://epmqueen.files.wordpress.com/2017/03/image016.png 327w" sizes="(max-width: 175px) 100vw, 175px" /></a></p> <p>Enter the names of the generations for that dimension and click “OK”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image031.jpg"><img data-attachment-id="1664" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image031-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image031.jpg" data-orig-size="924,425" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image031" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image031.jpg?w=300&#038;h=138" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image031.jpg?w=840" class="alignnone size-medium wp-image-1664" src="https://epmqueen.files.wordpress.com/2017/03/image031.jpg?w=300&#038;h=138" alt="" width="300" height="138" srcset="https://epmqueen.files.wordpress.com/2017/03/image031.jpg?w=300&amp;h=138 300w, https://epmqueen.files.wordpress.com/2017/03/image031.jpg?w=600&amp;h=276 600w, https://epmqueen.files.wordpress.com/2017/03/image031.jpg?w=150&amp;h=69 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>When I go to DV, I see my generations updated for Department.</p> <p>Note: To prove I wasn’t pulling any trickery, this is to prove that my screenshot is from my OP Essbase cube, not my cloud Essbase cube. …The Years were not updated in the OP cube!</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image032.jpg"><img data-attachment-id="1665" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image032-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image032.jpg" data-orig-size="240,450" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image032" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image032.jpg?w=160&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image032.jpg?w=240" class="alignnone size-medium wp-image-1665" src="https://epmqueen.files.wordpress.com/2017/03/image032.jpg?w=160&#038;h=300" alt="" width="160" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image032.jpg?w=160&amp;h=300 160w, https://epmqueen.files.wordpress.com/2017/03/image032.jpg?w=80&amp;h=150 80w, https://epmqueen.files.wordpress.com/2017/03/image032.jpg 240w" sizes="(max-width: 160px) 100vw, 160px" /></a></p> <p>Now we can build more meaningful visualizations in DV!</p> <p><strong>Visualizations in DV</strong></p> <p>Unlike in Smart View or HFR, you are NOT required to specify a member from every dimension in DV. Using the below as an example, I built a Row Expander visualization that is very something that we would normally build in Smart View for comparison. To the right, I used a stacked bar graph using just a few data elements. I’ve modified the visualization to show the currency amounts for the whole of what the government paid towards employee’s Basic Benefit and Thrift Savings Plans (no, it’s not real data!).</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0191.png"><img data-attachment-id="1652" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image0191-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0191.png" data-orig-size="1920,1017" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0191" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0191.png?w=300&#038;h=159" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0191.png?w=840" class="alignnone size-medium wp-image-1652" src="https://epmqueen.files.wordpress.com/2017/03/image0191.png?w=300&#038;h=159" alt="" width="300" height="159" srcset="https://epmqueen.files.wordpress.com/2017/03/image0191.png?w=300&amp;h=159 300w, https://epmqueen.files.wordpress.com/2017/03/image0191.png?w=600&amp;h=318 600w, https://epmqueen.files.wordpress.com/2017/03/image0191.png?w=150&amp;h=79 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Imagine being able to drill into data visually and NOT in Excel, having to move around columns, dimensions, etc. How neat is that? Let’s drill into FY2017’s Basic Benefit Plan. I right-click on the portion of data I want to go deeper into for analysis.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0201.png"><img data-attachment-id="1653" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image0201-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0201.png" data-orig-size="714,489" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0201" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0201.png?w=300&#038;h=205" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0201.png?w=714" class="alignnone size-medium wp-image-1653" src="https://epmqueen.files.wordpress.com/2017/03/image0201.png?w=300&#038;h=205" alt="" width="300" height="205" srcset="https://epmqueen.files.wordpress.com/2017/03/image0201.png?w=300&amp;h=205 300w, https://epmqueen.files.wordpress.com/2017/03/image0201.png?w=600&amp;h=410 600w, https://epmqueen.files.wordpress.com/2017/03/image0201.png?w=150&amp;h=103 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I can choose from any dimension.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image021.png"><img data-attachment-id="1654" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image021-6/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image021.png" data-orig-size="411,398" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image021" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image021.png?w=300&#038;h=291" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image021.png?w=411" class="alignnone size-medium wp-image-1654" src="https://epmqueen.files.wordpress.com/2017/03/image021.png?w=300&#038;h=291" alt="" width="300" height="291" srcset="https://epmqueen.files.wordpress.com/2017/03/image021.png?w=300&amp;h=291 300w, https://epmqueen.files.wordpress.com/2017/03/image021.png?w=150&amp;h=145 150w, https://epmqueen.files.wordpress.com/2017/03/image021.png 411w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Let’s choose by Job Function.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image022.png"><img data-attachment-id="1655" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image022-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image022.png" data-orig-size="418,411" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image022" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image022.png?w=300&#038;h=295" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image022.png?w=418" class="alignnone size-medium wp-image-1655" src="https://epmqueen.files.wordpress.com/2017/03/image022.png?w=300&#038;h=295" alt="" width="300" height="295" srcset="https://epmqueen.files.wordpress.com/2017/03/image022.png?w=300&amp;h=295 300w, https://epmqueen.files.wordpress.com/2017/03/image022.png?w=150&amp;h=147 150w, https://epmqueen.files.wordpress.com/2017/03/image022.png 418w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Notice that <em>both</em> visualizations drill to the Job Function level.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0232.png"><img data-attachment-id="1656" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image0232/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0232.png" data-orig-size="1632,941" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0232" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0232.png?w=300&#038;h=173" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0232.png?w=840" class="alignnone size-medium wp-image-1656" src="https://epmqueen.files.wordpress.com/2017/03/image0232.png?w=300&#038;h=173" alt="" width="300" height="173" srcset="https://epmqueen.files.wordpress.com/2017/03/image0232.png?w=300&amp;h=173 300w, https://epmqueen.files.wordpress.com/2017/03/image0232.png?w=600&amp;h=346 600w, https://epmqueen.files.wordpress.com/2017/03/image0232.png?w=150&amp;h=86 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Let’s keep drilling into the one with the most contributions, GS0600, to the Group level.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0241.png"><img data-attachment-id="1657" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image0241-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0241.png" data-orig-size="1625,904" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0241" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0241.png?w=300&#038;h=167" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0241.png?w=840" class="alignnone size-medium wp-image-1657" src="https://epmqueen.files.wordpress.com/2017/03/image0241.png?w=300&#038;h=167" alt="" width="300" height="167" srcset="https://epmqueen.files.wordpress.com/2017/03/image0241.png?w=300&amp;h=167 300w, https://epmqueen.files.wordpress.com/2017/03/image0241.png?w=600&amp;h=334 600w, https://epmqueen.files.wordpress.com/2017/03/image0241.png?w=150&amp;h=83 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>And, finally, to the Employee level for GS0688.</p> <p>We now see all the employees that are contributing towards the GS0688 numbers. I’ve highlighted the filters in the screenshot to show it is very easy to get back to the starting point by deleting (or even altering) the filters.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0251.png"><img data-attachment-id="1658" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image0251/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0251.png" data-orig-size="1625,903" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0251" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0251.png?w=300&#038;h=167" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0251.png?w=840" class="alignnone size-medium wp-image-1658" src="https://epmqueen.files.wordpress.com/2017/03/image0251.png?w=300&#038;h=167" alt="" width="300" height="167" srcset="https://epmqueen.files.wordpress.com/2017/03/image0251.png?w=300&amp;h=167 300w, https://epmqueen.files.wordpress.com/2017/03/image0251.png?w=600&amp;h=334 600w, https://epmqueen.files.wordpress.com/2017/03/image0251.png?w=150&amp;h=83 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Since the Basic Benefit Plan values are 1% of the employee’s base pay if they have served at least 5 years for the government, I want to see the actual number of years, grade, and step of the employees.</p> <p>I’m going to alter the Row Expander visualization.</p> <p>The numbers make complete sense and I was able to see data next to a visualization that update with each other. Pretty cool, huh??</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0262.png"><img data-attachment-id="1659" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image0262/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0262.png" data-orig-size="1629,897" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0262" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0262.png?w=300&#038;h=165" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0262.png?w=840" class="alignnone size-medium wp-image-1659" src="https://epmqueen.files.wordpress.com/2017/03/image0262.png?w=300&#038;h=165" alt="" width="300" height="165" srcset="https://epmqueen.files.wordpress.com/2017/03/image0262.png?w=300&amp;h=165 300w, https://epmqueen.files.wordpress.com/2017/03/image0262.png?w=600&amp;h=330 600w, https://epmqueen.files.wordpress.com/2017/03/image0262.png?w=150&amp;h=83 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Now, at this point, I really wanted to show how you can mashup data in DV, specifically using the Essbase data source. I had this great example of a spreadsheet that listed each employee’s job title:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0331.png"><img data-attachment-id="1666" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image0331/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0331.png" data-orig-size="286,138" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0331" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0331.png?w=300&#038;h=145" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0331.png?w=300&#038;h=145" class="alignnone size-medium wp-image-1666" src="https://epmqueen.files.wordpress.com/2017/03/image0331.png?w=300&#038;h=145" alt="" srcset="https://epmqueen.files.wordpress.com/2017/03/image0331.png 286w, https://epmqueen.files.wordpress.com/2017/03/image0331.png?w=150&amp;h=72 150w" sizes="(max-width: 286px) 100vw, 286px" /></a></p> <p>And I was going to join them together in a visualization to show how they can be presented as one. However, as I was trying, I was having trouble with joining the sources. Since the Essbase connection is still in beta, there are a few caveats. One of them I found in the latest documentation:</p> <p><img data-attachment-id="1667" data-permalink="https://realtrigeek.com/2017/03/23/tips-for-using-essbase-in-data-visualization/image0341-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0341.png" data-orig-size="1006,27" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0341" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0341.png?w=300&#038;h=8" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0341.png?w=840" class="alignnone size-medium wp-image-1667" src="https://epmqueen.files.wordpress.com/2017/03/image0341.png?w=300&#038;h=8" alt="" width="300" height="8" srcset="https://epmqueen.files.wordpress.com/2017/03/image0341.png?w=300&amp;h=8 300w, https://epmqueen.files.wordpress.com/2017/03/image0341.png?w=600&amp;h=16 600w, https://epmqueen.files.wordpress.com/2017/03/image0341.png?w=150&amp;h=4 150w" sizes="(max-width: 300px) 100vw, 300px" /></p> <p>Well, darn. I guess this post will have to be updated when the bugs are worked out!</p> <p>As you can see, you can modify the settings in Essbase to make DV very simple to use for Essbase analysis. As I build out my demo more, I try to show more reasons why Essbase and DV are perfect compliments!</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epmqueen.wordpress.com/1639/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/epmqueen.wordpress.com/1639/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=realtrigeek.com&#038;blog=70089387&#038;post=1639&#038;subd=epmqueen&#038;ref=&#038;feed=1" width="1" height="1" /> Sarah Craynon Zumbrum http://realtrigeek.com/?p=1639 Thu Mar 23 2017 15:40:28 GMT-0400 (EDT) BIAPPS on PAAS – Backup and Restore - Introduction (Part1) https://blogs.oracle.com/biapps/entry/biapps_on_paas_backup_and <p align="justify" class="MsoNormal" style="text-align: justify;"><font face="verdana,arial,helvetica,sans-serif" size="2">BI Applications (BIApps) is an integrated application involving multiple components. A backup of BIApps therefore would mean a backup of the integrated application and not just the datawarehouse or the database. </font></p> <p> <font face="verdana,arial,helvetica,sans-serif" size="2"><span style="font-size: 11pt; line-height: 115%;">High level architecture of BIAPPS on PAAS is shown below:</span></font></p> <p><img src="https://blogs.oracle.com/biapps/resource/bop_backup1_biappsarchitecture.png" style="max-width: 99%;" /> </p> <p><font face="verdana,arial,helvetica,sans-serif" size="2"> </font> </p> <p align="justify" style="text-align: justify;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">There are four different cloud service instances involved at a minimum when using BIAPPS on PAAS. Following table shows the components/software that are installed on each:</font></p><font face="verdana,arial,helvetica,sans-serif" size="2"> </font> <table border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse; border: medium none;" class="MsoTableGrid"> <tbody> <tr> <td width="205" valign="top" style="width: 153.9pt; border: 1pt solid windowtext; padding: 0in 5.4pt;"> <p style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">DBCS (Database Cloud Service)</font></p> </td> <td width="433" valign="top" style="width: 324.9pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; border-image: none; padding: 0in 5.4pt;"> <p style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">Database that has the ODI repository, BIACM Repository, SDS schemas and the Datawarehouse Schema</font></p> </td> </tr> <tr> <td width="205" valign="top" style="width: 153.9pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; border-image: none; padding: 0in 5.4pt;"> <p style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">BICS (BI Cloud Service)</font></p> </td> <td width="433" valign="top" style="width: 324.9pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0in 5.4pt;"> <p style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">RPD, Webcat, Jazn file</font></p> </td> </tr> <tr> <td width="205" valign="top" style="width: 153.9pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; border-image: none; padding: 0in 5.4pt;"> <p style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">Compute Cloud</font></p> </td> <td width="433" valign="top" style="width: 324.9pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0in 5.4pt;"><font size="2"><font face="verdana,arial,helvetica,sans-serif">Weblogic Server<br />ODI Server<br />BIACM<br />BIAPPS Shiphome<br />Customer Data stored as files (E.g. Source Files, Universal Adaptor files)<br /><br />*Optionally the below if installed<br />Corente VPN ?<br />Vnc<br />Dev tools like sql developer/browser/ODI studio and their associated files</font></font><br /></td> </tr> <tr> <td width="205" valign="top" style="width: 153.9pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; -moz-border-top-colors: none; -moz-border-right-colors: none; -moz-border-bottom-colors: none; -moz-border-left-colors: none; border-image: none; padding: 0in 5.4pt;"> <p style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">Storage Service</font></p> </td> <td width="433" valign="top" style="width: 324.9pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; padding: 0in 5.4pt;"> <p style="margin-bottom: 0.0001pt; text-align: justify; line-height: normal;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">backups for Compute/DB<br /></font></p> </td> </tr> </tbody> </table><font face="verdana,arial,helvetica,sans-serif" size="2"> </font> <p style="text-align: justify;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2"> </font></p><font face="verdana,arial,helvetica,sans-serif" size="2"> </font> <p align="justify" style="text-align: justify;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">You will need to backup all of the above instances to be able to successfully restore the BI Applications. Each of the Cloud services provides its own backup mechanism.<span> </span>Relevant information for backing up each of these cloud services is available in the Oracle Cloud documentation and will be detailed in subsequent blogs in this backup series. Customer may also want to look at Oracle Database Backup Cloud Service that is a separate optional cloud service that is available to take Oracle Database backups. <br /></font></p> <div align="justify"><font face="verdana,arial,helvetica,sans-serif" size="2"> </font></div> <p align="justify" style="text-align: justify;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">However is it adequate if you just backed up each of the cloud instance independently? Following section details some of the considerations related to this question by drawing on few examples.</font></p> <div align="justify"><font face="verdana,arial,helvetica,sans-serif" size="2"> </font></div> <p align="justify" style="text-align: justify;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2"><b><u>Example 1:</u></b> Database has been backed up on weekend Saturday 11<sup>th</sup> March 11pm. Compute Cloud Instance was backed up earlier at 10 am the same day.<span> </span>Configuration that is done on weblogic (JDBC data sources, memory settings etc) is not stored in the database. So if any of the configuration was done between 10am 11<sup>th</sup> March and 11pm 11<sup>th</sup> March, that would be lost.<span> </span>And in that sense, the backup and restore does not truly reflect the state of the integrated BIAPPS environment as it would have been at 11pm 11<sup>th</sup> March.</font></p> <div align="justify"><font face="verdana,arial,helvetica,sans-serif" size="2"> </font></div> <p align="justify" style="text-align: justify;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2"><b><u>Example2</u></b>: BICS was backed up on 10 pm on Sunday 12<sup>th</sup> March.<span> </span>Now continuing from example1, we have the database backup from 11pm 11<sup>th</sup> Match and BICS backup from 10 pm on Sunday 12<sup>th</sup> March. If there were any changes that were done to the database (like adding a new table/column) that was followed by a change in the RPD, then there is a chance that when we restore the database and the BICS instance, we can have a failure since they are no longer in sync. </font></p> <div align="justify"><font face="verdana,arial,helvetica,sans-serif" size="2"> </font></div> <p align="justify" style="text-align: justify;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">As you can see from the above examples, backing up the cloud instances at different points in time can cause a potential problem. That said, there is a no single button that can be clicked to backup all the instances at exact same time. However with a right process in place, it is still easy enough to backup and restore the BIAPPS Application. Following are some of the <b><u>best practices/guidelines</u></b> that the customer can take to avoid the above issues:</font></p> <div align="justify"> <ol> <li><font face="verdana,arial,helvetica,sans-serif" size="2">The most volatile of the BIAPPS components is the database. That said, the database is primarily changed when the ETL is run. So it is probably a good idea to backup the database outside the ETL window and as frequent as is possible. Configuration changes done in BIACM will also reside in the database, but these are less likely to occur once the initial configuration is done. Similarly ODI repository changes also reside in the database but in a production instance this should not be done everyday but rather during limited controlled windows.</font></li> <li><font face="verdana,arial,helvetica,sans-serif" size="2">BICS RPD is tightly coupled with the database. So the customer could restrict the RPD changes to certain limited days in a month and ensure that there is proper database backup along with accompanying BICS backup outside the change period. In other words, have a quiet period for making RPD changes and ensure that the BICS and DB are backed up in that quiet period.&nbsp;</font></li> <li><font face="verdana,arial,helvetica,sans-serif" size="2">Most of the configuration required for Weblogic is done during the initial configuration. So after the full load, ensure there is a blackout period when you back up all the cloud instances. Subsequently similar to the BICS quiet periods, ensure that the changes to the weblogic and other domains on the Compute are done only during certain days and ensure that they are being backed up during the quiet periods.&nbsp;</font></li> <li><font face="verdana,arial,helvetica,sans-serif" size="2">Most of the cloud services have either an API or command line utility to backup that instance. You could consider using those to automate the backup of all those instances. Better still, you can have that script kicked off automatically at the end of the ETL load plan.&nbsp;</font></li> <li><font face="verdana,arial,helvetica,sans-serif" size="2">When restoring the system from a backup, consider the impact of any extract from Source Systems. Most of the Sources Systems have incremental extracts. If the last extracted date is stored in the database, then that date will also be restored as part of the database restore. However if the extract date is stored outside the BIAPPS Database (E.g. Fusion or any on Prem Sources which you are replicating via a Replication tool), then you will need to ensure that post the database restore, you reset the extract dates to match the data in the database and also clear any pending data in transit (Like in UCM).&nbsp;</font></li> <li><font face="verdana,arial,helvetica,sans-serif" size="2">A full reset of the SDS and the warehouse, followed by a full load will fix any issues with the SDS/warehouse. However Full loads are expensive and certain Source Systems have restrictions on how much data can be extracted in a day (E.g. Taleo). Further you can potentially lose any existing snapshot data if doing reset of the warehouse (and if the snapshot data is not available in the source).&nbsp;</font></li> <li><font face="verdana,arial,helvetica,sans-serif" size="2">When you restore a database, you will be restoring all the tables and all the schemas. It is not easy to restore a single table. Therefore it is best to keep activities that impact different schemas separate. E.g. If doing major configuration in BIACM, then do that when no ETL is running and take a adhoc backup before and after those changes. Similarly when promoting code to the ODI Production repository, do it outside the ETL window and at a time when no BIACM changes are happening and take a backup, before and after those changes. This will ensure that you can use the db backup to restore the database to the point in time before those changes are done without worrying about impact to other schemas. For the same reasons, if you are making a change to a single warehouse table, keep a backup of that table (and other dependent tables) in the warehouse schema along with the data, so that you can use those to restore the table rather than use the complete database backup. </font><br /></li> </ol> </div> <p align="justify"> </p> <p align="justify" class="MsoNormal" style="text-align: justify;"><font face="verdana,arial,helvetica,sans-serif" size="2">There are other components that are also involved in the BIAPPS on PAAS Solution and need to be included in the backup strategy. These include but not limited to:</font></p> <div align="justify"><font face="verdana,arial,helvetica,sans-serif" size="2"> </font><font face="verdana,arial,helvetica,sans-serif" size="2"> </font> <ol><font face="verdana,arial,helvetica,sans-serif" size="2"> </font> <li><font face="verdana,arial,helvetica,sans-serif" size="2">Source Systems: These are the systems from which BIAPPS gets the data from. The backup of those systems is also required when considering the entire application. However those are typically taken care by the Source System administrators and hence not listed here.&nbsp; </font></li> <li><font face="verdana,arial,helvetica,sans-serif" size="2">Replication Tools: If you are not using VPN to connect to the On Prem Source Systems, then it is likely, you have some kind of Replication mechanism to transfer the data from the On Premise Source System to the SDS. So your backup strategy ought to cover those as well.</font></li> <li><font face="verdana,arial,helvetica,sans-serif" size="2">Identity Domain/ Users &amp; Roles:&nbsp; These are usually maintained from the Service Admin Console (SAC). Refer to SAC documentation on how to back these up.</font></li> <li><font face="verdana,arial,helvetica,sans-serif" size="2">Any Network/Security Rules you setup between these various instances.</font><br /></li> </ol> </div> <p align="justify" style="text-align: justify;" class="MsoNormal"><font face="verdana,arial,helvetica,sans-serif" size="2">The customer ought to therefore understand the entire BIAPPS archictecture and then design the backup strategy accordingly. The customer will also likely have a Dev/Test/Prod environment, each of which is a complete BIAPPS application in itself. The customer will have to ensure that the backup strategy covers all those environments. Special care should also be taken if customer has a T2P process (Test to Production) and one of the environments requires to be restored. </font></p> <p><font face="verdana,arial,helvetica,sans-serif" size="2">The subsequent blogs in this series, will attempt to drill into the relevant backup functionality that is present for the individual components that make up the BIAPPS on PAAS solution. Below are few links that point to the backup documentation for the relevant cloud services:</font></p> <p><a href="http://docs.oracle.com/en/cloud/paas/database-dbaas-cloud/csdbi/backing.html#CSDBI-GUID-21980FCF-FA0C-4FD8-94DC-7C373CFB4C52"><font face="verdana,arial,helvetica,sans-serif" size="2"></font><font face="verdana,arial,helvetica,sans-serif" size="2">Backing up Deployments on Database Cloud Service</font></a></p> <p><a href="https://docs.oracle.com/cloud/latest/dbbackup_gs/CSDBB/GUID-8A5C40B4-859F-46C3-9431-55C56D588B58.htm#CSDBB-GUID-8A5C40B4-859F-46C3-9431-55C56D588B58"><font face="verdana,arial,helvetica,sans-serif" size="2">About Database Backup Cloud Service (Optional cloud service that can be used to backup Oracle databases)</font></a> <br /></p> <p><a href="http://docs.oracle.com/cloud/latest/stcomputecs/STCSG/GUID-0C04E7C5-0D24-4D16-9D83-92EC1E737622.htm#STCSG-GUID-0C04E7C5-0D24-4D16-9D83-92EC1E737622"><font face="verdana,arial,helvetica,sans-serif" size="2">Backing up and Restoring Storage Volumes - Compute</font></a></p> <p><font face="verdana,arial,helvetica,sans-serif" size="2"> <a href="https://docs.oracle.com/cloud/latest/reportingcs_use/BILPD/GUID-553DEE53-98D7-4002-A648-CC1CB95AB968.htm#BILUG482">Backing up and Restoring BICS</a></font><br /></p> <p><font face="verdana,arial,helvetica,sans-serif" size="2"></font><br /></p> <p align="justify"><i><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">Disclaimer: Refer to the latest BIAPPS and Oracle Cloud Documentation as things might have changed since this blog was written.</span></i></p> <p> <span style="font-size: 11pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;"><a href="https://blogs.oracle.com/biapps/tags/biapps_on_paas">All blogs related to BIAPPS on PAAS</a></span></p> <p><span style="font-size: 11pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;"><a href="https://blogs.oracle.com/biapps/tags/biapps_on_paas_backup">BIAPPS on PAAS Backup Blog Series</a></span><br /><br /> </p> <p> </p> <p><span style="font-size: 11pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;"></span> </p> Guna Vasireddy-Oracle https://blogs.oracle.com/biapps/entry/biapps_on_paas_backup_and Thu Mar 23 2017 06:51:58 GMT-0400 (EDT) Finding an Open Slip http://redpillanalytics.com/finding-an-open-slip/ <p><img width="300" height="200" src="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/SlipBackground.jpg?fit=300%2C200" class="attachment-medium size-medium wp-post-image" alt="" srcset="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/SlipBackground.jpg?w=2000 2000w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/SlipBackground.jpg?resize=300%2C200 300w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/SlipBackground.jpg?resize=768%2C512 768w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/SlipBackground.jpg?resize=1024%2C682 1024w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="4748" data-permalink="http://redpillanalytics.com/finding-an-open-slip/slipbackground/" data-orig-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/SlipBackground.jpg?fit=2000%2C1333" data-orig-size="2000,1333" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="SlipBackground" data-image-description="" data-medium-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/SlipBackground.jpg?fit=300%2C200" data-large-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/SlipBackground.jpg?fit=1024%2C682" /></p><p id="81a0" class="graf graf--p graf-after--h4">Let’s pretend that you need to change ports within your OBIEE 12c instance due to new applications that natively install into ports that OBIEE is running. Or maybe you want to have the ports be the same as the OBIEE 11g ports. Whatever the reason, how do we go about changing the ports within the instance? Below is a quick guide for doing just that.</p> <p id="dff6" class="graf graf--p graf-after--p">Log into your OBIEE host and open a .cmd prompt or terminal window with rights to the OBIEE instance. Check the instance status, and shut down the OBIEE environment if it is up.</p> <p id="3cf2" class="graf graf--p graf-after--p">Navigate to the &lt;ORACLE_HOME&gt;/bi/config/fmwconfig/bienv/core directory.</p> <figure id="c8e7" class="graf graf--figure graf-after--p"> <div class="aspectRatioPlaceholder is-locked"> <div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="1*VANVoJfs9uQexlrPCv8Uxg.png" data-width="1322" data-height="388" data-action="zoom" data-action-value="1*VANVoJfs9uQexlrPCv8Uxg.png" data-scroll="native"><img class="progressiveMedia-image js-progressiveMedia-image" src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*VANVoJfs9uQexlrPCv8Uxg.png?w=1170&#038;ssl=1" data-src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*VANVoJfs9uQexlrPCv8Uxg.png?w=1170&#038;ssl=1" data-recalc-dims="1" /></div> </div> </figure> <p id="31d0" class="graf graf--p graf-after--figure">In this directory there is a file that controls all of the ports for your current environment. Convenient, right? Let’s edit it. Open the bienv-components.xml file.</p> <p id="9d5d" class="graf graf--p graf-after--p">You’ll now see a list of all of the services that you have configured for your environment. Each of these will have an xml tag called &lt;port&gt; with the port number in it.</p> <figure id="96c4" class="graf graf--figure graf-after--p"> <div class="aspectRatioPlaceholder is-locked"> <div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="1*tU6XKmP2q63dWIw036Hk1A.png" data-width="1336" data-height="782" data-action="zoom" data-action-value="1*tU6XKmP2q63dWIw036Hk1A.png" data-scroll="native"> <div style="width: 1346px" class="wp-caption aligncenter"><img class="progressiveMedia-image js-progressiveMedia-image" src="https://i0.wp.com/cdn-images-1.medium.com/max/1600/1*tU6XKmP2q63dWIw036Hk1A.png?resize=1170%2C685&#038;ssl=1" alt="" data-src="https://i0.wp.com/cdn-images-1.medium.com/max/1600/1*tU6XKmP2q63dWIw036Hk1A.png?resize=1170%2C685&#038;ssl=1" data-recalc-dims="1" /><p class="wp-caption-text">Before we edit…</p></div> </div> </div><figcaption class="imageCaption"></figcaption></figure> <p id="66fc" class="graf graf--p graf-after--figure">Simply edit the file to change the port number to your new port number. Save and exit.</p> <figure id="ebcc" class="graf graf--figure graf-after--p"> <div class="aspectRatioPlaceholder is-locked"> <div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="1*vO2Ueb99I0uQ3d9KwTzm-Q.png" data-width="1324" data-height="476" data-action="zoom" data-action-value="1*vO2Ueb99I0uQ3d9KwTzm-Q.png" data-scroll="native"> <p>&nbsp;</p> <div style="width: 1334px" class="wp-caption aligncenter"><img class="progressiveMedia-image js-progressiveMedia-image" src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*vO2Ueb99I0uQ3d9KwTzm-Q.png?resize=1170%2C421&#038;ssl=1" alt="" data-src="https://i1.wp.com/cdn-images-1.medium.com/max/1600/1*vO2Ueb99I0uQ3d9KwTzm-Q.png?resize=1170%2C421&#038;ssl=1" data-recalc-dims="1" /><p class="wp-caption-text">…and after!</p></div> </div> </div> </figure> <p id="e3a4" class="graf graf--p graf-after--figure">Restart your OBIEE environment.</p> <p id="91f9" class="graf graf--p graf-after--p">Remember to do this process while the environment is down as the ports will only be refreshed once it is started. Also, remember to check that there are no other services running on the port that you are changing to.</p> <hr /> <p class="graf graf--p graf-after--p">Check out our collection of tip posts <a href="http://redpillanalytics.com/category/red-pill-analytics-tips/">here</a>. Subscribe to have them delivered to your inbox <a href="http://eepurl.com/cz5H_r">here</a>.</p> Phil Goerdt http://redpillanalytics.com/?p=4745 Wed Mar 22 2017 09:01:06 GMT-0400 (EDT) Finding an Open Slip https://medium.com/red-pill-analytics/finding-an-open-slip-ec57de26e03f?source=rss----abcc62a8d63e---4 <figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xMIfpeOVSQu7MI97J0305Q.jpeg" /><figcaption>Photo credit:<a href="https://unsplash.com/search/boat?photo=YXZnE1jFdFo"> Joshua Stannard</a></figcaption></figure><h4>Changing Ports in OBIEE 12c</h4><p>Let’s pretend that you need to change ports within your OBIEE 12c instance due to new applications that natively install into ports that OBIEE is running. Or maybe you want to have the ports be the same as the OBIEE 11g ports. Whatever the reason, how do we go about changing the ports within the instance? Below is a quick guide for doing just that.</p><p>Log into your OBIEE host and open a .cmd prompt or terminal window with rights to the OBIEE instance. Check the instance status, and shut down the OBIEE environment if it is up.</p><p>Navigate to the &lt;ORACLE_HOME&gt;/bi/config/fmwconfig/bienv/core directory.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VANVoJfs9uQexlrPCv8Uxg.png" /></figure><p>In this directory there is a file that controls all of the ports for your current environment. Convenient, right? Let’s edit it. Open the bienv-components.xml file.</p><p>You’ll now see a list of all of the services that you have configured for your environment. Each of these will have an xml tag called &lt;port&gt; with the port number in it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tU6XKmP2q63dWIw036Hk1A.png" /><figcaption>Before we edit…</figcaption></figure><p>Simply edit the file to change the port number to your new port number. Save and exit.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vO2Ueb99I0uQ3d9KwTzm-Q.png" /><figcaption>…and after!</figcaption></figure><p>Restart your OBIEE environment.</p><p>Remember to do this process while the environment is down as the ports will only be refreshed once it is started. Also, remember to check that there are no other services running on the port that you are changing to.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ec57de26e03f" width="1" height="1"><hr><p><a href="https://medium.com/red-pill-analytics/finding-an-open-slip-ec57de26e03f">Finding an Open Slip</a> was originally published in <a href="https://medium.com/red-pill-analytics">Red Pill Analytics</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p> Phil Goerdt https://medium.com/p/ec57de26e03f Wed Mar 22 2017 09:01:01 GMT-0400 (EDT) Oracle Database 12c Release 2 New Feature – Create Data Guard Standby Database Using DBCA http://gavinsoorma.com/2017/03/oracle-database-12c-release-2-new-feature-create-data-guard-standby-database-using-dbca/ <p>One of the real nice new features in Oracle 12c Release 2 (12.2.0.1) is the ability to create an Oracle Data Guard Standby Database using DBCA (Database Configuration Assistant). This really does simplify the process of creating a standby database as well and automates a number of steps in the creation process which were earlier manually performed.</p> <p>In this example we will see how a 12.2.0.1 Data Guard environment is created via DBCA and then Data Guard Broker (DGMGRL).</p> <p>The source database is called <strong>salesdb</strong> and the standby database DB_UNIQUE_NAME will be <strong>salesdb_sb</strong>.</p> <p>Primary database host name is <strong>host01</strong> and the Standby database host name is <strong>host02</strong>.</p> <p>The syntax is:</p> <pre dir="ltr">dbca -createDuplicateDB -gdbName global_database_name -primaryDBConnectionString easy_connect_string_to_primary -sid database_system_identifier [-createAsStandby [-dbUniqueName db_unique_name_for_standby]] </pre> <p>We will run the command from the standby host host02 as shown below.<br /> &nbsp;</p> <pre>[oracle@host02 ~]$ <strong>dbca -silent -createDuplicateDB -gdbName salesdb -primaryDBConnectionString</strong> <strong>host01:1521/salesdb -sid salesdb -createAsStandby -dbUniqueName salesdb_sb</strong> Enter SYS user password: Listener config step 33% complete Auxiliary instance creation 66% complete RMAN duplicate 100% complete Look at the log file "/u02/app/oracle/cfgtoollogs/dbca/salesdb_sb/salesdb.log" for further details. </pre> <p>Connect to the Standby Database and verify the role of the database<br /> &nbsp;<br /> <a href="http://gavinsoorma.com/wp-content/uploads/2017/03/dg1.png" rel="attachment wp-att-7481"><img class="aligncenter size-full wp-image-7481" src="http://gavinsoorma.com/wp-content/uploads/2017/03/dg1.png" alt="dg1" width="844" height="367" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/dg1.png 844w, http://gavinsoorma.com/wp-content/uploads/2017/03/dg1-300x130.png 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/dg1-768x334.png 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/dg1-300x130@2x.png 600w" sizes="(max-width: 844px) 100vw, 844px" /></a></p> <p>&nbsp;</p> <p>Note that the SPFILE and Password File for the Standby Database has been automatically created</p> <pre> [oracle@host02 dbs]$ ls -l sp* -rw-r-----. 1 oracle dba 5632 Mar 22 09:40 spfilesalesdb.ora [oracle@host02 dbs]$ ls -l ora* -rw-r-----. 1 oracle dba 3584 Mar 17 14:38 orapwsalesdb </pre> <p>&nbsp;</p> <p>Add the required entries to the tnsnames.ora file</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/dg2.png" rel="attachment wp-att-7482"><img class="aligncenter size-full wp-image-7482" src="http://gavinsoorma.com/wp-content/uploads/2017/03/dg2.png" alt="dg2" width="694" height="302" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/dg2.png 694w, http://gavinsoorma.com/wp-content/uploads/2017/03/dg2-300x131.png 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/dg2-300x131@2x.png 600w" sizes="(max-width: 694px) 100vw, 694px" /></a></p> <p>Continue with the Data Guard Standby Database creation using the Data Guard Broker<br /> &nbsp;</p> <pre>SQL&gt; <strong>alter system set dg_broker_start=true scope=both;</strong> System altered. SQL&gt; quit Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production [oracle@host01 archivelog]$<strong> dgmgrl</strong> DGMGRL for Linux: Release 12.2.0.1.0 - Production on Fri Mar 17 14:47:27 2017 <Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved. Welcome to DGMGRL, type "help" for information. DGMGRL&gt; <strong>connect /</strong> Connected to "salesdb" Connected as SYSDG. DGMGRL&gt; <strong>create configuration 'salesdb_dg'</strong> &gt; <strong>as primary database is 'salesdb'</strong> &gt; <strong>connect identifier is 'salesdb';</strong> Configuration "salesdb_dg" created with primary database "salesdb" </pre> <pre>DGMGRL&gt; <strong>add database 'salesdb_sb' as connect identifier is 'salesdb_sb';</strong> Database "salesdb_sb" added DGMGRL&gt; <strong>enable configuration;</strong> Enabled.</pre> <p>&nbsp;</p> <p>Create the Standby Redo Log Files on the primary database</p> <p>&nbsp;</p> <pre>SQL&gt; select member from v$logfile; MEMBER -------------------------------------------------------------------------------- /u03/app/oradata/salesdb/redo03.log /u03/app/oradata/salesdb/redo02.log /u03/app/oradata/salesdb/redo01.log SQL&gt; select bytes/1048576 from v$log; BYTES/1048576 -------------      200      200      200 SQL&gt; alter database add standby logfile '/u03/app/oradata/salesdb/standy_redo1.log' size 200m; Database altered. SQL&gt; alter database add standby logfile '/u03/app/oradata/salesdb/standy_redo2.log' size 200m; Database altered. SQL&gt; alter database add standby logfile '/u03/app/oradata/salesdb/standy_redo3.log' size 200m; Database altered. SQL&gt; alter database add standby logfile '/u03/app/oradata/salesdb/standy_redo4.log' size 200m; Database altered. </pre> <p>&nbsp;<br /> Create the Standby Redo Log Files on the standby database</p> <p>&nbsp;</p> <pre>DGMGRL&gt; connect / Connected to "salesdb" Connected as SYSDG. DGMGRL&gt; edit database 'salesdb_sb' set state='APPLY-OFF'; Succeeded. SQL&gt; shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL&gt; startup mount; ORACLE instance started. Total System Global Area 1174405120 bytes Fixed Size          8619984 bytes Variable Size           436209712 bytes Database Buffers   721420288 bytes Redo Buffers              8155136 bytes Database mounted. SQL&gt;  alter database add standby logfile '/u03/app/oradata/salesdb/standy_redo1.log' size 200m; Database altered. SQL&gt; alter database add standby logfile '/u03/app/oradata/salesdb/standy_redo2.log' size 200m; Database altered. SQL&gt; alter database add standby logfile '/u03/app/oradata/salesdb/standy_redo3.log' size 200m; Database altered. SQL&gt; alter database add standby logfile '/u03/app/oradata/salesdb/standy_redo4.log' size 200m; Database altered. SQL&gt; alter database open; Database altered. SQL&gt;</pre> <p>&nbsp;<br /> Verify the Data Guard Configuration<br /> &nbsp;</p> <pre>DGMGRL&gt; edit database 'salesdb_sb' set state='APPLY-ON'; Succeeded. DGMGRL&gt; show configuration; Configuration - salesdb_dg Protection Mode: MaxPerformance salesdb    - Primary database    salesdb_sb - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS   (status updated 8 seconds ago)</pre> <p>&nbsp;<br /> Set the property <strong>StaticConnectIdentifier</strong> to prevent errors during switchover operations<br /> &nbsp;</p> <pre>Edit database ‘salesdb’ set property StaticConnectIdentifier= '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host01.localdomain)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=salesdb_DGMGRL)(INSTANCE_NAME=salesdb)(SERVER=DEDICATED)))'; Edit database ‘salesdb_sb’ set property StaticConnectIdentifier=StaticConnectIdentifier= '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host02.localdomain)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=salesdb_sb_DGMGRL)(INSTANCE_NAME=salesdb)(SERVER=DEDICATED)))';</pre> <p>Edit listener.ora on primary database host and add the lines shown below. Reload the listener.<br /> &nbsp;</p> <pre> SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (GLOBAL_DBNAME = salesdb_DGMGRL)       (SID_NAME = salesdb)         )   ) </pre> <p>&nbsp;<br /> Edit listener.ora on standby database host and add the lines shown below. Reload the listener.<br /> &nbsp;</p> <pre>SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (GLOBAL_DBNAME = salesdb_sb_DGMGRL)       (SID_NAME = salesdb)         )   )</pre> Gavin Soorma http://gavinsoorma.com/?p=7480 Wed Mar 22 2017 00:06:10 GMT-0400 (EDT) Migrating an On-Premises Essbase Cube to the Cloud https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/ <p>With <a href="https://cloud.oracle.com/analytics-cloud">Oracle Analytics Cloud</a> (OAC) having been released last Friday (luck of the Irish!), I made it a priority to examine the level of difficulty (or ease) to migrate an on-premises (OP) Essbase cubes to the cloud. Overall the process is simple, but there are a few gotchas and caveats I found in the process.</p> <p>And since I post my failures on my blog, you will see what I tried that failed so you won’t make the same mistakes I did!</p> <p>Below is my OP Essbase cube. It is a fairly standard workforce planning/analysis cube that I built using the US’s Office of Personnel Management (OPM) structure for General Schedules (the pay and locality pay matrix for the different jobs in the US government). This is a BSO cube.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image001.png"><img data-attachment-id="1568" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image001-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image001.png" data-orig-size="540,736" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image001" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image001.png?w=220&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image001.png?w=540" class="alignnone size-medium wp-image-1568" src="https://epmqueen.files.wordpress.com/2017/03/image001.png?w=220&#038;h=300" alt="" width="220" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image001.png?w=220&amp;h=300 220w, https://epmqueen.files.wordpress.com/2017/03/image001.png?w=440&amp;h=600 440w, https://epmqueen.files.wordpress.com/2017/03/image001.png?w=110&amp;h=150 110w" sizes="(max-width: 220px) 100vw, 220px" /></a></p> <p>Because I truly wanted to test the export/import process, I added Typed Measures to my OP cube to see if they came over. Here, you can see the different localities in the GS schedule.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image011.jpg"><img data-attachment-id="1604" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image011-7/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image011.jpg" data-orig-size="624,322" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image011" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image011.jpg?w=300&#038;h=155" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image011.jpg?w=624" class="alignnone size-medium wp-image-1604" src="https://epmqueen.files.wordpress.com/2017/03/image011.jpg?w=300&#038;h=155" alt="" width="300" height="155" srcset="https://epmqueen.files.wordpress.com/2017/03/image011.jpg?w=300&amp;h=155 300w, https://epmqueen.files.wordpress.com/2017/03/image011.jpg?w=600&amp;h=310 600w, https://epmqueen.files.wordpress.com/2017/03/image011.jpg?w=150&amp;h=77 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>To show I don’t have just one or two rows of data, here are the cube statistics. There’s a chunk of data in there…comparable to some cubes I’ve built in the past.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image091.jpg"><img data-attachment-id="1605" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image091/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image091.jpg" data-orig-size="624,385" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image091" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image091.jpg?w=300&#038;h=185" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image091.jpg?w=624" class="alignnone size-medium wp-image-1605" src="https://epmqueen.files.wordpress.com/2017/03/image091.jpg?w=300&#038;h=185" alt="" width="300" height="185" srcset="https://epmqueen.files.wordpress.com/2017/03/image091.jpg?w=300&amp;h=185 300w, https://epmqueen.files.wordpress.com/2017/03/image091.jpg?w=600&amp;h=370 600w, https://epmqueen.files.wordpress.com/2017/03/image091.jpg?w=150&amp;h=93 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I show the following screen to show the outline structure a bit. In each period block, I have the base level rolling up through Department to “GS Positions”. I wanted to highlight that the Typed Measures for Locality show at the base level, or Detroit in this example.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image094.jpg"><img data-attachment-id="1606" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image094/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image094.jpg" data-orig-size="625,181" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image094" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image094.jpg?w=300&#038;h=87" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image094.jpg?w=625" class="alignnone size-medium wp-image-1606" src="https://epmqueen.files.wordpress.com/2017/03/image094.jpg?w=300&#038;h=87" alt="" width="300" height="87" srcset="https://epmqueen.files.wordpress.com/2017/03/image094.jpg?w=300&amp;h=87 300w, https://epmqueen.files.wordpress.com/2017/03/image094.jpg?w=600&amp;h=174 600w, https://epmqueen.files.wordpress.com/2017/03/image094.jpg?w=150&amp;h=43 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I’ve also added the option to enter and calculate pay and locality pay percentage increases for the different Budget versions.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image008.png"><img data-attachment-id="1569" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image008-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image008.png" data-orig-size="556,136" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image008" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image008.png?w=300&#038;h=73" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image008.png?w=556" class="alignnone size-medium wp-image-1569" src="https://epmqueen.files.wordpress.com/2017/03/image008.png?w=300&#038;h=73" alt="" width="300" height="73" srcset="https://epmqueen.files.wordpress.com/2017/03/image008.png?w=300&amp;h=73 300w, https://epmqueen.files.wordpress.com/2017/03/image008.png?w=150&amp;h=37 150w, https://epmqueen.files.wordpress.com/2017/03/image008.png 556w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>As you can see, it’s not a wimpy cube to export, data included. Using the <a href="https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/">tool</a> I wrote about last Friday that exports Essbase cubes, “dbxtool”, I enter the details required to connect to Essbase and download the desired cube, USG_WF.Emp_Dets.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image102.png"><img data-attachment-id="1595" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image102/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image102.png" data-orig-size="1006,164" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image102" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image102.png?w=300&#038;h=49" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image102.png?w=840" class="alignnone size-medium wp-image-1595" src="https://epmqueen.files.wordpress.com/2017/03/image102.png?w=300&#038;h=49" alt="" width="300" height="49" srcset="https://epmqueen.files.wordpress.com/2017/03/image102.png?w=300&amp;h=49 300w, https://epmqueen.files.wordpress.com/2017/03/image102.png?w=600&amp;h=98 600w, https://epmqueen.files.wordpress.com/2017/03/image102.png?w=150&amp;h=24 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I get a visual cue from the tool that my cube is being exported (so much better than a simple “Success”, IMHO).</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image009.png"><img data-attachment-id="1596" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image009-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image009.png" data-orig-size="1006,969" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image009" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image009.png?w=300&#038;h=289" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image009.png?w=840" class="alignnone size-medium wp-image-1596" src="https://epmqueen.files.wordpress.com/2017/03/image009.png?w=300&#038;h=289" alt="" width="300" height="289" srcset="https://epmqueen.files.wordpress.com/2017/03/image009.png?w=300&amp;h=289 300w, https://epmqueen.files.wordpress.com/2017/03/image009.png?w=600&amp;h=578 600w, https://epmqueen.files.wordpress.com/2017/03/image009.png?w=150&amp;h=144 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>When I go to the export’s folder, I see I have 2 items. I was expecting just one – the Excel file – so I want to investigate. The zip file contains my data because the data set is too large for Excel. I understand that reasoning.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image096.jpg"><img data-attachment-id="1607" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image096/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image096.jpg" data-orig-size="624,177" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image096" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image096.jpg?w=300&#038;h=85" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image096.jpg?w=624" class="alignnone size-medium wp-image-1607" src="https://epmqueen.files.wordpress.com/2017/03/image096.jpg?w=300&#038;h=85" alt="" width="300" height="85" srcset="https://epmqueen.files.wordpress.com/2017/03/image096.jpg?w=300&amp;h=85 300w, https://epmqueen.files.wordpress.com/2017/03/image096.jpg?w=600&amp;h=170 600w, https://epmqueen.files.wordpress.com/2017/03/image096.jpg?w=150&amp;h=43 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>When I open the Excel file, I see many of the cube details laid out for me in “Cube Designer” format (notice this is also the tab that opens when I open this file). I see my application name, database name, and dimensions listed.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image099.png"><img data-attachment-id="1608" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image099/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image099.png" data-orig-size="624,331" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image099" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image099.png?w=300&#038;h=159" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image099.png?w=624" class="alignnone size-medium wp-image-1608" src="https://epmqueen.files.wordpress.com/2017/03/image099.png?w=300&#038;h=159" alt="" width="300" height="159" srcset="https://epmqueen.files.wordpress.com/2017/03/image099.png?w=300&amp;h=159 300w, https://epmqueen.files.wordpress.com/2017/03/image099.png?w=600&amp;h=318 600w, https://epmqueen.files.wordpress.com/2017/03/image099.png?w=150&amp;h=80 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>On the Cube.Settings tab, I see the details about my cube. Everything looks correct to me.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image100.jpg"><img data-attachment-id="1609" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image100/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image100.jpg" data-orig-size="624,650" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image100" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image100.jpg?w=288&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image100.jpg?w=624" class="alignnone size-medium wp-image-1609" src="https://epmqueen.files.wordpress.com/2017/03/image100.jpg?w=288&#038;h=300" alt="" width="288" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image100.jpg?w=288&amp;h=300 288w, https://epmqueen.files.wordpress.com/2017/03/image100.jpg?w=576&amp;h=600 576w, https://epmqueen.files.wordpress.com/2017/03/image100.jpg?w=144&amp;h=150 144w" sizes="(max-width: 288px) 100vw, 288px" /></a></p> <p>The Cube.Generations tab is empty.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image019.png"><img data-attachment-id="1570" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image019-5/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image019.png" data-orig-size="489,832" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image019" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image019.png?w=176&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image019.png?w=489" class="alignnone size-medium wp-image-1570" src="https://epmqueen.files.wordpress.com/2017/03/image019.png?w=176&#038;h=300" alt="" width="176" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image019.png?w=176&amp;h=300 176w, https://epmqueen.files.wordpress.com/2017/03/image019.png?w=352&amp;h=600 352w, https://epmqueen.files.wordpress.com/2017/03/image019.png?w=88&amp;h=150 88w" sizes="(max-width: 176px) 100vw, 176px" /></a></p> <p>Next, the different dimensions are listed out on their own tab. I see the dimension name and hierarchy under “Members”. In the Definitions section, I see that the file and rule names have been provided for me.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image020.png"><img data-attachment-id="1571" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image020-6/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image020.png" data-orig-size="576,830" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image020" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image020.png?w=208&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image020.png?w=576" class="alignnone size-medium wp-image-1571" src="https://epmqueen.files.wordpress.com/2017/03/image020.png?w=208&#038;h=300" alt="" width="208" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image020.png?w=208&amp;h=300 208w, https://epmqueen.files.wordpress.com/2017/03/image020.png?w=416&amp;h=600 416w, https://epmqueen.files.wordpress.com/2017/03/image020.png?w=104&amp;h=150 104w" sizes="(max-width: 208px) 100vw, 208px" /></a></p> <p>Since I expected the dbxtool to export the OP cube in ready format for cloud load, I decide to load it to OAC as is. I need to set my Essbase cloud connection, and I did that by clicking “Connections”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image101.jpg"><img data-attachment-id="1610" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image101/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image101.jpg" data-orig-size="624,97" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image101" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image101.jpg?w=300&#038;h=47" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image101.jpg?w=624" class="alignnone size-medium wp-image-1610" src="https://epmqueen.files.wordpress.com/2017/03/image101.jpg?w=300&#038;h=47" alt="" width="300" height="47" srcset="https://epmqueen.files.wordpress.com/2017/03/image101.jpg?w=300&amp;h=47 300w, https://epmqueen.files.wordpress.com/2017/03/image101.jpg?w=600&amp;h=94 600w, https://epmqueen.files.wordpress.com/2017/03/image101.jpg?w=150&amp;h=23 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I entered the URL for Essbase.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0231.png"><img data-attachment-id="1572" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image0231-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0231.png" data-orig-size="406,239" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0231" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0231.png?w=300&#038;h=177" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0231.png?w=406" class="alignnone size-medium wp-image-1572" src="https://epmqueen.files.wordpress.com/2017/03/image0231.png?w=300&#038;h=177" alt="" width="300" height="177" srcset="https://epmqueen.files.wordpress.com/2017/03/image0231.png?w=300&amp;h=177 300w, https://epmqueen.files.wordpress.com/2017/03/image0231.png?w=150&amp;h=88 150w, https://epmqueen.files.wordpress.com/2017/03/image0231.png 406w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Next, I clicked “Transform Data” to load the workbook.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image103.png"><img data-attachment-id="1611" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image103/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image103.png" data-orig-size="963,145" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image103" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image103.png?w=300&#038;h=45" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image103.png?w=840" class="alignnone size-medium wp-image-1611" src="https://epmqueen.files.wordpress.com/2017/03/image103.png?w=300&#038;h=45" alt="" width="300" height="45" srcset="https://epmqueen.files.wordpress.com/2017/03/image103.png?w=300&amp;h=45 300w, https://epmqueen.files.wordpress.com/2017/03/image103.png?w=600&amp;h=90 600w, https://epmqueen.files.wordpress.com/2017/03/image103.png?w=150&amp;h=23 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>You can have the system choose the cube name, or you can modify it yourself. I did not make any modifications and clicked “Run”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0261.png"><img data-attachment-id="1573" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image0261/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0261.png" data-orig-size="342,346" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0261" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0261.png?w=297&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0261.png?w=342" class="alignnone size-medium wp-image-1573" src="https://epmqueen.files.wordpress.com/2017/03/image0261.png?w=297&#038;h=300" alt="" width="297" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image0261.png?w=297&amp;h=300 297w, https://epmqueen.files.wordpress.com/2017/03/image0261.png?w=148&amp;h=150 148w, https://epmqueen.files.wordpress.com/2017/03/image0261.png 342w" sizes="(max-width: 297px) 100vw, 297px" /></a></p> <p>The tool asks if I want to build the cube…yes, Run.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0271.png"><img data-attachment-id="1574" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image0271/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0271.png" data-orig-size="450,466" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0271" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0271.png?w=290&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0271.png?w=450" class="alignnone size-medium wp-image-1574" src="https://epmqueen.files.wordpress.com/2017/03/image0271.png?w=290&#038;h=300" alt="" width="290" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image0271.png?w=290&amp;h=300 290w, https://epmqueen.files.wordpress.com/2017/03/image0271.png?w=145&amp;h=150 145w, https://epmqueen.files.wordpress.com/2017/03/image0271.png 450w" sizes="(max-width: 290px) 100vw, 290px" /></a></p> <p>Once the job has been started, you can choose to go to Job Viewer to see the progress.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0281.png"><img data-attachment-id="1575" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image0281/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0281.png" data-orig-size="450,445" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0281" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0281.png?w=300&#038;h=297" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0281.png?w=450" class="alignnone size-medium wp-image-1575" src="https://epmqueen.files.wordpress.com/2017/03/image0281.png?w=300&#038;h=297" alt="" width="300" height="297" srcset="https://epmqueen.files.wordpress.com/2017/03/image0281.png?w=300&amp;h=297 300w, https://epmqueen.files.wordpress.com/2017/03/image0281.png?w=150&amp;h=148 150w, https://epmqueen.files.wordpress.com/2017/03/image0281.png 450w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I see my cube load is running. I can click “Refresh” to see the updates.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image104.png"><img data-attachment-id="1612" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image104/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image104.png" data-orig-size="943,475" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image104" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image104.png?w=300&#038;h=151" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image104.png?w=840" class="alignnone size-medium wp-image-1612" src="https://epmqueen.files.wordpress.com/2017/03/image104.png?w=300&#038;h=151" alt="" width="300" height="151" srcset="https://epmqueen.files.wordpress.com/2017/03/image104.png?w=300&amp;h=151 300w, https://epmqueen.files.wordpress.com/2017/03/image104.png?w=600&amp;h=302 600w, https://epmqueen.files.wordpress.com/2017/03/image104.png?w=150&amp;h=76 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Also, I can click “Details” to see details behind the job.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image105.png"><img data-attachment-id="1613" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image105/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image105.png" data-orig-size="943,475" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image105" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image105.png?w=300&#038;h=151" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image105.png?w=840" class="alignnone size-medium wp-image-1613" src="https://epmqueen.files.wordpress.com/2017/03/image105.png?w=300&#038;h=151" alt="" width="300" height="151" srcset="https://epmqueen.files.wordpress.com/2017/03/image105.png?w=300&amp;h=151 300w, https://epmqueen.files.wordpress.com/2017/03/image105.png?w=600&amp;h=302 600w, https://epmqueen.files.wordpress.com/2017/03/image105.png?w=150&amp;h=76 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Still in progress… If there are any errors, they will spit out to a text file that you view in this screen.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image033.png"><img data-attachment-id="1576" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image033-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image033.png" data-orig-size="511,519" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image033" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image033.png?w=295&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image033.png?w=511" class="alignnone size-medium wp-image-1576" src="https://epmqueen.files.wordpress.com/2017/03/image033.png?w=295&#038;h=300" alt="" width="295" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image033.png?w=295&amp;h=300 295w, https://epmqueen.files.wordpress.com/2017/03/image033.png?w=148&amp;h=150 148w, https://epmqueen.files.wordpress.com/2017/03/image033.png 511w" sizes="(max-width: 295px) 100vw, 295px" /></a></p> <p>So, my build errored out.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image106.png"><img data-attachment-id="1614" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image106/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image106.png" data-orig-size="943,475" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image106" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image106.png?w=300&#038;h=151" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image106.png?w=840" class="alignnone size-medium wp-image-1614" src="https://epmqueen.files.wordpress.com/2017/03/image106.png?w=300&#038;h=151" alt="" width="300" height="151" srcset="https://epmqueen.files.wordpress.com/2017/03/image106.png?w=300&amp;h=151 300w, https://epmqueen.files.wordpress.com/2017/03/image106.png?w=600&amp;h=302 600w, https://epmqueen.files.wordpress.com/2017/03/image106.png?w=150&amp;h=76 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I get an error that Headcount didn’t load (or anything else, for that matter). That’s odd.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0361.png"><img data-attachment-id="1577" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image0361/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0361.png" data-orig-size="511,519" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0361" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0361.png?w=295&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0361.png?w=511" class="alignnone size-medium wp-image-1577" src="https://epmqueen.files.wordpress.com/2017/03/image0361.png?w=295&#038;h=300" alt="" width="295" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image0361.png?w=295&amp;h=300 295w, https://epmqueen.files.wordpress.com/2017/03/image0361.png?w=148&amp;h=150 148w, https://epmqueen.files.wordpress.com/2017/03/image0361.png 511w" sizes="(max-width: 295px) 100vw, 295px" /></a></p> <p>So, I try the same process except choosing to make Modifcations. …Except I don’t really have any options to change.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image037.png"><img data-attachment-id="1578" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image037-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image037.png" data-orig-size="636,643" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image037" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image037.png?w=297&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image037.png?w=636" class="alignnone size-medium wp-image-1578" src="https://epmqueen.files.wordpress.com/2017/03/image037.png?w=297&#038;h=300" alt="" width="297" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image037.png?w=297&amp;h=300 297w, https://epmqueen.files.wordpress.com/2017/03/image037.png?w=594&amp;h=600 594w, https://epmqueen.files.wordpress.com/2017/03/image037.png?w=148&amp;h=150 148w" sizes="(max-width: 297px) 100vw, 297px" /></a></p> <p>The second tab… The Application Name and “USG_WF” name aren’t generations in the cube… Hmmm. Well, I have problems.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image038.png"><img data-attachment-id="1579" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image038-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image038.png" data-orig-size="636,643" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image038" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image038.png?w=297&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image038.png?w=636" class="alignnone size-medium wp-image-1579" src="https://epmqueen.files.wordpress.com/2017/03/image038.png?w=297&#038;h=300" alt="" width="297" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image038.png?w=297&amp;h=300 297w, https://epmqueen.files.wordpress.com/2017/03/image038.png?w=594&amp;h=600 594w, https://epmqueen.files.wordpress.com/2017/03/image038.png?w=148&amp;h=150 148w" sizes="(max-width: 297px) 100vw, 297px" /></a></p> <p>Next, I try to import the file online in Essbase.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image107.png"><img data-attachment-id="1615" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image107/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image107.png" data-orig-size="624,485" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image107" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image107.png?w=300&#038;h=233" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image107.png?w=624" class="alignnone size-medium wp-image-1615" src="https://epmqueen.files.wordpress.com/2017/03/image107.png?w=300&#038;h=233" alt="" width="300" height="233" srcset="https://epmqueen.files.wordpress.com/2017/03/image107.png?w=300&amp;h=233 300w, https://epmqueen.files.wordpress.com/2017/03/image107.png?w=600&amp;h=466 600w, https://epmqueen.files.wordpress.com/2017/03/image107.png?w=150&amp;h=117 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I see my cube name and dimensions are listed…great. I choose not to Load Data at this point. …There wasn’t data on my data tab anyways. More on that later…</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image108.jpg"><img data-attachment-id="1616" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image108/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image108.jpg" data-orig-size="624,430" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image108" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image108.jpg?w=300&#038;h=207" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image108.jpg?w=624" class="alignnone size-medium wp-image-1616" src="https://epmqueen.files.wordpress.com/2017/03/image108.jpg?w=300&#038;h=207" alt="" width="300" height="207" srcset="https://epmqueen.files.wordpress.com/2017/03/image108.jpg?w=300&amp;h=207 300w, https://epmqueen.files.wordpress.com/2017/03/image108.jpg?w=600&amp;h=414 600w, https://epmqueen.files.wordpress.com/2017/03/image108.jpg?w=150&amp;h=103 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I see I’m erroring out again. Argh.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image041.png"><img data-attachment-id="1580" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image041-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image041.png" data-orig-size="423,402" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image041" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image041.png?w=300&#038;h=285" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image041.png?w=423" class="alignnone size-medium wp-image-1580" src="https://epmqueen.files.wordpress.com/2017/03/image041.png?w=300&#038;h=285" alt="" width="300" height="285" srcset="https://epmqueen.files.wordpress.com/2017/03/image041.png?w=300&amp;h=285 300w, https://epmqueen.files.wordpress.com/2017/03/image041.png?w=150&amp;h=143 150w, https://epmqueen.files.wordpress.com/2017/03/image041.png 423w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>When I clicked “Export to Excel”, I really hoped to get more details about the errors, but I just got a regurgitation of what was on the screen.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image042.png"><img data-attachment-id="1581" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image042-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image042.png" data-orig-size="281,511" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image042" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image042.png?w=165&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image042.png?w=281" class="alignnone size-medium wp-image-1581" src="https://epmqueen.files.wordpress.com/2017/03/image042.png?w=165&#038;h=300" alt="" width="165" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image042.png?w=165&amp;h=300 165w, https://epmqueen.files.wordpress.com/2017/03/image042.png?w=82&amp;h=150 82w, https://epmqueen.files.wordpress.com/2017/03/image042.png 281w" sizes="(max-width: 165px) 100vw, 165px" /></a></p> <p>However, I see my cube has been created. Wait, what?</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image045.png"><img data-attachment-id="1582" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image045-5/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image045.png" data-orig-size="343,608" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image045" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image045.png?w=169&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image045.png?w=343" class="alignnone size-medium wp-image-1582" src="https://epmqueen.files.wordpress.com/2017/03/image045.png?w=169&#038;h=300" alt="" width="169" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image045.png?w=169&amp;h=300 169w, https://epmqueen.files.wordpress.com/2017/03/image045.png?w=338&amp;h=600 338w, https://epmqueen.files.wordpress.com/2017/03/image045.png?w=85&amp;h=150 85w" sizes="(max-width: 169px) 100vw, 169px" /></a></p> <p>When I click on the database and choose “Outline”…</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image109.jpg"><img data-attachment-id="1617" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image109-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image109.jpg" data-orig-size="624,325" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image109" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image109.jpg?w=300&#038;h=156" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image109.jpg?w=624" class="alignnone size-medium wp-image-1617" src="https://epmqueen.files.wordpress.com/2017/03/image109.jpg?w=300&#038;h=156" alt="" width="300" height="156" srcset="https://epmqueen.files.wordpress.com/2017/03/image109.jpg?w=300&amp;h=156 300w, https://epmqueen.files.wordpress.com/2017/03/image109.jpg?w=600&amp;h=312 600w, https://epmqueen.files.wordpress.com/2017/03/image109.jpg?w=150&amp;h=78 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I am brought to this screen. Notice the “Statistics” column shows no children (C), descendants (D), generations (G), or levels (L). No good.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image110.jpg"><img data-attachment-id="1618" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image110-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image110.jpg" data-orig-size="623,169" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image110" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image110.jpg?w=300&#038;h=81" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image110.jpg?w=623" class="alignnone size-medium wp-image-1618" src="https://epmqueen.files.wordpress.com/2017/03/image110.jpg?w=300&#038;h=81" alt="" width="300" height="81" srcset="https://epmqueen.files.wordpress.com/2017/03/image110.jpg?w=300&amp;h=81 300w, https://epmqueen.files.wordpress.com/2017/03/image110.jpg?w=597&amp;h=162 597w, https://epmqueen.files.wordpress.com/2017/03/image110.jpg?w=150&amp;h=41 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Okay, 3rd attempt at loading the metadata. In Cube Designer, I choose “Build Cube”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image111.png"><img data-attachment-id="1619" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image111-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image111.png" data-orig-size="624,318" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image111" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image111.png?w=300&#038;h=153" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image111.png?w=624" class="alignnone size-medium wp-image-1619" src="https://epmqueen.files.wordpress.com/2017/03/image111.png?w=300&#038;h=153" alt="" width="300" height="153" srcset="https://epmqueen.files.wordpress.com/2017/03/image111.png?w=300&amp;h=153 300w, https://epmqueen.files.wordpress.com/2017/03/image111.png?w=600&amp;h=306 600w, https://epmqueen.files.wordpress.com/2017/03/image111.png?w=150&amp;h=76 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I get a warning this time.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image112.png"><img data-attachment-id="1620" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image112-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image112.png" data-orig-size="943,475" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image112" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image112.png?w=300&#038;h=151" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image112.png?w=840" class="alignnone size-medium wp-image-1620" src="https://epmqueen.files.wordpress.com/2017/03/image112.png?w=300&#038;h=151" alt="" width="300" height="151" srcset="https://epmqueen.files.wordpress.com/2017/03/image112.png?w=300&amp;h=151 300w, https://epmqueen.files.wordpress.com/2017/03/image112.png?w=600&amp;h=302 600w, https://epmqueen.files.wordpress.com/2017/03/image112.png?w=150&amp;h=76 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Okay, so it created. That’s a step forward.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image054.png"><img data-attachment-id="1583" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image054-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image054.png" data-orig-size="511,519" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image054" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image054.png?w=295&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image054.png?w=511" class="alignnone size-medium wp-image-1583" src="https://epmqueen.files.wordpress.com/2017/03/image054.png?w=295&#038;h=300" alt="" width="295" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image054.png?w=295&amp;h=300 295w, https://epmqueen.files.wordpress.com/2017/03/image054.png?w=148&amp;h=150 148w, https://epmqueen.files.wordpress.com/2017/03/image054.png 511w" sizes="(max-width: 295px) 100vw, 295px" /></a></p> <p>However, when I look at some of the error files, I see the same error as before and back to square one.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0551.png"><img data-attachment-id="1584" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image0551/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0551.png" data-orig-size="511,519" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0551" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0551.png?w=295&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0551.png?w=511" class="alignnone size-medium wp-image-1584" src="https://epmqueen.files.wordpress.com/2017/03/image0551.png?w=295&#038;h=300" alt="" width="295" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image0551.png?w=295&amp;h=300 295w, https://epmqueen.files.wordpress.com/2017/03/image0551.png?w=148&amp;h=150 148w, https://epmqueen.files.wordpress.com/2017/03/image0551.png 511w" sizes="(max-width: 295px) 100vw, 295px" /></a></p> <p>Out of frustration, I go to the “Templates” section in Essbase to download the workbook for Sample.Basic to see what I have wrong in my workbook.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0511.png"><img data-attachment-id="1597" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image0511/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0511.png" data-orig-size="1717,419" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0511" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0511.png?w=300&#038;h=73" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0511.png?w=840" class="alignnone size-medium wp-image-1597" src="https://epmqueen.files.wordpress.com/2017/03/image0511.png?w=300&#038;h=73" alt="" width="300" height="73" srcset="https://epmqueen.files.wordpress.com/2017/03/image0511.png?w=300&amp;h=73 300w, https://epmqueen.files.wordpress.com/2017/03/image0511.png?w=600&amp;h=146 600w, https://epmqueen.files.wordpress.com/2017/03/image0511.png?w=150&amp;h=37 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I decided that I’m going to copy my dbxtool details to the Sample.Basic one.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image113.png"><img data-attachment-id="1621" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image113/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image113.png" data-orig-size="624,747" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image113" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image113.png?w=251&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image113.png?w=624" class="alignnone size-medium wp-image-1621" src="https://epmqueen.files.wordpress.com/2017/03/image113.png?w=251&#038;h=300" alt="" width="251" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image113.png?w=251&amp;h=300 251w, https://epmqueen.files.wordpress.com/2017/03/image113.png?w=502&amp;h=600 502w, https://epmqueen.files.wordpress.com/2017/03/image113.png?w=125&amp;h=150 125w" sizes="(max-width: 251px) 100vw, 251px" /></a></p> <p>Here are my details added to the Essbase.Cube tab.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image114.jpg"><img data-attachment-id="1622" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image114/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image114.jpg" data-orig-size="624,307" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image114" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image114.jpg?w=300&#038;h=148" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image114.jpg?w=624" class="alignnone size-medium wp-image-1622" src="https://epmqueen.files.wordpress.com/2017/03/image114.jpg?w=300&#038;h=148" alt="" width="300" height="148" srcset="https://epmqueen.files.wordpress.com/2017/03/image114.jpg?w=300&amp;h=148 300w, https://epmqueen.files.wordpress.com/2017/03/image114.jpg?w=600&amp;h=296 600w, https://epmqueen.files.wordpress.com/2017/03/image114.jpg?w=150&amp;h=74 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Following Sample.Basic’s format, I added generation names for Department and Periods.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image060.png"><img data-attachment-id="1585" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image060-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image060.png" data-orig-size="499,365" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image060" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image060.png?w=300&#038;h=219" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image060.png?w=499" class="alignnone size-medium wp-image-1585" src="https://epmqueen.files.wordpress.com/2017/03/image060.png?w=300&#038;h=219" alt="" width="300" height="219" srcset="https://epmqueen.files.wordpress.com/2017/03/image060.png?w=300&amp;h=219 300w, https://epmqueen.files.wordpress.com/2017/03/image060.png?w=150&amp;h=110 150w, https://epmqueen.files.wordpress.com/2017/03/image060.png 499w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>AHHHHHH. I see my issue. Using the dbxtool, I do NOT get the column names needed for my metadata. See below in light blue where it says “PARENT”, “CHILD”, etc. Yep, that’s it. And I knew it. So I now go through the process of adding the column names to my extract.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image115.jpg"><img data-attachment-id="1623" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image115/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image115.jpg" data-orig-size="624,299" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image115" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image115.jpg?w=300&#038;h=144" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image115.jpg?w=624" class="alignnone size-medium wp-image-1623" src="https://epmqueen.files.wordpress.com/2017/03/image115.jpg?w=300&#038;h=144" alt="" width="300" height="144" srcset="https://epmqueen.files.wordpress.com/2017/03/image115.jpg?w=300&amp;h=144 300w, https://epmqueen.files.wordpress.com/2017/03/image115.jpg?w=600&amp;h=288 600w, https://epmqueen.files.wordpress.com/2017/03/image115.jpg?w=150&amp;h=72 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>YES. FINALLY. SUCCESS. As you can see, it took me an hour’s worth of making mistakes to get it correct. But, I found my error.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image116.png"><img data-attachment-id="1624" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image116/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image116.png" data-orig-size="943,475" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image116" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image116.png?w=300&#038;h=151" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image116.png?w=840" class="alignnone size-medium wp-image-1624" src="https://epmqueen.files.wordpress.com/2017/03/image116.png?w=300&#038;h=151" alt="" width="300" height="151" srcset="https://epmqueen.files.wordpress.com/2017/03/image116.png?w=300&amp;h=151 300w, https://epmqueen.files.wordpress.com/2017/03/image116.png?w=600&amp;h=302 600w, https://epmqueen.files.wordpress.com/2017/03/image116.png?w=150&amp;h=76 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>The details behind the “Success” message.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0651.png"><img data-attachment-id="1586" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image0651/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0651.png" data-orig-size="511,519" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0651" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0651.png?w=295&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0651.png?w=511" class="alignnone size-medium wp-image-1586" src="https://epmqueen.files.wordpress.com/2017/03/image0651.png?w=295&#038;h=300" alt="" width="295" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image0651.png?w=295&amp;h=300 295w, https://epmqueen.files.wordpress.com/2017/03/image0651.png?w=148&amp;h=150 148w, https://epmqueen.files.wordpress.com/2017/03/image0651.png 511w" sizes="(max-width: 295px) 100vw, 295px" /></a></p> <p>I now have my new cube! …And I deleted the old cube that had no children.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image117.jpg"><img data-attachment-id="1625" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image117/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image117.jpg" data-orig-size="624,501" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image117" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image117.jpg?w=300&#038;h=241" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image117.jpg?w=624" class="alignnone size-medium wp-image-1625" src="https://epmqueen.files.wordpress.com/2017/03/image117.jpg?w=300&#038;h=241" alt="" width="300" height="241" srcset="https://epmqueen.files.wordpress.com/2017/03/image117.jpg?w=300&amp;h=241 300w, https://epmqueen.files.wordpress.com/2017/03/image117.jpg?w=600&amp;h=482 600w, https://epmqueen.files.wordpress.com/2017/03/image117.jpg?w=150&amp;h=120 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Now when I go to the “Outline” tab, I have “Statistics”!</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image118.jpg"><img data-attachment-id="1626" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image118/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image118.jpg" data-orig-size="625,179" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image118" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image118.jpg?w=300&#038;h=86" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image118.jpg?w=625" class="alignnone size-medium wp-image-1626" src="https://epmqueen.files.wordpress.com/2017/03/image118.jpg?w=300&#038;h=86" alt="" width="300" height="86" srcset="https://epmqueen.files.wordpress.com/2017/03/image118.jpg?w=300&amp;h=86 300w, https://epmqueen.files.wordpress.com/2017/03/image118.jpg?w=600&amp;h=172 600w, https://epmqueen.files.wordpress.com/2017/03/image118.jpg?w=150&amp;h=43 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Just like OP Essbase, you must lock the outline to edit it. To verify my formulas came over, I want to test one out.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0701.png"><img data-attachment-id="1587" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image0701/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0701.png" data-orig-size="372,169" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0701" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0701.png?w=300&#038;h=136" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0701.png?w=372" class="alignnone size-medium wp-image-1587" src="https://epmqueen.files.wordpress.com/2017/03/image0701.png?w=300&#038;h=136" alt="" width="300" height="136" srcset="https://epmqueen.files.wordpress.com/2017/03/image0701.png?w=300&amp;h=136 300w, https://epmqueen.files.wordpress.com/2017/03/image0701.png?w=150&amp;h=68 150w, https://epmqueen.files.wordpress.com/2017/03/image0701.png 372w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Clicking on the member formula shows it correctly. Perfect.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image119.jpg"><img data-attachment-id="1627" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image119/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image119.jpg" data-orig-size="624,306" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image119" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image119.jpg?w=300&#038;h=147" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image119.jpg?w=624" class="alignnone size-medium wp-image-1627" src="https://epmqueen.files.wordpress.com/2017/03/image119.jpg?w=300&#038;h=147" alt="" width="300" height="147" srcset="https://epmqueen.files.wordpress.com/2017/03/image119.jpg?w=300&amp;h=147 300w, https://epmqueen.files.wordpress.com/2017/03/image119.jpg?w=600&amp;h=294 600w, https://epmqueen.files.wordpress.com/2017/03/image119.jpg?w=150&amp;h=74 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>It even validates. Sweet.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image120.jpg"><img data-attachment-id="1628" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image120/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image120.jpg" data-orig-size="624,520" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image120" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image120.jpg?w=300&#038;h=250" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image120.jpg?w=624" class="alignnone size-medium wp-image-1628" src="https://epmqueen.files.wordpress.com/2017/03/image120.jpg?w=300&#038;h=250" alt="" width="300" height="250" srcset="https://epmqueen.files.wordpress.com/2017/03/image120.jpg?w=300&amp;h=250 300w, https://epmqueen.files.wordpress.com/2017/03/image120.jpg?w=600&amp;h=500 600w, https://epmqueen.files.wordpress.com/2017/03/image120.jpg?w=150&amp;h=125 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Now I want to load my calc scripts. I only have 3 main ones, so it’s as simple as copying and pasting the script from OP to Cloud.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image0751.png"><img data-attachment-id="1588" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image0751/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image0751.png" data-orig-size="577,764" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image0751" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image0751.png?w=227&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image0751.png?w=577" class="alignnone size-medium wp-image-1588" src="https://epmqueen.files.wordpress.com/2017/03/image0751.png?w=227&#038;h=300" alt="" width="227" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image0751.png?w=227&amp;h=300 227w, https://epmqueen.files.wordpress.com/2017/03/image0751.png?w=454&amp;h=600 454w, https://epmqueen.files.wordpress.com/2017/03/image0751.png?w=113&amp;h=150 113w" sizes="(max-width: 227px) 100vw, 227px" /></a></p> <p>Under the “Scripts” tab, I can create a new script.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image121.jpg"><img data-attachment-id="1629" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image121/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image121.jpg" data-orig-size="623,194" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image121" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image121.jpg?w=300&#038;h=93" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image121.jpg?w=623" class="alignnone size-medium wp-image-1629" src="https://epmqueen.files.wordpress.com/2017/03/image121.jpg?w=300&#038;h=93" alt="" width="300" height="93" srcset="https://epmqueen.files.wordpress.com/2017/03/image121.jpg?w=300&amp;h=93 300w, https://epmqueen.files.wordpress.com/2017/03/image121.jpg?w=597&amp;h=186 597w, https://epmqueen.files.wordpress.com/2017/03/image121.jpg?w=150&amp;h=47 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>When I click “Validate”, I get confirmation the script is valid.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image078.png"><img data-attachment-id="1589" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image078-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image078.png" data-orig-size="211,159" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image078" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image078.png?w=300&#038;h=226" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image078.png?w=300&#038;h=226" class="alignnone size-medium wp-image-1589" src="https://epmqueen.files.wordpress.com/2017/03/image078.png?w=300&#038;h=226" alt="" srcset="https://epmqueen.files.wordpress.com/2017/03/image078.png 211w, https://epmqueen.files.wordpress.com/2017/03/image078.png?w=150&amp;h=113 150w" sizes="(max-width: 211px) 100vw, 211px" /></a></p> <p>Saved off and ready for use.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image122.jpg"><img data-attachment-id="1630" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image122/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image122.jpg" data-orig-size="624,248" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image122" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image122.jpg?w=300&#038;h=119" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image122.jpg?w=624" class="alignnone size-medium wp-image-1630" src="https://epmqueen.files.wordpress.com/2017/03/image122.jpg?w=300&#038;h=119" alt="" width="300" height="119" srcset="https://epmqueen.files.wordpress.com/2017/03/image122.jpg?w=300&amp;h=119 300w, https://epmqueen.files.wordpress.com/2017/03/image122.jpg?w=600&amp;h=238 600w, https://epmqueen.files.wordpress.com/2017/03/image122.jpg?w=150&amp;h=60 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>If I need to add it later, I can do so on this same screen.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image081.png"><img data-attachment-id="1590" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image081/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image081.png" data-orig-size="397,354" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image081" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image081.png?w=300&#038;h=268" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image081.png?w=397" class="alignnone size-medium wp-image-1590" src="https://epmqueen.files.wordpress.com/2017/03/image081.png?w=300&#038;h=268" alt="" width="300" height="268" srcset="https://epmqueen.files.wordpress.com/2017/03/image081.png?w=300&amp;h=268 300w, https://epmqueen.files.wordpress.com/2017/03/image081.png?w=150&amp;h=134 150w, https://epmqueen.files.wordpress.com/2017/03/image081.png 397w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I have added my 2 other scripts to the repository.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image123.jpg"><img data-attachment-id="1631" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image123/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image123.jpg" data-orig-size="624,377" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image123" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image123.jpg?w=300&#038;h=181" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image123.jpg?w=624" class="alignnone size-medium wp-image-1631" src="https://epmqueen.files.wordpress.com/2017/03/image123.jpg?w=300&#038;h=181" alt="" width="300" height="181" srcset="https://epmqueen.files.wordpress.com/2017/03/image123.jpg?w=300&amp;h=181 300w, https://epmqueen.files.wordpress.com/2017/03/image123.jpg?w=600&amp;h=362 600w, https://epmqueen.files.wordpress.com/2017/03/image123.jpg?w=150&amp;h=91 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>To run the scripts manually, I click on “Jobs”. From here I click “New Job”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image080.png"><img data-attachment-id="1598" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image080-2/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image080.png" data-orig-size="566,192" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image080" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image080.png?w=300&#038;h=102" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image080.png?w=566" class="alignnone size-medium wp-image-1598" src="https://epmqueen.files.wordpress.com/2017/03/image080.png?w=300&#038;h=102" alt="" width="300" height="102" srcset="https://epmqueen.files.wordpress.com/2017/03/image080.png?w=300&amp;h=102 300w, https://epmqueen.files.wordpress.com/2017/03/image080.png?w=150&amp;h=51 150w, https://epmqueen.files.wordpress.com/2017/03/image080.png 566w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I choose “Calc Execution” and the script I want to run. Then “Execute”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image124.jpg"><img data-attachment-id="1632" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image124/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image124.jpg" data-orig-size="624,381" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image124" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image124.jpg?w=300&#038;h=183" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image124.jpg?w=624" class="alignnone size-medium wp-image-1632" src="https://epmqueen.files.wordpress.com/2017/03/image124.jpg?w=300&#038;h=183" alt="" width="300" height="183" srcset="https://epmqueen.files.wordpress.com/2017/03/image124.jpg?w=300&amp;h=183 300w, https://epmqueen.files.wordpress.com/2017/03/image124.jpg?w=600&amp;h=366 600w, https://epmqueen.files.wordpress.com/2017/03/image124.jpg?w=150&amp;h=92 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>The calcs haven’t really done anything yet because there is no data in the cube.</p> <p>Okay. Now we need to talk about the data. Figuring this out really frustrated me. I couldn’t figure out how to load my data into the cube since it was not exported to the Excel workbook. I tried copying and pasting the data from the zip file, it didn’t line up with the format needed.</p> <p>Here is the zip file. Notice how the columns are the period dimension.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image125.png"><img data-attachment-id="1599" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image125/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image125.png" data-orig-size="1185,290" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image125" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image125.png?w=300&#038;h=73" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image125.png?w=840" class="alignnone size-medium wp-image-1599" src="https://epmqueen.files.wordpress.com/2017/03/image125.png?w=300&#038;h=73" alt="" width="300" height="73" srcset="https://epmqueen.files.wordpress.com/2017/03/image125.png?w=300&amp;h=73 300w, https://epmqueen.files.wordpress.com/2017/03/image125.png?w=597&amp;h=146 597w, https://epmqueen.files.wordpress.com/2017/03/image125.png?w=150&amp;h=37 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>In the dbxtool export, the columns are the Measures dimension, and Periods are in a Dimension column.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image087.png"><img data-attachment-id="1600" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image087/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image087.png" data-orig-size="1295,203" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image087" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image087.png?w=300&#038;h=47" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image087.png?w=840" class="alignnone size-medium wp-image-1600" src="https://epmqueen.files.wordpress.com/2017/03/image087.png?w=300&#038;h=47" alt="" width="300" height="47" srcset="https://epmqueen.files.wordpress.com/2017/03/image087.png?w=300&amp;h=47 300w, https://epmqueen.files.wordpress.com/2017/03/image087.png?w=600&amp;h=94 600w, https://epmqueen.files.wordpress.com/2017/03/image087.png?w=150&amp;h=24 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I tried to use Excel to rearrange the data, but the data size is just too large. I thought about loading it to my Oracle database, but that was going to take a while too.</p> <p>There was really 1 true tool that was above all others for this task…and I shudder to say it…Essbase Report Script. So, that’s what I did.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image126.png"><img data-attachment-id="1601" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image126/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image126.png" data-orig-size="344,591" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image126" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image126.png?w=175&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image126.png?w=344" class="alignnone size-medium wp-image-1601" src="https://epmqueen.files.wordpress.com/2017/03/image126.png?w=175&#038;h=300" alt="" width="175" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image126.png?w=175&amp;h=300 175w, https://epmqueen.files.wordpress.com/2017/03/image126.png?w=87&amp;h=150 87w, https://epmqueen.files.wordpress.com/2017/03/image126.png 344w" sizes="(max-width: 175px) 100vw, 175px" /></a></p> <p>And it did its job perfectly.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image127.png"><img data-attachment-id="1602" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image127/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image127.png" data-orig-size="1021,267" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image127" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image127.png?w=300&#038;h=78" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image127.png?w=840" class="alignnone size-medium wp-image-1602" src="https://epmqueen.files.wordpress.com/2017/03/image127.png?w=300&#038;h=78" alt="" width="300" height="78" srcset="https://epmqueen.files.wordpress.com/2017/03/image127.png?w=300&amp;h=78 300w, https://epmqueen.files.wordpress.com/2017/03/image127.png?w=597&amp;h=156 597w, https://epmqueen.files.wordpress.com/2017/03/image127.png?w=150&amp;h=39 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>I decided to test something out at this point… Since I knew my dimension build tabs were good in my workbook, I deleted the application from the Cloud. I wanted to try and rebuild it with the data in the data tab.</p> <p>When I went through the process to load the cube using the “Import” option online, I chose to load the data as well. (Pay no attention to the warning given on the screen. I forgot to take screenshots the first time around…) Since I deleted my previous cube and calc scripts, I re-added my calcs after the cube was recreated.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image128.png"><img data-attachment-id="1603" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image128/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image128.png" data-orig-size="824,563" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image128" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image128.png?w=300&#038;h=205" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image128.png?w=824" class="alignnone size-medium wp-image-1603" src="https://epmqueen.files.wordpress.com/2017/03/image128.png?w=300&#038;h=205" alt="" width="300" height="205" srcset="https://epmqueen.files.wordpress.com/2017/03/image128.png?w=300&amp;h=205 300w, https://epmqueen.files.wordpress.com/2017/03/image128.png?w=600&amp;h=410 600w, https://epmqueen.files.wordpress.com/2017/03/image128.png?w=150&amp;h=102 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>And it worked!</p> <p>To verify the data loaded completely, I want to run my 3 calc scripts to calc the data. In the jobs tab, I click “New Job”.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image129.jpg"><img data-attachment-id="1633" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image129/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image129.jpg" data-orig-size="625,134" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image129" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image129.jpg?w=300&#038;h=64" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image129.jpg?w=625" class="alignnone size-medium wp-image-1633" src="https://epmqueen.files.wordpress.com/2017/03/image129.jpg?w=300&#038;h=64" alt="" width="300" height="64" srcset="https://epmqueen.files.wordpress.com/2017/03/image129.jpg?w=300&amp;h=64 300w, https://epmqueen.files.wordpress.com/2017/03/image129.jpg?w=597&amp;h=128 597w, https://epmqueen.files.wordpress.com/2017/03/image129.jpg?w=150&amp;h=32 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>It will ask me which script…</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image092.png"><img data-attachment-id="1592" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image092/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image092.png" data-orig-size="404,432" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image092" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image092.png?w=281&#038;h=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image092.png?w=404" class="alignnone size-medium wp-image-1592" src="https://epmqueen.files.wordpress.com/2017/03/image092.png?w=281&#038;h=300" alt="" width="281" height="300" srcset="https://epmqueen.files.wordpress.com/2017/03/image092.png?w=281&amp;h=300 281w, https://epmqueen.files.wordpress.com/2017/03/image092.png?w=140&amp;h=150 140w, https://epmqueen.files.wordpress.com/2017/03/image092.png 404w" sizes="(max-width: 281px) 100vw, 281px" /></a></p> <p>And I can see it ran successfully.</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image130.jpg"><img data-attachment-id="1634" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image130/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image130.jpg" data-orig-size="624,146" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image130" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image130.jpg?w=300&#038;h=70" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image130.jpg?w=624" class="alignnone size-medium wp-image-1634" src="https://epmqueen.files.wordpress.com/2017/03/image130.jpg?w=300&#038;h=70" alt="" width="300" height="70" srcset="https://epmqueen.files.wordpress.com/2017/03/image130.jpg?w=300&amp;h=70 300w, https://epmqueen.files.wordpress.com/2017/03/image130.jpg?w=600&amp;h=140 600w, https://epmqueen.files.wordpress.com/2017/03/image130.jpg?w=150&amp;h=35 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>This is what a success script looks like form the Details:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image131.jpg"><img data-attachment-id="1635" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image131/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image131.jpg" data-orig-size="624,154" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image131" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image131.jpg?w=300&#038;h=74" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image131.jpg?w=624" class="alignnone size-medium wp-image-1635" src="https://epmqueen.files.wordpress.com/2017/03/image131.jpg?w=300&#038;h=74" alt="" width="300" height="74" srcset="https://epmqueen.files.wordpress.com/2017/03/image131.jpg?w=300&amp;h=74 300w, https://epmqueen.files.wordpress.com/2017/03/image131.jpg?w=600&amp;h=148 600w, https://epmqueen.files.wordpress.com/2017/03/image131.jpg?w=150&amp;h=37 150w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>To test the calcs, I decided to compare numbers at the top for FY2018-&gt;Budget-&gt;Final.</p> <p>Here are the Cloud numbers:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image097.png"><img data-attachment-id="1593" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image097/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image097.png" data-orig-size="503,439" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image097" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image097.png?w=300&#038;h=262" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image097.png?w=503" class="alignnone size-medium wp-image-1593" src="https://epmqueen.files.wordpress.com/2017/03/image097.png?w=300&#038;h=262" alt="" width="300" height="262" srcset="https://epmqueen.files.wordpress.com/2017/03/image097.png?w=300&amp;h=262 300w, https://epmqueen.files.wordpress.com/2017/03/image097.png?w=150&amp;h=131 150w, https://epmqueen.files.wordpress.com/2017/03/image097.png 503w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Here are the OP numbers:</p> <p><a href="https://epmqueen.files.wordpress.com/2017/03/image098.png"><img data-attachment-id="1594" data-permalink="https://realtrigeek.com/2017/03/21/migrating-an-on-premises-essbase-cube-to-the-cloud/image098/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/image098.png" data-orig-size="552,449" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image098" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/image098.png?w=300&#038;h=244" data-large-file="https://epmqueen.files.wordpress.com/2017/03/image098.png?w=552" class="alignnone size-medium wp-image-1594" src="https://epmqueen.files.wordpress.com/2017/03/image098.png?w=300&#038;h=244" alt="" width="300" height="244" srcset="https://epmqueen.files.wordpress.com/2017/03/image098.png?w=300&amp;h=244 300w, https://epmqueen.files.wordpress.com/2017/03/image098.png?w=150&amp;h=122 150w, https://epmqueen.files.wordpress.com/2017/03/image098.png 552w" sizes="(max-width: 300px) 100vw, 300px" /></a></p> <p>Perfect! I just need to reset some of the consolidation settings for some members so that members don’t roll up where it doesn’t make sense (like Locality Percentage).</p> <p>Some takeaways:</p> <p>· The dbxtool does not export column headings that are necessary for importing a cube into the cloud. You will need to add these.</p> <p>· If you have a lot of data, you may need to load data outside of the data tab in the workbook. Using BI Data Sync is a great option, especially if loading XLSX, CSV, or database data.</p> <p>· Double check the work of the dbxtool! Just for sanity’s sake.</p> <p>· There are more than one way to load a new/update a cube. Pick which one you like best!</p> <p>· You can now use the cube like you would any OP cube with Smart View, BICS (OAC), and Data Visualization. I wrote a post last week on how to connect DV to Essbase data sources. The link is <a href="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/">here</a>.</p> <p>· The Typed Measures (Locality) did not come over in the migration. They were never exported with the dbxtool, so I did lose that in the process.</p> <p>If I had the workbook set up correctly for the dimensions and data, I probably could have done this process in about 30-45 minutes. Pretty quick, IMHO! Seeing the numbers tie on first try has given me confidence in the tool.</p> <p>Happy cube migrating!</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epmqueen.wordpress.com/1567/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/epmqueen.wordpress.com/1567/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=realtrigeek.com&#038;blog=70089387&#038;post=1567&#038;subd=epmqueen&#038;ref=&#038;feed=1" width="1" height="1" /> Sarah Craynon Zumbrum http://realtrigeek.com/?p=1567 Tue Mar 21 2017 11:15:24 GMT-0400 (EDT) Real World OBIEE: Demystification of Variables Pt. 2 http://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-2/ <p>In <a href="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-1/">part one</a> of this blog series, I went over using bins and presentation variables to dynamically create groups and switch between them in a report and on a dashboard. In part two, I am going to talk about making reports dynamic for periods of time using repository, system and presentation variables. Before I dive into an example, there are a couple of things I would like to cover first. </p> <p><strong>SYSDATE</strong></p> <p>The <em>sysdate</em> function returns the current datetime set by the system where the database resides. <em>Sysdate</em> is a really useful function for creating repository variables for use with date dimensions. If I go into SQL Developer, I can write a query to return the current <em>sysdate</em>:</p> <pre><code>select sysdate from dual;</code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-10.09.12-AM.png" alt=""></p> <p><strong>CURRENT_DATE</strong></p> <p>The <em>current_date</em> functions returns the current datetime set by the system where the bi server resides. This datetime may differ from sysdate depending on the geographical location of the database vs. the system that OBIEE resides on. I can write a query using sql developer to return the datetime using the <em>current_date</em> function:</p> <pre><code>select current_date from dual;</code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-10.32.54-AM.png" alt=""></p> <p>Since my database and OBIEE instance are on the same system, <em>sysdate</em> and <em>current_date</em> are the same. </p> <p><strong>TRUNCATE</strong></p> <p>When using <em>sysdate</em> or current_date to create repository variables for dates (which I am going to show in an upcoming example), you have to keep something in mind. While the date may match, the time may not. To show an example of this, I am going to join one of my date columns with sysdate.</p> <pre><code>select sysdate, dim_date_key from dual, gcbc_pef.dim_date where sysdate = dim_date_key;</code></pre> <p>If I run this query, I don't get an error but I get no results.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-10.48.59-AM.png" alt=""></p> <p>Why? To answer this, I need to write a query to inspect my date column.</p> <pre><code>select dim_date_key from gcbc_pef.dim_date;</code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-10.51.16-AM.png" alt=""></p> <p>As you can see by the results of my query, the <em>DIM_DATE_KEY</em> column does have the same format as sysdate but all the times are set to 00:00:00 (or midnight). To further demonstrate the difference between my date column and <em>sysdate</em>, I am going to write a new query and use the <em>TRUNC</em> (or <em>TRUNCATE</em>) function.</p> <pre><code>select sysdate, dim_date_key from dual, gcbc_pef.dim_date where trunc(sysdate) = dim_date_key;</code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-10.59.41-AM.png" alt=""></p> <p>As you can see, the query runs successfully but notice how <em>sysdate</em> and <em>DIM_DATE_KEY</em> still have different times. How is the join possible? Because I used the truncate function in the where clause in my query for <em>sysdate</em>. Without going into too much detail, using truncate on a date function without any formatting (which I will cover later) will set (or truncate) the datetime to the start (or midnight) of the current day. For example, if I run another query that just selects the truncated sysdate from dual, I get this result.</p> <pre><code>select trunc(sysdate) from dual;</code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-11.13.18-AM.png" alt=""></p> <p>Now, lets dive into an example.</p> <p><em>Note: For all of the examples in this blog series I am using OBIEE 12.2.1.2.0</em></p> <p><strong>The Scenario</strong></p> <p>In this example, I have been asked to create a report that is going to reside on a products dashboard. It needs to have the same product grouping as the report I used <a href="http://">part one</a> of this series, needs to contain Gross Rev $, Net Rev $ and # of Orders and have a prompt that can select between the first and current day of the month and every day in-between. The person who requested the report wants the prompt to change dynamically with each month and does not want users to be able to select future dates. </p> <p>There are two foreseeable challenges with this report. The first, and probably the most obvious, is how to make the date prompt for the current month and have it change dynamically with each month. The second is how to pass the dates into the report. </p> <p>There is one more challenge that I will have to tackle. There is a gap in the data loads for # of Orders. Data does not update until the 2nd or 3rd of each new month. This wouldn't be a big deal except the person who requested the report wants a summary of the previous months # of Orders to be shown until the data is updated for the current month. </p> <p>Fortunately, by using Repository, System and Presentation Variables, I can accomplish all of the requirements of this report. </p> <p><strong>The Example</strong></p> <p>For this example, I am going to start by creating Repository Variables to use with my date column in order to make the dates dynamic. There are other ways to make dates dynamic using functions within Answers but they are a little bit trickier to use and are less common. I am going to go over some of those functions in part three of this blog series.</p> <p>Repository Variables are created using the Admin Tool. By launching the Admin Tool and opening my RPD in online mode (can also be created offline), I can go to Manage > Variables to start creating my first Repository Variable.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-12.41.18-PM.png" alt=""></p> <p>From the Variable Manager window, I can create a Repository Variable by selecting Action > New > Repository > Variable.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-12.39.30-PM.png" alt=""></p> <p>I am going to start by creating the Repository Variable for the current date. Since this variable will be dynamic, I need to make sure I select the option 'Dynamic' and I am going to give it the name <em>USCurDate</em>. </p> <p>Now I need to create a new init block. I can do this by clicking <em>New...</em> </p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-27-at-3.52.34-PM.png" alt=""></p> <p>Once in the Repository Variable Initialization Block screen, I need to give the init block a name, set the schedule for when variable or variables will be refreshed then click <em>Edit Data Source</em> to define the connection pool the init block will use as well as the initialization string (query) the init block will use to populate the Repository Variable. </p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-27-at-3.54.57-PM.png" alt=""></p> <p>In the data source window, I am going to set my connection pool to one I have created just for my init blocks and then type in the following into the initialization string window:</p> <pre><code>select TRUNC(sysdate) from dual;</code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-27-at-3.55.35-PM.png" alt=""></p> <p>If I click <em>Test</em>, the query will execute and will return a result.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-12.36.25-PM.png" alt=""></p> <p>Notice how the result is the same as the query I ran using SQL Developer earlier.</p> <p>Now I need to create a Repository Variable for the first day of every month. I am going to use the same method as before and name it USMoBeginDate. The query I am going to use is slightly different from the previous query. I still need to use the <em>TRUNC</em> function but I also need to apply formatting so that it truncates to the start of the month. I am going to enter the following into the initialization string window: </p> <pre><code>select TRUNC(sysdate, 'MM') from dual;</code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-1.09.42-PM.png" alt=""></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-1.02.37-PM.png" alt=""></p> <p>Some other useful queries I can use are:</p> <p><strong>First Day of the Current Year</strong></p> <pre><code>select TRUNC(sysdate, 'YY') from dual;</code></pre> <p><strong>Last Day of the Previous Year</strong></p> <pre><code>select TRUNC(sysdate, 'YY') -1 from dual;</code></pre> <p><strong>Previous Year Date</strong></p> <pre><code>select TRUNC(ADD_MONTHS(sysdate, -12)) from dual;</code></pre> <p>Now I need to create a Repository Variable for the previous month to use with my # of Orders measure column. Upon inspection, I discover that the column I need to use is called <em>Calendar Year Month</em> and is a <em>VARCHAR</em> or character type. If I go into Answers and pull in the <em>Calendar Year Month</em> column, I can see the format is '<em>YYYYMM</em>'</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-1.30.01-PM.png" alt=""></p> <p>To create the Repository Variable, I am going to use the same method as with the current date and first day of the current month Repository Variables and issue a new query. Because the <em>Calendar Year Month</em> column is a VARCHAR, I need to use the <em>to_char</em> function to change sysdate from a date type to a character type, use some formatting syntax and use some basic arithmetic. The query is as follows:</p> <pre><code>select to_char(to_number(to_char(sysdate, 'YYYY')) * 100 + to_number(to_char(sysdate, 'MM') -1)) from dual;</code></pre> <p>To break down each part of this query, lets start with the year. In order to use the 'YYYY' format I must first cast sysdate to a character (<em>to_char(sysdate, 'YYYY'</em>)). Then I need to cast that result back to and int so that I can multiply by 100. This will give me the result 201500.00. The reason for this is when I add the month number to my <em>yearx100</em>, there will always be a leading 0 for month numbers 1-9. To get the previous month number, I have to first cast sysdate to a character and use the formatting 'MM'. I then have to cast it back to an int and subtract 1 to get the previous month number (<em>to_number(to_char(sysdate, 'MM') -1</em>) then cast the entire statment back to a character type so that it matches the type for the <em>Calendar Year Month</em> column. When I run the query, I get this result.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-2.00.59-PM.png" alt=""></p> <p>Now that I have my three repository variables (USCurDate, USMoBeginDate and Prev_Month) I can start to create the report.</p> <p>Im going to fast forward a little bit to the part of the report creation process where I will use my Repository Variables I created using the Admin Tool. Since I am using virtually the same report as <a href="http://">part one</a> of this blog series, please refer back for how to create custom groups using bins and presentation variables and custom value prompts. </p> <p>Because of the delay in the data load for the # of Orders at the beginning of the month, I can not use a global report filter. Instead, I am going to have to use something called a <em>Filter Expression</em> within each measure column formula. </p> <p><strong>About Filter Expressions</strong></p> <p>Unlike global report filters, column formula level filter expressions are used when you need to specify a particular constraint within the column formula itself. Because the filter is at the column formula level, it is independent of any subsequent column filters.</p> <p><em>Note: When using a column formula filter for a measure, you can not add a global filter of the same data subject on top of it. For example, if using a column level filter for a particular Year and Month, I can not add a global filter for a particular year. The two filters contradict each other and the result will be null</em>.</p> <p>To add a filter in the column formula, go to Edit formula, make sure the column syntax is highlighted and click Filter.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.13.32-PM.png" alt=""></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.14.02-PM.png" alt=""></p> <p>From here the Insert Filter window will pop up and I can select the attribute column to filter the measure by. Here, I want to use the column Day Date to filter Gross Rev $ by the day.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.16.22-PM.png" alt=""></p> <p>I can add a column by double clicking it in the the Subject Areas pane. When a column is added, I will be prompted with a New Filter window and from here, everything is exactly the same process as adding a global report filter. </p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.19.10-PM.png" alt=""></p> <p>Here I need to define the operator as is between since we are dealing with date ranges. I could call my Repository Variables for current_date and first day of the month here but, because the request is for a prompt to select between date ranges, I am going to have to call Presentation Variables and use the prompt to populate the actual values. </p> <p><em>Note: If you are unsure about the functionality of Presentation Variables, see <a href="http://">part one</a> of this blog series</em></p> <p>To add Presentation Variables to the filter expression, click Add More Options and select Presentation Variable from the dropdown. </p> <p><img src="https://www.rittmanmead.com/blog/2017/03/real-world-obiee-demystification-of-variables-pt-1/" alt=""></p> <p>When a Presentation Variable is added to the filter, two new text boxes appear. The Variable Expr box is where you define the variable to be used and the (default) box is used to add a default value. The default value is optional but, when defining a Presentation Variable within a filter, you have to specify a default value in order to get any results. The reason for this is because, when the report is run, the query issued will use the Presentation Variable placeholder that is defined unless a default value is specified. In other words, the default value will always be used unless the Presentation Variable is populated with a value or a list of values.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.28.31-PM.png" alt=""></p> <p>Because I want the users to be able to specify a date range, I need to define two Presentation Variables: one for the start date and one for the end date. I can add another place for a Presentation Variable by simply clicking Add More Options again and selecting Presentation Variable.</p> <p>Now I need to add both my start and end date Presentation Variables in the Variable Expr boxes. I’m going to call my start date presentation variable <em>pv_start_dt</em> and my end date presentation variable <em>pv_end_dt</em>. I am also going to specify a default date range from the beginning of the current month (10/01/2015) to yesterday's date (10/15/2015).</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.34.16-PM.png" alt=""></p> <p>If I click OK, I will be taken back to the Insert Filter screen where I can see the filter expression previously defined.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.34.59-PM.png" alt=""></p> <p>Clicking OK again will return me to Edit Column Formula which shows the column formula with the filter expression defined in the previous steps.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.35.10-PM.png" alt=""></p> <p>Now I have to do the exact same thing for the Net Rev $ column. Since the filter expression is identical, I can simply copy and paste the column formula for Gross Rev $ and replace the column name in the expression. </p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.39.24-PM.png" alt=""></p> <p>Now I need to take care of the # of Orders column. This column is tricky because of the gap between the 1st and the 2nd or 3rd of every month. I could use a filter expression that defaults to the previous month by using the previous month repository variable I created in a previous step, but this alone wouldn’t switch over when the data became available.</p> <p>So how can we fulfill the requirement of the report if we don’t know the exact date in which the data will be available? This can be accomplished by using a CASE statement as shown previously in <a href="http://">part one</a> of this series. We can break the Case statement down into two parts or two conditions:</p> <p><strong>1.</strong> When the day for the current month is less than or equal to 2 OR if # of Orders is null, then filter # of Orders by Calendar Year Month using the value of the <em>Prev_Month</em> Repository Variable. </p> <p><strong>2.</strong> When condition one is not true, then filter # of Orders by Day Date between the values of the <em>pv_start_date</em> and the <em>pv_end_date</em> Presentation Variables</p> <p>Putting both conditions together and using the correct syntax for Column Formula results in the following formula:</p> <pre><code>CASE WHEN DAY(CURRENT_DATE)<=2 or="" "sales="" -="" fact="" sales"."measures"."#="" of="" orders"="" is="" null="" then="" filter("sales="" using="" ("sales="" sales"."periods"."calendar="" year="" month"="VALUEOF("Prev_Month")))" else="" ("periods"."day="" date"="" between="" @{pv_start_dt}{date="" '2015-10-01'}="" and="" @{pv_end_dt}{date="" '2015-10-15'}))="" end="" <="" code=""></=2></code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.51.42-PM.png" alt=""></p> <p>Note that I am using <em>CURRENT_DATE</em> in my column formula. In this case, I am extracting the day number from the current date by using the extract day function (<em>DAY(CURRENT_DATE)</em>). I am going to talk about this in further detail when I talk about using built in functions in Answers to make reports dynamic in part 3 of this series.</p> <p>There is one problem with this, however. Because of the arithmetic I am using to put current year and current month together, there will be a problem when the month number is 01 for January. The function will subtract 1 from 01 and put the month number at 00 and not 12 of the previous year. I can solve this problem using a CASE statement to switch to another Repository Variable that returns the last month of the previous year when the month is equal to January.</p> <p>Going back to the Admin Tool, i'm going to create another Repository Variable and call it <em>PREV_YR_LAST_MO</em></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-30-at-2.09.34-PM.png" alt=""></p> <p>In the initialization string window, I am going to use this select statement:</p> <pre><code>select to_char(to_number(to_char(sysdate, 'YYYY')-1) * 100 + to_number(to_char(sysdate, 'MM') +11)) from dual;</code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-30-at-2.11.18-PM.png" alt=""></p> <p>Going back to my column formula, I need to insert a case statment to switch to my <em>PREV_YR_LAST_MO</em> <br> Repository Variable when <em>MONTH(CURRENT_DATE) = 1</em>.</p> <pre><code>CASE WHEN DAY(CURRENT_DATE)<=1 or="" "sales="" -="" fact="" sales"."measures"."#="" of="" orders"="" is="" null="" then="" filter("sales="" using="" ("sales="" sales"."periods"."calendar="" year="" month"="CASE" when="" month(current_date)="1" valueof("prev_yr_last_mo")="" else="" valueof("prev_month")end))="" ("periods"."day="" date"="" between="" @{pv_start_dt}{date="" '2015-10-01'}="" and="" @{pv_end_dt}{date="" '2015-10-15'}))="" end<="" code=""></=1></code></pre> <p>Now I need to create my dashboard prompt. I am going to start by clicking on New > Dashboard Prompt.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-3.58.29-PM.png" alt=""></p> <p>I need to create two prompts: One for the start date and one for the end date. Because I am using presentation variables as placeholders for the date between values, I have to use a Variable Prompt instead of a Column Prompt. Variable Prompts allow us to define a presentation variable and then define a list of values for the users to select from. </p> <p>To create a Variable Prompt for Start Date, I can click on the new prompt icon and select Variable Prompt.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.05.01-PM.png" alt=""></p> <p>There a few things I need to do in order to make this prompt function for the report. First, I have to define the same presentation variable name (<em>pv_start_dt</em>) that I used in the filter expressions for the Gross Rev $, Net Rev $ and # of Orders columns. </p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.07.57-PM.png" alt=""></p> <p>Because this is not a column prompt, I have to manually specify the values I want the user to be able to select from. Rather than typing in each value, I can use the SQL Results option from the Choice List Values dropdown and use a SQL statement to select the exact values that I want.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.09.23-PM.png" alt=""></p> <p>This may seem daunting at first but there is a very straightforward way to accomplish this. Rather than manually writing out a SQL query, we can make use of the Advanced Tab within a new report. </p> <p>I’m going to start by clicking New > Analysis and selecting the column that I want values for: Day Date.</p> <p>I need to add a filter to Day Date so that it returns only the values I want to user to select from.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.10.58-PM.png" alt=""></p> <p>Now I need to select the operator to be is between and add two Repository Variables that I have set up: one for the first date of the current month and one for the current date of the current month.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.32.01-PM.png" alt=""></p> <p>If I go to results, I can see the data returned with the filter I have specified.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.32.33-PM.png" alt=""></p> <p>As you can see, the Day Date column only contains the values from the first of the month to the current date (October, 16th 2015 in this example)</p> <p>Now for the good stuff. I can navigate to the Advanced Tab and copy the SQL statement used to generate these values and paste them into the SQL Results text box in my prompt.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.34.15-PM.png" alt=""></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.38.18-PM.png" alt=""></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.41.29-PM.png" alt=""></p> <p>You will notice that within the SQL Statement generated by OBI, <br> there are numbers and s_# between the SELECT and Day Date column, after the Day Date column and there is also an order by clause that uses a number “2”. Without going into too much detail, this what OBI uses to make the query more efficient when retrieving results from the database. In order to allow the values to populate the prompt, these have to be removed in OBIEE 12c and the “ORDER BY” clause has to be rewritten in order to make it work. </p> <p><strong>This</strong></p> <pre><code>SELECT 0 s_0, "Sales - Fact Sales"."Periods"."Day Date" s_1 FROM "Sales - Fact Sales" WHERE ("Periods"."Day Date" BETWEEN VALUEOF("USMoBeginDate") AND VALUEOF("USCurDate")) ORDER BY 2 ASC NULLS LAST FETCH FIRST 65001 ROWS ONLY</code></pre> <p><strong>Changed to this</strong></p> <pre><code>SELECT "Sales - Fact Sales"."Periods"."Day Date" FROM "Sales - Fact Sales" WHERE ("Periods"."Day Date" BETWEEN VALUEOF("USMoBeginDate") AND VALUEOF("USCurDate")) ORDER BY "Periods"."Day Date" ASC FETCH FIRST 65001 ROWS ONLY</code></pre> <p>This can be a bit confusing if you are not very familiar with SQL but just remember: </p> <p>When populating a prompt using an SQL statement in OBIEE 12c, take out any number and anything that begins with “s<em>” between the SELECT and first column and anything that begins with “s</em>” after any subsequent columns and make sure the “ORDER BY” clause contains the actual column name of the column you want to order by. </p> <p><em>Note: If you do not require any values to be in order, you can omit the “ORDER BY” clause all together</em>.</p> <p>If I expand Options in the Edit Prompt window, I can add a default selection or a default value that the prompt will start with. I can use the USMoBeginDate here as well so that the prompt always starts with the first date of every month as the start date.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.48.46-PM.png" alt=""></p> <p><em>Note: You will notice that under Options in the Edit Prompt window there is a Variable Data Type option with a dropdown selector. This can be used if the data type needs to be specified to something other than the default which is ‘text’ or character type. If you are getting an error when running the report that says “Selected value does not match datatype. Expected [this value] but got [this value]” you need to change the Variable Data Type to the datatype of the column you are prompting on. In this example, we are prompting a date datatype so therefore it needs to be set to date</em>.</p> <p>If I click OK, I can check the values in the display window by clicking the dropdown for the Start Date prompt I just created.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Screen-Shot-2017-03-01-at-9.30.08-AM.png" alt=""></p> <p>The blue checkmark indicates the value that is selected which, because the first date of every month was set by using the USMoBeginDate Repository Variable as the default value, defaults to the first date of the current month (October, 1st 2015) in this example. </p> <p>Now I need to create another Variable Prompt for the End Date. The SQL statement used for Start Date can be reused for the values as we want the exact same values to be available for selection. I am going to specify the presentation variable to be named pv<em>end</em>dt, and the default value to be the USCurDate Repository Variable so that the End Date prompt always defaults to the current date.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.53.31-PM.png" alt=""></p> <p>Now all that’s left to do is put the prompt and report on the Dashboard. Here is the result.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.55.02-PM.png" alt=""></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.55.19-PM.png" alt=""></p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/Screen-Shot-2017-02-28-at-4.55.39-PM.png" alt=""></p> <p>So that concludes part 2 of Demystification of Variables. Please feel free to ask questions or leave me a comment! In part 3, I am going to talk about using built in front end functions and presentation variables to make reports dynamic for any series of time. Until next time.</p> Matthew Walding abbfd7f4-021f-4763-8fa0-dbe4144fa644 Tue Mar 21 2017 10:00:00 GMT-0400 (EDT) Kscope17 Preview: Your Destination Awaits http://www.odtug.com/p/bl/et/blogaid=685&source=1 Kscope12, my very first Kscope and the one that shares this year's location, was a superbly unique event. In last year's ODTUG Cinco de Mayo #tbt Twitter party ("tbt" = "ThrowBack Thursday" for those of you who don't use Twitter), pictures from Kscope12 kept surfacing attached to fond memories... ODTUG http://www.odtug.com/p/bl/et/blogaid=685&source=1 Mon Mar 20 2017 11:09:55 GMT-0400 (EDT) March ODTUG News http://www.odtug.com/p/bl/et/blogaid=687&source=1 ODTUG celebrated its 20th birthday! The ODTUG News will keep you up to date on ODTUG Kscope17 updates, events, and sponsorship opportunities. Read more to learn about Meetups and events in your area, and mark your calendars for our upcoming March and April webinars. ODTUG http://www.odtug.com/p/bl/et/blogaid=687&source=1 Mon Mar 20 2017 11:04:27 GMT-0400 (EDT) A Performance Analytics Application Case Study: Challenges and Successes http://www.rittmanmead.com/blog/2017/03/a-performance-analytics-application-case-study-challenges-and-successes/ <p>The Performance Analytics application is a collection of open source technologies that aids users in: identifying performance bottlenecks, identifying causes for slow report execution, discovering areas for performance optimization, and gathering meaningful insights into the health of an OBIEE environment.</p> <p>This post focuses on lessons learned after a successful Performance Analytics application installation, where within one day of being operational it enabled us to identify and isolate a long-standing memory issue. Here's how.</p> <p><img src="https://www.rittmanmead.com/blog/content/images/2016/05/0784pad_ani_04.gif" width="95%" alt="OBIEE Performance Analytics Dashboards"></p> <h1 id="overview">Overview</h1> <p>Rittman Mead recently undertook an engagement with the remit to:</p> <ul> <li>Carry out a health check on the current state of an OBIEE platform, architecture, and development process</li> <li>Install the Rittman Mead Performance Analytics application, enabling rapid and accurate diagnostics of OBIEE issues</li> </ul> <p>The client was on OBIEE 11g, having previously upgraded from 10g. OBIEE Production environment was a three-node cluster running the latest version of the 11g release. It served around 150 users daily, of a registered user base of around 1000.</p> <p>The client had a long-standing issue with memory alerts on the master node of OBIEE cluster, but no evident architectural, hardware capacity, or software configuration issues were found after completing the health check.</p> <h1 id="challengesandsuccesses">Challenges and successes</h1> <h2 id="gatherallrelevantdata">Gather all relevant data</h2> <p>Performance Analytics gathers data from a variety of sources in order to provide a full stack view of the OBIEE environment.</p> <ul> <li><p><strong>Active Session History (ASH)</strong> - The Active Session History data is read from the v$ACTIVE_SESSION_HISTORY system database view. Access to this data allows Performance Analytics users to have an understanding of the performance and state of the database at a given point it time as it provides information such as the SQL operation being performed, which application is executing the query, whether the query is actively being performed or is waiting for service, what state of execution the query is in, and many other useful statistics.</p></li> <li><p><strong>Operating System Metrics</strong> - Unix-based Operating Systems contain several commands used to gather information about the performance or status of the server such as vmstat, iostat, netstat, top and df. Performance Analytics utilizes the output of these commands to display the current status of the OS at a given point in time.</p></li> <li><p><strong>Usage Tracking</strong> - The Oracle BI Server supports the collection of usage tracking data. When usage tracking is enabled, the Oracle BI Server collects usage tracking data for each query, and it writes statistics to a usage tracking log file or inserts them directly into a database table. Access to this data allows Performance Analytics users to have an understanding of the performance of the BI Server and specific reports in the OBIEE environment at any given point in time.</p></li> <li><p><strong>OBIEE metrics</strong> - OBIEE has the capability to expose internal performance data through the Dynamic Monitoring Service (DMS). The data exposed contains information such as Connection Pool statistics, JVM statistics, the number of active threads, and much more. Access to this data allows Performance Analytics to record the current status of many of the OBIEE components and intricacies found within the tool.</p></li> </ul> <p>Performance Analytics was deployed using Docker in a couple of days, requiring absolutely no software installation on any machine other than the monitoring server. All configuration settings are held in one file, and it was sufficient to add connection details of each server to it in order to gather all aforementioned data.</p> <h2 id="accuratelydiagnoseissues">Accurately diagnose issues</h2> <p>By combining operating system metrics (CPU, memory, etc.) with internal OBIEE metrics and those from the database, Performance Analytics gives a "single pane of glass" view on the behaviour of the whole stack. This enables correlations in behaviour to be easily identified, and issues drilled into using the analysis capabilities of the tool.</p> <p>Within a day of being installed, Performance Analytics enabled the client to accurately diagnose a long-standing issue with memory alerts on OBIEE master node. The cause was traced to the export to Excel of a large dataset by a single user.</p> <h2 id="workloadplanning">Workload Planning</h2> <p>Performance Analytics allows to capture system status and workload over time, so you can see how the system is responding to peak loads in real-time.</p> <p>With Performance Analytics the client is now able to estimate maximum workload the current architecture can support before starting to see issues and whether it is going to cope with the next years workload.</p> <h1 id="conclusion">Conclusion</h1> <blockquote> <p>Performance Analytics just paid for itself.</p> </blockquote> <p>Performance Analytics collects all relevant data and makes it accessible from one central location, allowing users to investigate performance inquiries promptly and simply. Instead of forcing users to dig through database records or a linux server manually, they can access all of the same data through a set of dashboards engineered to facilitate discovery from the collected data.</p> <p>If you’d like to find out more about the Performance Analytics service offered by Rittman Mead, please <a href="mailto:info+fvpa@rittmanmead.com">get in touch</a>.</p> Federico Venturin 838e85a9-b202-43f3-be36-6c94e899326a Mon Mar 20 2017 11:00:00 GMT-0400 (EDT) Oracle Analytics Cloud Release - Blog Hop Takeaways http://www.odtug.com/p/bl/et/blogaid=686&source=1 If you haven’t heard already, Oracle Analytics Cloud (OAC) is officially released! This includes the Essbase Cloud (EssCS), Business Intelligence Cloud (BICS), and Data Visualization Cloud (DVCS). Find out more here! ODTUG http://www.odtug.com/p/bl/et/blogaid=686&source=1 Fri Mar 17 2017 14:34:06 GMT-0400 (EDT) EssCS Command Line Scripts https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/ <p>Short and sweet post&#8230;a follow up will come later with more details!</p> <p>If you have played around with Essbase Cloud Service (EssCS) at all, you may have noticed a couple items on the Utilities tab. Specifically the &#8220;Export Utility&#8221; and the &#8220;Command Line Tool&#8221;.</p> <p><img data-attachment-id="1508" data-permalink="https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/1-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/110.png?w=840" data-orig-size="1715,373" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="1" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/110.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/110.png?w=840?w=840" class=" size-full wp-image-1508 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/110.png?w=840" alt="1" srcset="https://epmqueen.files.wordpress.com/2017/03/110.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/110.png?w=1680 1680w, https://epmqueen.files.wordpress.com/2017/03/110.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/110.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/110.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/110.png?w=1024 1024w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>I download these to see how they worked and hope to save you the time it took me to figure the scripts out!</p> <p><span style="text-decoration:underline;">Export Utility</span> &#8211; export an Essbase outline to an Excel-formatted book that can be uploaded to EssCS.</p> <p>When you download the Export Utility, it will download a zipped file named &#8220;dbxtool.zip&#8221;. I unzipped this to my C:\ directory and went exploring. The first place I stopped was the readme.txt to get some clarification on what to do to export the outline.</p> <p><img data-attachment-id="1518" data-permalink="https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/2-10/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/23.png?w=840" data-orig-size="1010,108" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/23.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/23.png?w=840?w=840" class=" size-full wp-image-1518 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/23.png?w=840" alt="2" srcset="https://epmqueen.files.wordpress.com/2017/03/23.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/23.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/23.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/23.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/23.png 1010w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>Well, that doesn&#8217;t help. And the Help guide didn&#8217;t help with this, either.</p> <p>So, I decided to open the export.bat in Notepad++ in the folder C:\dbxtool\dbxtool\bin</p> <p><img data-attachment-id="1523" data-permalink="https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/3-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/31.png?w=840" data-orig-size="1914,589" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="3" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/31.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/31.png?w=840?w=840" class=" size-full wp-image-1523 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/31.png?w=840" alt="3" srcset="https://epmqueen.files.wordpress.com/2017/03/31.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/31.png?w=1677 1677w, https://epmqueen.files.wordpress.com/2017/03/31.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/31.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/31.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/31.png?w=1024 1024w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>I see that it&#8217;s not a GUI, but, rather, and command line interface. I&#8217;ll try to open it via the command line (Run as Administrator).</p> <p>When I try to run &#8220;export.bat&#8221;, I am hit with my missing parameters. Progress!</p> <p><img data-attachment-id="1527" data-permalink="https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/4-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/41.png?w=840" data-orig-size="979,514" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="4" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/41.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/41.png?w=840?w=840" class=" size-full wp-image-1527 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/41.png?w=840" alt="4" srcset="https://epmqueen.files.wordpress.com/2017/03/41.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/41.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/41.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/41.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/41.png 979w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>So, if I am to run this export script successfully, it should look like the following:</p> <p><img data-attachment-id="1534" data-permalink="https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/5-10/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/52.png?w=840" data-orig-size="979,103" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="5" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/52.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/52.png?w=840?w=840" class=" size-full wp-image-1534 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/52.png?w=840" alt="5" srcset="https://epmqueen.files.wordpress.com/2017/03/52.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/52.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/52.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/52.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/52.png 979w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>export -server {servername}:1423 -application {appname} -cube {databasename} -data -user {username} -password {password} -path {exportpath}</p> <p>Note that &#8220;-data&#8221; will export all the data in the database and is NOT required!</p> <p>Because port 32776 is not open on my server, this will fail. &#8230;Which is why a follow up will come as soon as the port is open!</p> <p><img data-attachment-id="1540" data-permalink="https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/6-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/61.png?w=840" data-orig-size="979,212" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="6" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/61.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/61.png?w=840?w=840" class=" size-full wp-image-1540 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/61.png?w=840" alt="6" srcset="https://epmqueen.files.wordpress.com/2017/03/61.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/61.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/61.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/61.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/61.png 979w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>Now you know how to use the Export Utility!</p> <p><span style="text-decoration:underline;">Command Line Tool</span> &#8211; a way to interact with EssCS cubes via the command line.</p> <p>Unlike the Export Utility, the Command Line Tool (CLI) had a readme.txt that was helpful.</p> <p><img data-attachment-id="1548" data-permalink="https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/7-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/71.png?w=840" data-orig-size="1440,512" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="7" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/71.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/71.png?w=840?w=840" class=" size-full wp-image-1548 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/71.png?w=840" alt="7" srcset="https://epmqueen.files.wordpress.com/2017/03/71.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/71.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/71.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/71.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/71.png?w=1024 1024w, https://epmqueen.files.wordpress.com/2017/03/71.png 1440w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>The very (!) first thing you need to do is redirect your JAVA_HOME environment variable to jdk1.8 (you may need to download it first!). For another piece of software I use, I am required to use 1.7, so I needed to reset the JAVA_HOME from 1.7 to 1.8. And note it is JDK, not JRE! I made this mistake, please don&#8217;t you make it either!</p> <p>I was able to run this the same way I ran the Export Utility, via the command line as an administrator. Since the readme.txt was helpful, I got started on this tool right away. Again, I just wanted to see how it worked versus using it for real purposes (well, I guess logging in is real&#8230;). I can trust the readme.txt!</p> <p><img data-attachment-id="1553" data-permalink="https://realtrigeek.com/2017/03/17/esscs-command-line-scripts/8-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/81.png?w=840" data-orig-size="979,514" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="8" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/81.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/81.png?w=840?w=840" class=" size-full wp-image-1553 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/81.png?w=840" alt="8" srcset="https://epmqueen.files.wordpress.com/2017/03/81.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/81.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/81.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/81.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/81.png 979w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>From here you can do many things such as export/import an LCM file, build dimensions, load data, execute scripts&#8230;many things. Have a look!</p> <p>&nbsp;</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epmqueen.wordpress.com/1504/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/epmqueen.wordpress.com/1504/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=realtrigeek.com&#038;blog=70089387&#038;post=1504&#038;subd=epmqueen&#038;ref=&#038;feed=1" width="1" height="1" /> Sarah Craynon Zumbrum http://realtrigeek.com/?p=1504 Fri Mar 17 2017 08:30:05 GMT-0400 (EDT) Essbase/EssCS as a Data Source in Oracle Data Visualization https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/ <p><a href="https://cloud.oracle.com/en_US/paas" target="_blank">Oracle Analytics Cloud (OAC)</a> released today! There are many new and updated features to <a href="https://cloud.oracle.com/en_US/business_intelligence" target="_blank">Business Intelligence Cloud Service</a> and <a href="https://cloud.oracle.com/en_US/data-visualization" target="_blank">Data Visualization</a> as well as a new cloud service – <a href="https://cloud.oracle.com/en_US/essbase" target="_blank">Essbase Cloud Service</a> (EssCS)! There are quite a few people I have joined with today to help release OAC via a &#8220;blog hop&#8221; about the new service.</p> <p><em>If you want to learn more about OAC, check out the blog hop participant posts below! What is a blog hop? A blog hop is a group of bloggers who all get together to blog on a particular topic. We share each other&#8217;s blog posts in an attempt to share a lot of great information in one place. Enjoy!</em></p> <ul> <li><a href="https://womaninepm.com/2017/03/17/oac-series-finally-released">Opal Alapat</a>, interRel Consulting</li> <li><a href="http://redpillanalytics.com/introducing-oracle-analytics-cloud/">Stewart Bryson</a>, RedPill Analytics</li> <li><a href="http://integrationmadesimple.blogspot.com/2017/03/oac-metadata-management.html">Brian Dandeneau</a>, interRel Consulting</li> <li><a href="http://www.cubecoder.com/essbase-cloud-for-the-on-prem-crowd/">Tim German</a>, Qubix</li> <li><a href="http://camerons-blog-for-essbase-hackers.blogspot.com/2017/03/head-in-essbase-cloud-no-1-blessed-event.html">Cameron Lackpour</a>, ARC EPM Consulting</li> <li><a href="http://bimobilelabs.com/post/158496839700/OACMobileOptions">Matt Milella</a>, Oracle</li> <li><a href="http://glennschwartzbergs-essbase-blog.blogspot.com/2017/03/essbase-cloud-service-is-it-here-or.html">Glenn Schwartzberg</a>, interRel Consulting</li> <li><a href="https://epmsxsw.com/2017/03/17/you-down-with-oac-yeah-you-know-me">Summer Watson</a>, interRel Consulting</li> <li><a href="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization">Sarah Zumbrum</a>, Oracle</li> </ul> <p>Onto my part of the OAC blog hop release&#8230;</p> <p>My portion consists of establishing and using EssCS/Essbase as a data source in Oracle Data Visualization (DV). Note that the screenshots for DV look the same in the cloud as on Data Visualization Desktop. I’m using the cloud as my example today because it’s new!</p> <p>When you first log into OAC, you will be brought to the homepage. From here, you can go many places, but we are going to focus on creating a new Data Source then create visualizations on Essbase data sources.</p> <p><img data-attachment-id="1438" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/1-7/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/1.png?w=840" data-orig-size="1920,1080" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="1" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/1.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/1.png?w=840?w=840" class=" size-full wp-image-1438 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/1.png?w=840" alt="1" srcset="https://epmqueen.files.wordpress.com/2017/03/1.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/1.png?w=1680 1680w, https://epmqueen.files.wordpress.com/2017/03/1.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/1.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/1.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/1.png?w=1024 1024w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>To create EssCS (or Essbase) as a Data Source, click the “Data Source” icon.</p> <p><img data-attachment-id="1439" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/2-9/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/2.png?w=840" data-orig-size="517,121" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="2" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/2.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/2.png?w=840?w=517" class=" size-full wp-image-1439 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/2.png?w=840" alt="2" srcset="https://epmqueen.files.wordpress.com/2017/03/2.png 517w, https://epmqueen.files.wordpress.com/2017/03/2.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/2.png?w=300 300w" sizes="(max-width: 517px) 100vw, 517px" /></p> <p>You will see all data sources already established. These range from BI Subject Areas, to Excel Files, Database connections, Oracle Applications connections, Connections, and Data Flows.</p> <p>Click on “Connections”.</p> <p>When you do this, you will be shown a filter of the data sources that are connections.</p> <p><img data-attachment-id="1440" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/3-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/3.png?w=840" data-orig-size="291,617" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="3" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/3.png?w=840?w=141" data-large-file="https://epmqueen.files.wordpress.com/2017/03/3.png?w=840?w=291" class=" size-full wp-image-1440 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/3.png?w=840" alt="3" srcset="https://epmqueen.files.wordpress.com/2017/03/3.png 291w, https://epmqueen.files.wordpress.com/2017/03/3.png?w=71 71w" sizes="(max-width: 291px) 100vw, 291px" /></p> <p>To create a new connection, click “Connection” in the bottom left-hand side of the screen.</p> <p><img data-attachment-id="1441" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/4-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/4.png?w=840" data-orig-size="922,841" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="4" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/4.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/4.png?w=840?w=840" class=" size-full wp-image-1441 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/4.png?w=840" alt="4" srcset="https://epmqueen.files.wordpress.com/2017/03/4.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/4.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/4.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/4.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/4.png 922w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>Choose “Oracle Essbase (Beta)” as the connection type.</p> <p>Note: Although it shows the connection type as beta, Oracle is working to make this connection fully supported very soon!</p> <p><img data-attachment-id="1442" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/5-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/5.png?w=840" data-orig-size="704,493" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="5" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/5.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/5.png?w=840?w=704" class=" size-full wp-image-1442 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/5.png?w=840" alt="5" srcset="https://epmqueen.files.wordpress.com/2017/03/5.png 704w, https://epmqueen.files.wordpress.com/2017/03/5.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/5.png?w=300 300w" sizes="(max-width: 704px) 100vw, 704px" /></p> <p>Give your Essbase connection the following details:<br /> Name: Whatever you would like<br /> DSN: {server}:1423 if on-premises; {ipaddress/domain}:1423 if cloud<br /> Username/Password: self-explanatory<br /> Authentication: Choose if you want to use the same login info each time, or if you want the users to provide their own credentials.</p> <p>Why is this important (and really cool)? Say if you create a dashboard but only want certain departments to see their own data, but you don’t want to make 100 dashboards, you can utilize the row-based security in Essbase, Business Intelligence, the databases, etc to do the filtering for you. You end up making/maintaining one dashboard, not 100!</p> <p>For the sake of demonstration, I chose “Always use this username and password”.</p> <p><img data-attachment-id="1443" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/6-8/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/6.png?w=840" data-orig-size="705,494" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="6" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/6.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/6.png?w=840?w=705" class=" size-full wp-image-1443 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/6.png?w=840" alt="6" srcset="https://epmqueen.files.wordpress.com/2017/03/6.png 705w, https://epmqueen.files.wordpress.com/2017/03/6.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/6.png?w=300 300w" sizes="(max-width: 705px) 100vw, 705px" /></p> <p>After you click “Save”, you will get a visual confirmation that the connection has been added with the green box at the top of the screen and by seeing the connection now in the list.</p> <p><img data-attachment-id="1444" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/7-7/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/7.png?w=840" data-orig-size="969,422" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="7" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/7.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/7.png?w=840?w=840" class=" size-full wp-image-1444 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/7.png?w=840" alt="7" srcset="https://epmqueen.files.wordpress.com/2017/03/7.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/7.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/7.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/7.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/7.png 969w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>To create a data source off this new connection, when you hover over the connection name, you will see vertical ellipsis show. Click “Create New Data Source”.</p> <p><img data-attachment-id="1445" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/8-7/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/8.png?w=840" data-orig-size="786,392" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="8" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/8.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/8.png?w=840?w=786" class=" size-full wp-image-1445 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/8.png?w=840" alt="8" srcset="https://epmqueen.files.wordpress.com/2017/03/8.png 786w, https://epmqueen.files.wordpress.com/2017/03/8.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/8.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/8.png?w=768 768w" sizes="(max-width: 786px) 100vw, 786px" /></p> <p>You will be shown all of the Essbase applications and databases available for you to connect to in DV.</p> <p><img data-attachment-id="1446" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/9-6/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/9.png?w=840" data-orig-size="890,282" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="9" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/9.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/9.png?w=840?w=840" class=" size-full wp-image-1446 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/9.png?w=840" alt="9" srcset="https://epmqueen.files.wordpress.com/2017/03/9.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/9.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/9.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/9.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/9.png 890w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>I chose “Federal.Budget” for my example. Once the database is chosen, it will show in your “Databases” list.</p> <p><img data-attachment-id="1447" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/10-5/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/10.png?w=840" data-orig-size="807,371" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="10" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/10.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/10.png?w=840?w=807" class=" size-full wp-image-1447 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/10.png?w=840" alt="10" srcset="https://epmqueen.files.wordpress.com/2017/03/10.png 807w, https://epmqueen.files.wordpress.com/2017/03/10.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/10.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/10.png?w=768 768w" sizes="(max-width: 807px) 100vw, 807px" /></p> <p>From here, you can choose to create a Project (in DV) or Analysis (that can be used in BI). Choose Project and you are ready to go!</p> <p><img data-attachment-id="1448" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/11-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/11.png?w=840" data-orig-size="337,293" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="11" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/11.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/11.png?w=840?w=337" class=" size-full wp-image-1448 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/11.png?w=840" alt="11" srcset="https://epmqueen.files.wordpress.com/2017/03/11.png 337w, https://epmqueen.files.wordpress.com/2017/03/11.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/11.png?w=300 300w" sizes="(max-width: 337px) 100vw, 337px" /></p> <p>To show different ideas on data options, I’ve changed the Essbase database I’m connecting to for this blog post. In DV, if I click on the first icon on the left side of the screen (the data sources tab), I can right-click on my data source name and choose different options for that data source. I’m going to example “Inspect”.</p> <p><img data-attachment-id="1449" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/12-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/12.png?w=840" data-orig-size="287,245" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="12" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/12.png?w=840?w=287" data-large-file="https://epmqueen.files.wordpress.com/2017/03/12.png?w=840?w=287" class=" size-full wp-image-1449 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/12.png?w=840" alt="12" srcset="https://epmqueen.files.wordpress.com/2017/03/12.png 287w, https://epmqueen.files.wordpress.com/2017/03/12.png?w=150 150w" sizes="(max-width: 287px) 100vw, 287px" /></p> <p>On the “Inspect” tab, I see the details of the connections…</p> <p><img data-attachment-id="1450" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/13-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/13.png?w=840" data-orig-size="777,490" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="13" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/13.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/13.png?w=840?w=777" class=" size-full wp-image-1450 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/13.png?w=840" alt="13" srcset="https://epmqueen.files.wordpress.com/2017/03/13.png 777w, https://epmqueen.files.wordpress.com/2017/03/13.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/13.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/13.png?w=768 768w" sizes="(max-width: 777px) 100vw, 777px" /></p> <p>…As well as the permissions I can give the data source.</p> <p><img data-attachment-id="1451" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/14-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/14.png?w=840" data-orig-size="779,488" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="14" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/14.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/14.png?w=840?w=779" class=" size-full wp-image-1451 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/14.png?w=840" alt="14" srcset="https://epmqueen.files.wordpress.com/2017/03/14.png 779w, https://epmqueen.files.wordpress.com/2017/03/14.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/14.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/14.png?w=768 768w" sizes="(max-width: 779px) 100vw, 779px" /></p> <p>In the second tab on the left, we have our data elements (columns) that we can use in our visualizations.</p> <p>Notice the pound sign (not a hashtag, you millennials) and the A. The pound sign signifies that the data element is a numerical value. The A represents an attribute. Note that there is also a “clock” that signifies a date and/or time data element.</p> <p><img data-attachment-id="1452" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/15-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/15.png?w=840" data-orig-size="290,370" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="15" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/15.png?w=840?w=235" data-large-file="https://epmqueen.files.wordpress.com/2017/03/15.png?w=840?w=290" class=" size-full wp-image-1452 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/15.png?w=840" alt="15" srcset="https://epmqueen.files.wordpress.com/2017/03/15.png 290w, https://epmqueen.files.wordpress.com/2017/03/15.png?w=118 118w" sizes="(max-width: 290px) 100vw, 290px" /></p> <p>The third option in the list is where you can apply Advanced Analytics, if you would like. You can drag and drop these onto a canvas or right-click the option and choose “Add to visualization”. Simple enough!</p> <p><img data-attachment-id="1453" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/16-4/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/16.png?w=840" data-orig-size="316,240" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="16" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/16.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/16.png?w=840?w=316" class=" size-full wp-image-1453 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/16.png?w=840" alt="16" srcset="https://epmqueen.files.wordpress.com/2017/03/16.png 316w, https://epmqueen.files.wordpress.com/2017/03/16.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/16.png?w=300 300w" sizes="(max-width: 316px) 100vw, 316px" /></p> <p>Now we are in the fun place – the canvas. This is where the visualizations occur. To correspond to the numbers in the screenshot below:</p> <ol> <li>The blue box around a visualization is the one that is actively being built or modified.</li> <li>This visualization is a Pivot table. …This should look very familiar to Essbase users as it is how we are used to seeing data in Excel and Hyperion Financial Reports. You can change the visualization by clicking the down arrow next to the chosen visualization.</li> <li>As I mentioned before, you have visual cues to the data elemnts and the type of data they are stored as. DV helps you build visualizations by showing you where a numeric and attribute (or date/time) data element can be used in a visualization.</li> <li>The filter highlighted here is for a visualization filter. The filter will only apply to the selected visualization.</li> <li>You can have multiple tabs in a project. This project has three tabs with visualizations.</li> </ol> <p><img data-attachment-id="1454" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/17-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/17.png?w=840" data-orig-size="1917,973" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="17" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/17.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/17.png?w=840?w=840" class=" size-full wp-image-1454 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/17.png?w=840" alt="17" srcset="https://epmqueen.files.wordpress.com/2017/03/17.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/17.png?w=1680 1680w, https://epmqueen.files.wordpress.com/2017/03/17.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/17.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/17.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/17.png?w=1024 1024w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>A picture of the second tab to show you are not limited to pivot tables for Essbase data!</p> <p><img data-attachment-id="1455" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/18-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/18.png?w=840" data-orig-size="1917,977" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="18" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/18.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/18.png?w=840?w=840" class=" size-full wp-image-1455 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/18.png?w=840" alt="18" srcset="https://epmqueen.files.wordpress.com/2017/03/18.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/18.png?w=1680 1680w, https://epmqueen.files.wordpress.com/2017/03/18.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/18.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/18.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/18.png?w=1024 1024w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>I’ve changed the data source again (to Education_Salary)…this time to show you what a dimension with multiple generations looks like in the data elements pane. Also, there are some fun visualizations we can do with this data set.</p> <p>To correspond to the numbers in the following screenshot:</p> <ol> <li>Location dimension, 3 generations</li> <li>Filters applied to the entire project, not just a visualization.</li> </ol> <p><img data-attachment-id="1456" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/19-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/19.png?w=840" data-orig-size="1912,943" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="19" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/19.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/19.png?w=840?w=840" class=" size-full wp-image-1456 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/19.png?w=840" alt="19" srcset="https://epmqueen.files.wordpress.com/2017/03/19.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/19.png?w=1680 1680w, https://epmqueen.files.wordpress.com/2017/03/19.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/19.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/19.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/19.png?w=1024 1024w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>I have the option to drill to the next level of Essbase in DV. As an example, I have chosen all data points over a certain number (by clicking and dragging a rectangle around the values I want to see deeper) and right-clicked to show the shot the below.</p> <p><img data-attachment-id="1457" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/20-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/20.png?w=840" data-orig-size="312,414" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="20" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/20.png?w=840?w=226" data-large-file="https://epmqueen.files.wordpress.com/2017/03/20.png?w=840?w=312" class=" size-full wp-image-1457 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/20.png?w=840" alt="20" srcset="https://epmqueen.files.wordpress.com/2017/03/20.png 312w, https://epmqueen.files.wordpress.com/2017/03/20.png?w=113 113w, https://epmqueen.files.wordpress.com/2017/03/20.png?w=226 226w" sizes="(max-width: 312px) 100vw, 312px" /></p> <p>If I choose “Drill”, DV will show the hierarchy to select a dimension and generation to drill up or down into. For demo purposes, I’m choosing to go from Gen3, Location to Gen4, Location.</p> <p><img data-attachment-id="1458" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/21-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/21.png?w=840" data-orig-size="381,530" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="21" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/21.png?w=840?w=216" data-large-file="https://epmqueen.files.wordpress.com/2017/03/21.png?w=840?w=381" class=" size-full wp-image-1458 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/21.png?w=840" alt="21" srcset="https://epmqueen.files.wordpress.com/2017/03/21.png 381w, https://epmqueen.files.wordpress.com/2017/03/21.png?w=108 108w, https://epmqueen.files.wordpress.com/2017/03/21.png?w=216 216w" sizes="(max-width: 381px) 100vw, 381px" /></p> <p>Once I choose Gen4, Location, my canvas will refresh with the new criteria. To follow the numbering in the screenshot below:</p> <ol> <li>I have significantly fewer data points. Now, only the 4<sup>th</sup> generation members of Location for the 3<sup>rd</sup> generation members I highlighted previously.</li> <li>Notice that my Category item has changed from Gen3, Location to Gen4, Location.</li> <li>The 3<sup>rd</sup> generation members of Location I filtered on in the previous step are now in the project filters area.</li> </ol> <p><img data-attachment-id="1459" data-permalink="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/22-3/" data-orig-file="https://epmqueen.files.wordpress.com/2017/03/22.png?w=840" data-orig-size="1652,943" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="22" data-image-description="" data-medium-file="https://epmqueen.files.wordpress.com/2017/03/22.png?w=840?w=300" data-large-file="https://epmqueen.files.wordpress.com/2017/03/22.png?w=840?w=840" class=" size-full wp-image-1459 aligncenter" src="https://epmqueen.files.wordpress.com/2017/03/22.png?w=840" alt="22" srcset="https://epmqueen.files.wordpress.com/2017/03/22.png?w=840 840w, https://epmqueen.files.wordpress.com/2017/03/22.png?w=150 150w, https://epmqueen.files.wordpress.com/2017/03/22.png?w=300 300w, https://epmqueen.files.wordpress.com/2017/03/22.png?w=768 768w, https://epmqueen.files.wordpress.com/2017/03/22.png?w=1024 1024w, https://epmqueen.files.wordpress.com/2017/03/22.png 1652w" sizes="(max-width: 840px) 100vw, 840px" /></p> <p>Finally, I have put together a video to show you how building a project in DV is done with Essbase data.</p> <div id="v-ZrFlUYuN-1" class="video-player" style="width:840px;height:426px"> <embed id="v-ZrFlUYuN-1-video" src="https://v0.wordpress.com/player.swf?v=1.04&amp;guid=ZrFlUYuN&amp;isDynamicSeeking=true" type="application/x-shockwave-flash" width="840" height="426" title="Essbase_DV" wmode="direct" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true"></embed></div> <p>On a final note, you can access a trial cloud instance of OAC by going to <a href="http://cloud.oracle.com">http://cloud.oracle.com</a> and requesting a 30 day trial. It is under the PaaS portion of the webpage.</p> <p>Also, you can download Data Visualization Desktop from this <a href="http://www.oracle.com/technetwork/middleware/oracle-data-visualization/downloads/oracle-data-visualization-desktop-2938957.html">link</a>. You are not required to request a trial instance as it operates like an app on your phone, except on your computer. You are free to try it out for 30 days!</p> <p>Stay tuned as I plan to blog quite a bit over the next few weeks about OAC!</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epmqueen.wordpress.com/1433/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/epmqueen.wordpress.com/1433/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=realtrigeek.com&#038;blog=70089387&#038;post=1433&#038;subd=epmqueen&#038;ref=&#038;feed=1" width="1" height="1" /><div><a href="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization/"><img alt="Essbase_DV" src="https://videos.files.wordpress.com/ZrFlUYuN/essbase_dv_std.original.jpg" width="160" height="120" /></a></div> Sarah Craynon Zumbrum http://realtrigeek.com/?p=1433 Fri Mar 17 2017 08:00:29 GMT-0400 (EDT) A Funny Thing Happened on the Way to the Cloud… http://redpillanalytics.com/introducing-oracle-analytics-cloud/ <p><img width="300" height="199" src="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/ng-30950.jpg?fit=300%2C199" class="attachment-medium size-medium wp-post-image" alt="" srcset="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/ng-30950.jpg?w=4288 4288w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/ng-30950.jpg?resize=300%2C199 300w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/ng-30950.jpg?resize=768%2C510 768w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/ng-30950.jpg?resize=1024%2C680 1024w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/ng-30950.jpg?w=2340 2340w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/ng-30950.jpg?w=3510 3510w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="4695" data-permalink="http://redpillanalytics.com/introducing-oracle-analytics-cloud/ng-30950/" data-orig-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/ng-30950.jpg?fit=4288%2C2848" data-orig-size="4288,2848" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="ng-30950" data-image-description="" data-medium-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/ng-30950.jpg?fit=300%2C199" data-large-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/ng-30950.jpg?fit=1024%2C680" /></p><p><a href="https://cloud.oracle.com/analytics-cloud">Oracle Analytics Cloud (OAC)</a> is generally available (GA) today, and I&#8217;m excited to be included in this OAC blog hop welcome wagon. So I&#8217;m slumming it with a bunch of Essbase professionals, as you can see from the list of contributing authors below. It&#8217;s fascinating to see just how stoked the Essbase community is for this new service, and you&#8217;ll understand why by reading all the other posts linked below. So here&#8217;s the boilerplate content that I&#8217;m contractually obligated to include:</p> <p>&nbsp;</p> <div class="cols-wrapper cols-2 one3-two3"> <div class="col"> <p><i id="yui_3_16_0_ym19_1_1489713317132_7156">If you want to learn more about OAC, check out the blog hop participant posts below! </i><i id="yui_3_16_0_ym19_1_1489713317132_7156">What is a blog hop? A blog hop is a group of bloggers who all get together to blog on a particular topic. We share each other&#8217;s blog posts in an attempt to share a lot of great information in one place. Enjoy!</i></p> </div> <div class="col nomargin"> <ul> <li id="yui_3_16_0_ym19_1_1489713317132_6510"><span id="yui_3_16_0_ym19_1_1489713317132_6511"><a id="yui_3_16_0_ym19_1_1489713317132_6512" href="https://womaninepm.com/2017/03/17/oac-series-finally-released">Opal Alapat</a>, interRel Consulting<br id="yui_3_16_0_ym19_1_1489713317132_6513" /></span></li> <li id="yui_3_16_0_ym19_1_1489713317132_6518"><span id="yui_3_16_0_ym19_1_1489713317132_6519"><a id="yui_3_16_0_ym19_1_1489713317132_6520" href="http://redpillanalytics.com/introducing-oracle-analytics-cloud/">Stewart Bryson</a>, Red Pill Analytics</span></li> <li id="yui_3_16_0_ym19_1_1489713317132_6518"><span id="yui_3_16_0_ym19_1_1489713317132_7511"><a id="yui_3_16_0_ym19_1_1489713317132_7512" href="http://integrationmadesimple.blogspot.com/2017/03/oac-metadata-management.html">Brian Dandeneau</a>, interRel Consulting</span></li> <li id="yui_3_16_0_ym19_1_1489713317132_6522"><span id="yui_3_16_0_ym19_1_1489713317132_6523"><a id="yui_3_16_0_ym19_1_1489713317132_6524" href="http://www.cubecoder.com/essbase-cloud-for-the-on-prem-crowd/">Tim German</a>, Qubix<br id="yui_3_16_0_ym19_1_1489713317132_6525" /></span></li> <li id="yui_3_16_0_ym19_1_1489713317132_6526"><span id="yui_3_16_0_ym19_1_1489713317132_6527"><a id="yui_3_16_0_ym19_1_1489713317132_6528" href="http://camerons-blog-for-essbase-hackers.blogspot.com/2017/03/head-in-essbase-cloud-no-1-blessed-event.html">Cameron Lackpour</a>, ARC EPM Consulting<br id="yui_3_16_0_ym19_1_1489713317132_6529" /></span></li> <li id="yui_3_16_0_ym19_1_1489713317132_6530"><a id="yui_3_16_0_ym19_1_1489713317132_6531" href="http://bimobilelabs.com/post/158496839700/OACMobileOptions">Matt Milella</a>, Oracle</li> <li id="yui_3_16_0_ym19_1_1489713317132_6533"><a id="yui_3_16_0_ym19_1_1489713317132_6534" href="http://glennschwartzbergs-essbase-blog.blogspot.com/2017/03/essbase-cloud-service-is-it-here-or.html">Glenn Schwartzberg</a>, interRel Consulting</li> <li id="yui_3_16_0_ym19_1_1489713317132_6536"><span id="yui_3_16_0_ym19_1_1489713317132_6537"><a id="yui_3_16_0_ym19_1_1489713317132_6538" href="https://epmsxsw.com/2017/03/17/you-down-with-oac-yeah-you-know-me">Summer Watson</a>, interRel Consulting<br id="yui_3_16_0_ym19_1_1489713317132_6539" /></span></li> <li id="yui_3_16_0_ym19_1_1489713317132_6608"><span id="yui_3_16_0_ym19_1_1489713317132_6540"><a id="yui_3_16_0_ym19_1_1489713317132_6541" href="https://realtrigeek.com/2017/03/17/essbase-as-a-data-source-in-oracle-data-visualization">Sarah Zumbrum</a>, Oracle</span></li> </ul> </div> </div> <div id="yiv3945440321"> <div id="yui_3_16_0_ym19_1_1489713317132_6169"> <div id="yui_3_16_0_ym19_1_1489713317132_6168"> <h1>Is This Different?</h1> </div> </div> </div> <p>Some of you are probably confused by a new Analytics Cloud service from Oracle because we already have the <a href="https://cloud.oracle.com/business_intelligence">BI Cloud Service</a> (BICS). Well&#8230; a funny thing happened on the way to the Cloud.</p> <p>Full disclosure here: I&#8217;m an Oracle ACE Director, and am privy to certain product roadmap details before their public release, not just about Oracle BI and DI products, but all Oracle products. And though what I&#8217;m about to tell you is tempered with fact, I&#8217;m going to muddle the conversation a bit with some opinion about how we got to where we are.</p> <h1>Dogfooding</h1> <div id="attachment_4701" style="width: 1034px" class="wp-caption aligncenter"><img data-attachment-id="4701" data-permalink="http://redpillanalytics.com/introducing-oracle-analytics-cloud/obiee-12c-and-the-leap-forward-in-lifecycle-management-026/" data-orig-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/OBIEE-12c-and-the-Leap-Forward-in-Lifecycle-Management.026.jpeg?fit=1280%2C720" data-orig-size="1280,720" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="For the first time ever, Oracle had to run their own products" data-image-description="" data-medium-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/OBIEE-12c-and-the-Leap-Forward-in-Lifecycle-Management.026.jpeg?fit=300%2C169" data-large-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/OBIEE-12c-and-the-Leap-Forward-in-Lifecycle-Management.026.jpeg?fit=1024%2C576" class="wp-image-4701 size-large" src="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/OBIEE-12c-and-the-Leap-Forward-in-Lifecycle-Management.026.jpeg?resize=1024%2C576" alt="" srcset="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/OBIEE-12c-and-the-Leap-Forward-in-Lifecycle-Management.026.jpeg?resize=1024%2C576 1024w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/OBIEE-12c-and-the-Leap-Forward-in-Lifecycle-Management.026.jpeg?resize=300%2C169 300w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/OBIEE-12c-and-the-Leap-Forward-in-Lifecycle-Management.026.jpeg?resize=768%2C432 768w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/OBIEE-12c-and-the-Leap-Forward-in-Lifecycle-Management.026.jpeg?w=1280 1280w" sizes="(max-width: 1024px) 100vw, 1024px" data-recalc-dims="1" /><p class="wp-caption-text">Oracle had to run their own products in the Cloud</p></div> <p>&nbsp;</p> <p>Back in September of 2014, Oracle announced the Business Intelligence Cloud Service, and Product Management learned straight away that OBIEE 11g, which served as the initial code base for BI Cloud Service, was, well&#8230; challenging. Sure, when it was married to a single, static server&#8211;or even a group of servers when clustered&#8211;it was predictable, if not completely over-engineered. I used to joke with <a href="https://medium.com/mark-rittman">Mark Rittman</a> in the early days that we would avoid restarting OBIEE at almost any cost because it was effectively a coin toss whether it would come back up. There were several aspects of the stack that ran counter to Cloud architecture, including the Oracle Instance, OPMN, the BISystemUser, and those wonderful security GUIDS. So Oracle rolled up their sleeves and went to work, simplifying the BICS architecture, producing fantastic features such as the BAR File (still Snapshots in BICS), the Service Instance, and of course Oracle Data Visualization.</p> <p>During this time, development of the on-premises product Oracle Business Intelligence 12c was underway. The momentum behind simplified architecture and rapid provisioning continued, and the maiden release of OBIEE 12c was rock solid, with an improved upgrade experience coupled with the <a href="http://www.oracle.com/technetwork/middleware/bi/downloads/bi-bvt-download-3587672.html">Baseline Validation Tool</a> (BVT) that meant analytics bliss for all of Oracle&#8217;s on-premises customers.</p> <h1>Oracle Analytics Cloud&#8230; I&#8217;m Getting to That</h1> <p>While the impressive features of OBIEE 12c are rooted in the previous Cloud offering, including Service Instances and Data Visualization, BICS today is still very much OBIEE 11g. You can think of it as a weird sort of hybrid of the basic 11g architecture with a bunch of cool things from 12c bolted on. So what is Oracle Analytics Cloud? It&#8217;s a brand new analytics Cloud service built from the ground up using OBIEE 12c, providing the wider breadth of capabilities we expect from Oracle&#8217;s on-premises products, including the latest capabilities from Data Visualization, and some impressive Essbase features as well (see several of the linked blog posts above for more on Essbase in the Cloud). The pre-release version of the product I&#8217;m using to write this blog has a version number of 12.2.2.0.0 and change&#8230; we&#8217;ll see if that matches when we get our hands on the real thing.</p> <h1>Data Visualization</h1> <p>The first thing we notice right away with Oracle Analytics Cloud is the bleeding-edge version of Oracle Data Visualization. Previously, to see this functionality from DV, we would have to download Data Visualization Desktop (DVD), or maybe just cut out the middle-person and watch the incredible <a href="http://redpillanalytics.com/dataviz-daily/">Data Viz Daily</a> from guru <a href="https://twitter.com/kevin_mcginley">Kevin McGinley</a>. OAC provides access to all the modern data sources that DVD hooked us on&#8211;like Amazon EMR, MapR, MongoDB and Informix (that last one is there to make sure you are paying attention)&#8211;but we also have Data Flows, and the incredibly useful Summarization screen.</p> <p><img data-attachment-id="4711" data-permalink="http://redpillanalytics.com/introducing-oracle-analytics-cloud/screen-shot-2017-03-17-at-2-17-12-am/" data-orig-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.17.12-AM.png?fit=2417%2C1863" data-orig-size="2417,1863" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Screen Shot 2017-03-17 at 2.17.12 AM" data-image-description="" data-medium-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.17.12-AM.png?fit=300%2C231" data-large-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.17.12-AM.png?fit=1024%2C789" class="aligncenter wp-image-4711 size-large" src="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.17.12-AM.png?resize=1024%2C789" alt="Data Viz Summary" srcset="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.17.12-AM.png?resize=1024%2C789 1024w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.17.12-AM.png?resize=300%2C231 300w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.17.12-AM.png?resize=768%2C592 768w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.17.12-AM.png?w=2340 2340w" sizes="(max-width: 1024px) 100vw, 1024px" data-recalc-dims="1" /></p> <h1>Metadata</h1> <p>Conceptually, the Semantic Model has lost its luster in the eyes of many. There&#8217;s still a need for metadata, but we&#8217;ve seen the severity of that need register all across the spectrum in recent years. While the lightweight modeling available in Data Visualization satisfies the simplest of requirements, it&#8217;s not long before we run out of runway and need more capabilities. BICS gave us two options for surfacing metadata: the &#8220;thin modeler,&#8221; a browser-based solution providing enhanced capabilities from what&#8217;s available alone in Data Visualization, and the full-on Business Model and Mapping layer, which we could only get by developing our repository offline in the Admin Tool, and uploading to BICS.</p> <p>Oracle Analytics Cloud gives us these same choices. Perhaps my biggest surprise when working with the pre-release version was the existence of the thin modeler; not because it doesn&#8217;t make sense, but my expectation was the initial release would be more &#8220;OBIEE 12c&#8221; than &#8220;BICS.&#8221; One of the first things I plan to investigate when we provision OAC proper is whether the <a href="http://redpillanalytics.com/groovy-web-services-and-obiee-12c/">Lifecycle REST API</a> exists and whether we can use <strong>data-model.(cmd|sh)</strong> to deploy repositories.</p> <div id="attachment_4731" style="width: 1034px" class="wp-caption aligncenter"><img data-attachment-id="4731" data-permalink="http://redpillanalytics.com/introducing-oracle-analytics-cloud/screen-shot-2017-03-17-at-2-41-26-am/" data-orig-file="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.41.26-AM.png?fit=2285%2C1269" data-orig-size="2285,1269" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="The &#8220;Thin Modeler&#8221;" data-image-description="" data-medium-file="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.41.26-AM.png?fit=300%2C167" data-large-file="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.41.26-AM.png?fit=1024%2C569" class="wp-image-4731 size-large" src="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.41.26-AM.png?resize=1024%2C569" alt="" srcset="https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.41.26-AM.png?resize=1024%2C569 1024w, https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.41.26-AM.png?resize=300%2C167 300w, https://i2.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/Screen-Shot-2017-03-17-at-2.41.26-AM.png?resize=768%2C427 768w" sizes="(max-width: 1024px) 100vw, 1024px" data-recalc-dims="1" /><p class="wp-caption-text">The &#8220;thin modeler&#8221; is still around. Whoa&#8230; heavy.</p></div> <p>&nbsp;</p> <h1>Conclusion</h1> <p>The pre-release version we&#8217;ve had access to is far from the full-blown product. I couldn&#8217;t get to any of the provisioning screens, and the provisioning of services whether by screen or API represents significant ROI with Cloud deployments. I also didn&#8217;t have access to the backend of the service, so I&#8217;m not yet clear on what development workflows will look like, or how we might structure promotions from Dev to Test to Prod. The BAR file is the future, but it&#8217;s still quirky in OBIEE 12c, and we&#8217;ll need to see whether 12.2.2 provides relief from the quirks. Keep an eye out on this blog, and the blogs of all the other participants in the coming weeks and months for a more wholistic treatment of the future of Oracle analytics.</p> Stewart Bryson http://redpillanalytics.com/?p=4691 Fri Mar 17 2017 05:27:30 GMT-0400 (EDT) Supporting Font Encoders on 11g and 12c https://blogs.oracle.com/xmlpublisher/entry/supporting_font_encoders_on_11g <p>We had a couple of requests for some help this past week with customers' custom font encoders. With 11g/12c BIP its not straightforward to embed your code with the BIP code. In fact; its really simple but it took me a while and some trial and error to get the encoder classes to the right spot and in the right format so that BIP could 'see' and use them.</p> <p>In 11g/12c the BIP application is exploded out under the servers below the DOMAIN_HOME, in my 11.1.1.7.x install thats ./oracle/BI/user_projects/domains/bifoundation_domain/servers/AdminServer/tmp/_WL_user/bipublisher_11.1.1/6uc731</p> <p>Under the last directory (which will be different for you) will be a lib directory. Thats where your encoder classes need to sit wrapped in a jar file. Its not the best place to have them as upgrades to the code line may not preserve them but its the only place I found where the classes get loaded that BIP can access the encoder. There are other more standard places under the WLS server but BIP can not access the class and the encoder is not reached.</p> <p>Just to lay out some of the things I have found out during this investigation:</p> <p>1. When you compile your class make sure the target java version is appropriate. For the 11.1.1.7.x codeline the version needs to be 1.6. For 12g, its 1.8. If you dont do this, you'll get errors when calling the class.</p> <p>2. You need to wrap your class up in a jar file. If you use JDeveloper, you can create a deployment profile that will build the jar for you. Its then a case of copying it into the appropriate directory.</p> <p>3. Make sure your RTF barcode register field command matches the 'package' line in your class. In my class I have:</p> <pre>package <span style="color: rgb(0, 3, 255);">xx.bip.fonts</span>;</pre> <p>So my template command is:</p> <pre>&nbsp;&lt;?register-barcode-vendor:'<span style="color: rgb(0, 3, 255);">xx.bip.fonts</span>.BarcodeUtil';'xxBarVendor'?&gt;</pre> <p>make sure they match.</p> <p>4. In the encode command in the template. Make sure the encoding routine you want to use case matches the one in your encoding class.<br />In my class:</p> <p> </p> <pre>ENCODERS.put("pdf417", mUtility.getClass().getMethod("<span style="color: rgb(0, 3, 255);">pdf417</span>", arrayOfClass));</pre> <p>In my RTF template:</p> <pre>&lt;?format-barcode:TRANSACTION_NUMBER;'<span style="color: rgb(0, 3, 255);">pdf417</span>';'xxBarVendor'?&gt;</pre> <p>5. When you are testing the RTF template on the server. Forget the barcode font for now and use a clear text font. That way you can make sure the encoder is being called. Once you are happy. Just update the template with the barcode font you need. <br /></p> <p>6. When JDeveloper creates the jar file it will create the directory structure that matches your package path in the jar.</p> <p>With all of the steps followed above. You are now ready to deploy the jar file into the server. Depending on how you have configured your server it is going to influence the location of the jar file. On my server, I have a simple install with just an Admin server. You may have multiple managed servers. The jar file will need to reside in all locations for the BIP server to find it.</p> <p>On my 11g server, I copied the jar file to:</p> <p>user_projects/domains/bifoundation_domain/servers/AdminServer/tmp/_WL_user/bipublisher_11.1.1/6uc731/lib</p> <p>On my 12c server:</p> <p>user_projects/domains/bifoundation_domain/servers/bi_server1/tmp/_WL_user/bipublisher_11.1.1/f45tyd/lib</p> <p>Once copied, you need to bounce the WLS server to get the class loaded. You will then be able to see the encoder at work in the output.</p> <p> Make a post upgrade note for yourself and others to ensure, that after a patch application. You check that the encoder jar is still present in the above directories. It'll save some head scratching later :0)</p> <p>Here are my files from testing the solution on 11g.7.x and 12c </p> <p> </p> <ul> <li> My JDeveloper project - <a href="https://blogs.oracle.com/xmlpublisher/resource/BIPFonts.zip">BIPFonts.zip</a> </li> <li> My jar file - <a href="https://blogs.oracle.com/xmlpublisher/resource/bipfontsupport.zip">bipfontsupport.zip</a> </li> </ul> <p>Update: we have had a couple of customers get through this now and they have helpfully noted a couple of points that helped them out.</p> <p>1.&nbsp; When moving from 10g to 11g or 12c. On compiling&nbsp; the custom class For example, from 10G to 11G, the location of XDOBarcodeEncoder changes from oracle.apps.xdo.template.rtf.util to <a href="http://oracle.xdo.template.rtf.util">oracle.xdo.template.rtf.util.</a>&nbsp; so you will need to update your class to reflect the new import location.<br />2. A reference to &quot;<a href="https://docs.oracle.com/cd/E28280_01/bi.1111/e22259/title.htm" target="_blank">Oracle® Fusion Middleware Developer's Guide for Oracle Business Intelligence Publisher 11g Release 1</a> (11.1.1) E22259-04 <br />&nbsp;&nbsp;&nbsp; Section 7.13, &quot;Advanced Barcode Formatting&quot; It provides an example of source code for a custom class.<br />and for 12c - <a href="http://docs.oracle.com/middleware/12212/bip/BIPRD/GUID-A229808F-D2F6-458E-8E52-9E7FA156FF0E.htm#BIPRD2354" target="_blank">Fusion Middleware Report Designer's Guide for Oracle Business Intelligence Publisher</a><br /></p> Tim Dexter-Oracle https://blogs.oracle.com/xmlpublisher/entry/supporting_font_encoders_on_11g Wed Mar 15 2017 17:55:32 GMT-0400 (EDT) ODTUG Turns 20 http://www.odtug.com/p/bl/et/blogaid=684&source=1 ODTUG Turns 20On March 13, 2017, ODTUG celebrated its 20th birthday! Yes, there’s been a lot of changes over the years, but one thing remains the same: ODTUG’s commitment to keeping you on the cutting-edge of the constantly changing Oracle technology landscape. Check out these highlights: ODTUG http://www.odtug.com/p/bl/et/blogaid=684&source=1 Wed Mar 15 2017 09:32:08 GMT-0400 (EDT) Scripts to use Agents in OBIEE 12c: mass enabling and execution from a page https://gianniceresa.com/2017/03/scripts-to-use-agents-in-obiee-12c-mass-enabling-and-execution-from-a-page/ <p>Few days ago I wrote about <a href="https://gianniceresa.com/2017/03/obiee-12c-agents-enable-them-by-code/" target="_blank">Agents in OBIEE 12c</a> and how it was possible to enable them by script, automating that part of the process which was still manual.<br /> This time I&#8217;m going to write about 2 examples of how I used my findings about Agents, providing the code as download so you can use it in just few seconds.</p> <h3>Two use cases as example</h3> <p>Today I&#8217;m going to cover two possible needs with Agents, one mainly for upgrades or code promotion between environments and the second to provide a functionality to the consumers of your OBIEE dashboards and analysis.</p> <ul> <li>Execute an agent from a dashboard page / analysis</li> <li>Mass enabling in one step of Agents</li> </ul> <p><em>(Code is provided, feel free to look at it and adapt or use it as you want)</em></p> <blockquote><p>All the tests and analysis have been done on OBIEE 12.2.1.2.0.<br /> The libraries are probably the same for the previous OBIEE 12c releases and will also work, with some little adjustments for OBIEE 11g (11.1.1.7, 11.1.1.9) as the main javascript libraries are the same.</p> <p>Keep in mind jQuery wasn&#8217;t there in OBIEE 11g, so that&#8217;s the main change required.</p></blockquote> <h3>Mass enabling of Agents in one step</h3> <p>In a running prod OBIEE you can easily have tens or hundreds of Agents: nothing bad with this, they provide functionalities for the consumers. But what happen when you upgrade your old PROD OBIEE 11g to OBIEE 12c? What happen to the Agents?</p> <p>Well &#8230; the Agents end up on the new system but &#8230; all disabled ! Now have fun going through the full catalog, finding out which Agents must be enabled and enable them again one by one, by hand.<br /> Not funny at all without forgetting the risk of missing some and have your consumers complaining your upgrade is actually a regression.</p> <p>Stop fearing your next upgrade, you can enable all your Agents with few clicks from a single page.</p> <div id="attachment_390" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_manage_agents_page.png"><img class="size-large wp-image-390" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_manage_agents_page-1024x501.png" alt="" width="1024" height="501" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_manage_agents_page-1024x501.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_manage_agents_page-300x147.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_manage_agents_page-768x376.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_manage_agents_page-1080x528.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_manage_agents_page.png 1259w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">Mass enabling Agents from an OBIEE dashboard page</p></div> <p>As seen in <a href="https://gianniceresa.com/2017/03/obiee-12c-agents-enable-them-by-code/" target="_blank">previous</a> post the OBIEE front-end catalog page uses a lot of javascript to interact with Agents, to enable them. So I put together some javascript code to use these OBIEE libraries to make my (and your) life easier.</p> <p><strong><a href="https://gianniceresa.com/wp-content/uploads/2017/03/Manage-Agents.zip" target="_blank">Download the OBIEE catalog archive with the dashboard and code</a></strong></p> <p>The process to deploy and use this dashboard page is really simple:</p> <ol> <li>In your OBIEE instance go in the Catalog and create a new empty folder (to avoid issues in case you have a dashboard with the same exact name of the one in the file already). Can be your personal folder or the shared folder, works in both places, the path doesn&#8217;t matter.</li> <li><a href="https://gianniceresa.com/wp-content/uploads/2017/03/Manage-Agents.zip" target="_blank">Download the file</a> (a catalog archive) and unarchive (first unzip, then OBIEE unarchive) inside the newly create folder. <div id="attachment_396" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_unarchive_file.png"><img class="wp-image-396 size-large" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_unarchive_file-1024x787.png" alt="" width="1024" height="787" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_unarchive_file-1024x787.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_unarchive_file-300x230.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_unarchive_file-768x590.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_unarchive_file-1080x830.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_unarchive_file.png 1259w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">In a empty folder (to avoid issues) unarchive the file</p></div> <p>&nbsp;</li> <li>Open the imported dashboard named &#8220;Manage Agents&#8221; <div id="attachment_395" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_open_imported_dashboard.png"><img class="size-large wp-image-395" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_open_imported_dashboard-1024x480.png" alt="" width="1024" height="480" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_open_imported_dashboard-1024x480.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_open_imported_dashboard-300x141.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_open_imported_dashboard-768x360.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_open_imported_dashboard-1080x506.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_open_imported_dashboard.png 1259w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">Open the imported dashboard to see the page managing Agents</p></div> <p>&nbsp;</li> <li>When the page open, it searches the Agents in the catalog and display a list of them (can take some seconds if you have lot of them) <p><div id="attachment_392" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_mass_enabling_page.png"><img class="size-large wp-image-392" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_mass_enabling_page-1024x500.png" alt="" width="1024" height="500" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_mass_enabling_page-1024x500.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_mass_enabling_page-300x147.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_mass_enabling_page-768x375.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_mass_enabling_page-1080x528.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_mass_enabling_page.png 1259w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">A list of all the Agents found in the catalog.</p></div></li> <li>Select the Agents you want to enable (or all of them using the &#8220;check all&#8221; link) and click the button. If you are sure confirm. <p><div id="attachment_391" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_enabling_process.png"><img class="size-large wp-image-391" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_enabling_process-1024x500.png" alt="" width="1024" height="500" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_enabling_process-1024x500.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_enabling_process-300x147.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_enabling_process-768x375.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_enabling_process-1080x528.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_enabling_process.png 1259w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">Select Agents from the list (or all with the &#8220;check all&#8221; link), click the &#8220;Enable selected agents&#8221; button and if you are sure confirm.</p></div></li> <li>The javascript OBIEE libraries are doing the work now, the logs show you what&#8217;s happening in the background. Once done the list of Agents is reloaded with the new status (if enabled the checkbox isn&#8217;t active anymore). <p><div id="attachment_393" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_result_logs.png"><img class="size-large wp-image-393" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_result_logs-1024x500.png" alt="" width="1024" height="500" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_result_logs-1024x500.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_result_logs-300x147.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_result_logs-768x375.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_result_logs-1080x528.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_result_logs.png 1259w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">While running the logs are added Agent by Agent and once done the list is reloaded (with the new status for Agents)</p></div></li> </ol> <p>Done ! You can now enable lot of Agents at once.</p> <p>If the page doesn&#8217;t work or take too long to load the list of Agents have a look at your browser console, it gives some output faster than the log box on screen.</p> <div id="attachment_394" style="width: 310px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_slow_loading_console_message.png"><img class="wp-image-394 size-medium" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_slow_loading_console_message-300x177.png" alt="" width="300" height="177" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_slow_loading_console_message-300x177.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_slow_loading_console_message-768x454.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_slow_loading_console_message-1024x605.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_slow_loading_console_message-1080x638.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_slow_loading_console_message.png 1259w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">Loading the list of Agents can take some time (10-15 seconds for 104 Agents). The console log give you an output of what&#8217;s going on while waiting.</p></div> <h4>How does it work?</h4> <p>The page is a normal dashboard page with &#8220;Text&#8221; elements containing some javascript and HTML.</p> <div id="attachment_400" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_page_structure.png"><img class="size-large wp-image-400" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_page_structure-1024x887.png" alt="" width="1024" height="887" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_page_structure-1024x887.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_page_structure-300x260.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_page_structure-768x666.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_page_structure-1080x936.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_page_structure.png 1259w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">Only some javascript and HTML</p></div> <p>It uses the embedded jQuery in OBIEE 12c to manage everything: load the required files, actions on checkboxes and button, output to screen.<br /> Completely uses the OBIEE javascript libraries, so it does exactly what the Catalog does, nothing else. There are just 2 methods which are overwritten as they can&#8217;t work outside the Catalog (to handle the result and update available actions on an Agent).</p> <p>Feel free to take the code and change it as you want, you can easily add a disable action too. Something you will maybe want to do is to customize the search of Agents in the catalog by defining a specific path and pattern for names.</p><pre class="crayon-plain-tag">$.post('/analytics/saw.dll?CatalogTreeModel', {action: "search", path: "/", mask: "*", recurse: "t", sig: "coibot1", _scid: obips_scid}, function(data){</pre><p>You can adjust the value of &#8220;path&#8221; and &#8220;mask&#8221; as you want, even add them on screen as text field for a more interactive experience.</p> <p>All my tests and development have been done on a OBIEE 12.2.1.2.0 but the catalog file must be fine for other 12c versions too. For 11g you will have to adapt things as jQuery isn&#8217;t there by default even if the OBIEE javascript functions are probably (tested a bit) 95-100% identical.<br /> I have enabled 102 Agents at once using this script: the page become unresponsive at the beginning when things are running but just leave it there, few minutes later all the Agents were enabled!</p> <blockquote><p><strong>Important note: permissions &amp; privileges</strong></p> <p>As this script does exactly what happen when you click one by one in the catalog the same limitations apply. If your users don&#8217;t have the required permissions on the catalog to access the Agents or to enable them this script will not bypass these limitations. It uses the privileges of your current session, so it&#8217;s advised to use it with an admin-like account.</p></blockquote> <h3>Execute an Agent from a dashboard page or an analysis</h3> <p>Sometimes you want to allow your consumers to execute an Agent, run it immediately, from a dashboard page or an analysis. For example if you have somebody in charge of validation of some data/analysis before to send it out to a wider audience.</p> <p>The approval can be done visually using a dashboard or an analysis, and then to send out the data/analysis you can use an Agent setup without schedule and containing the full list of people, so you find it in the Catalog and click on &#8220;Run&#8221; directly.</p> <p>Wouldn&#8217;t it be better if you could have a button directly on the validation dashboard page?</p> <div id="attachment_402" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard.png"><img class="size-large wp-image-402" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard-1024x367.png" alt="" width="1024" height="367" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard-1024x367.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard-300x108.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard-768x276.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard-1080x388.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard.png 1346w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">Clicking a button on the dashboard page execute the Agent.</p></div> <p>Good news again: doable with a really small piece of code.</p> <p>All you need is a text object with the required code inside.</p><pre class="crayon-plain-tag">&lt;script&gt; $( document ).ready(function() { // find the path to be used to load OBI javascript files jqueryPath = $("script[src*='jquery']").first().attr('src'); var loadPath = jqueryPath.substring(0, jqueryPath.split('/', 3).join('/').length); // load the required scripts $.when( $.getScript(loadPath+'/delivers/obide.ServerRequests.js'), $.getScript(loadPath+'/deliversShared/obids.AjaxRequest.js') ).done(function(){ // when loading is done enable the button $('#runAgent').prop('disabled', false); // when the button is clicked =&gt; execute the agent $('#runAgent').click(function(){ // create required base objects var a = saw.catalogaction; var ibotHandler = new a.IbotsActionHandler(); // set agent path ibotHandler.tItemInfo = {'path': '/shared/Example agents/Test Agent 01'}; // this is optional but avoid a javascript error after execution (load info about the agent) ibotHandler.retrieveIBotInfo(); // execute the agent ibotHandler.runIBot(ibotHandler.tItemInfo.path); }); }); }); &lt;/script&gt; &lt;p&gt;If you want to execute the Agent /shared/Example agents/Test Agent 01 click the button:&lt;/p&gt; &lt;button id="runAgent" disabled="disabled"&gt;Run Agent&lt;/button&gt;</pre><p>In this code the path to the Agent is hardcoded, you can definitely change it or make it smarter (a generic event handler reading the path from an attribute of the button HTML tag). Can be executed by a link or anything else as long as it can be triggered in a way or another.</p> <div id="attachment_403" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard_like_catalog.png"><img class="size-large wp-image-403" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard_like_catalog-1024x534.png" alt="" width="1024" height="534" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard_like_catalog-1024x534.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard_like_catalog-300x156.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard_like_catalog-768x401.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard_like_catalog-1080x563.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_script_run_from_dashboard_like_catalog.png 1346w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">The execution window popup just like in Catalog.</p></div> <div id="attachment_404" style="width: 1008px" class="wp-caption aligncenter"><img class="size-full wp-image-404" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_scripts_execute_from_dashboard.gif" alt="" width="998" height="612" /><p class="wp-caption-text">A full example of the script in action.</p></div> <blockquote><p><strong>Important note: permissions &amp; privileges</strong></p> <p>As this script does exactly what happen when you click &#8220;Run&#8221; in the Catalog the same limitations apply. If your users don&#8217;t have the required permissions on the catalog to access the Agent or to run it, this script will not bypass these limitations. It uses the privileges of your current session.</p></blockquote> <h3>Final word</h3> <p>As you saw in the above examples a lot is doable. OBIEE is a web application which means you can easily hack pieces and reuses its own libraries for your needs.</p> <p>If you want to see the details of other actions available on Agents find the actionhandlerimpl.js file on your OBIEE instance (you will find the same file few times) and look inside. If you check the saw.catalogaction.IbotsActionHandler.prototype.handleAction function you see all the actions available in the Catalog for Agents and the same file has details on actions on other kind of objects.</p> <p><strong>Do not abuse it!</strong> If you end up recoding half of the UI you maybe chose the wrong tool for the job.</p> <p>If it doesn&#8217;t work &#8230; that&#8217;s life: look at the code, analyse what happen, compare with the actual OBIEE native javascript, debug by adding logging and breakpoints.</p> <p>Feel free to post a comment if you have issues using the code in 12.2.1.0.0 or 12.2.1.1.0, I can easily have a look at those versions, for 11g it&#8217;s a bit more difficult as I don&#8217;t have environments easily accessible.</p> <p>The post <a rel="nofollow" href="https://gianniceresa.com/2017/03/scripts-to-use-agents-in-obiee-12c-mass-enabling-and-execution-from-a-page/">Scripts to use Agents in OBIEE 12c: mass enabling and execution from a page</a> appeared first on <a rel="nofollow" href="https://gianniceresa.com">Gianni&#039;s world: things crossing my mind</a>.</p> Gianni Ceresa https://gianniceresa.com/?p=386 Wed Mar 15 2017 07:10:34 GMT-0400 (EDT) Overview of Google Data Studio (Ep 048) https://www.youtube.com/watch?v=Q8p-gpy-CCw Red Pill Analytics yt:video:Q8p-gpy-CCw Tue Mar 14 2017 12:15:15 GMT-0400 (EDT) Presentations from OUGN17 http://www.oralytics.com/2017/03/presentations-from-ougn17.html Here are the presentations I gave at OUG Norway last week. These are also available on SlideShare <iframe src="//www.slideshare.net/slideshow/embed_code/key/GYR1ZSI4UyMP2m" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/BrendanTierney/sql-the-one-language-to-rule-all-your-data" title="SQL: The one language to rule all your data" target="_blank">SQL: The one language to rule all your data</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/BrendanTierney">Brendan Tierney</a></strong> </div> <br> <iframe src="//www.slideshare.net/slideshow/embed_code/key/3CUimELHe0Np0X" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/BrendanTierney/predictive-analytics-mining-gold-and-creating-valuable-product" title="Predictive analytics: Mining gold and creating valuable product" target="_blank">Predictive analytics: Mining gold and creating valuable product</a> </strong> from <strong><a target="_blank" href="//www.slideshare.net/BrendanTierney">Brendan Tierney</a></strong> </div> Brendan Tierney tag:blogger.com,1999:blog-4669933501315263808.post-199072421658021372 Mon Mar 13 2017 18:22:00 GMT-0400 (EDT) OBIEE 12c Agents: enable them by code ! https://gianniceresa.com/2017/03/obiee-12c-agents-enable-them-by-code/ <p>Agents in OBIEE 12c and 11g, known as iBots back in OBIEE 10g, are a component of the BI platform providing few interesting things like pushing data to users instead of requiring users to connect and get it themselves, have alerts based on data to inform users about something and few more. They are one of the many kind of elements you find in the OBIEE catalog.<br /> Being part of the catalog means they are one of the elements you have to manage when upgrading to a different version of OBIEE or, more frequently, when promoting code/features between environments: from DEV to TEST and finally to PROD for example.</p> <blockquote><p><strong>What are Agents?</strong></p> <p>Agents enable you to automate your business processes.<br /> You can use agents to provide event-driven alerting, scheduled content publishing, and conditional event-driven action execution.<br /> <em>(<a href="http://docs.oracle.com/middleware/12211/biee/BIEUG/GUID-2419AD39-ECAF-41B0-B28A-C5EABDB371CF.htm" target="_blank">FMW User&#8217;s Guide for OBIEE 12c</a>)</em></p></blockquote> <p>Till here nothing special: archive your catalog (or branch of catalog) from system A and unarchive on system B: done!<br /> Well &#8230; not really &#8230;<br /> The objects end up on system B, your Agents will be there, sure, but they will always be disabled, so inactive, even if they were enabled and running on the source system.</p> <p>This is currently an issue as you have to remember which Agents must be enabled and do it by hand on the target system, making automated code deployment only partial waiting for somebody to enable Agents again.</p> <p>And what about migrations? For example, moving from OBIEE 11g to OBIEE 12c? You maybe migrate a catalog with tens or hundreds of Agents all over the catalog which must be enabled again &#8230; by hand! Not what we can call a nice and interesting activity and not the safest way to do a migration.</p> <h3>No need to enable them by hand anymore !</h3> <p>I&#8217;m glad to tell you that you don&#8217;t have to do it by hand anymore and the process enabling Agents can perfectly be scripted!</p> <p>How? That&#8217;s for the bottom of the post, first let&#8217;s have a look at what an Agent is in OBIEE, what pieces of information are stored where.</p> <h3>Creating an Agent</h3> <p>To create an Agent is a really simple activity: in the &#8220;New&#8221; menu of the OBIEE web interface Agents are under the <em>Actionable Intelligence</em> label (by the way, if you don&#8217;t have a Foundation license but by component, make sure you are allowed to use deliveries). In the &#8220;Schedule&#8221; step is where the details about when the Agent must be executed are defined, if you uncheck the &#8220;Enabled&#8221; checkbox the Agent will not be executed, even if I define a schedule, for example every 10 minutes all the time, the Agent will not be run at all. That&#8217;s the status all the Agents are when migrated or promoted to a different environment.</p> <div id="attachment_371" style="width: 310px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_a_new_agent.png"><img class="size-medium wp-image-371" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_a_new_agent-300x142.png" alt="" width="300" height="142" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_a_new_agent-300x142.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_a_new_agent-768x364.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_a_new_agent-1024x485.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_a_new_agent-1080x512.png 1080w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">In the &#8220;New&#8221; menu select &#8220;Agent&#8221;</p></div> <div id="attachment_372" style="width: 310px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_not_enabled.png"><img class="size-medium wp-image-372" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_not_enabled-300x99.png" alt="" width="300" height="99" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_not_enabled-300x99.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_not_enabled-768x252.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_not_enabled-1024x337.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_not_enabled-1080x355.png 1080w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">Do not enable it directly, first define all the settings.</p></div> <div id="attachment_373" style="width: 310px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_save_agent.png"><img class="size-medium wp-image-373" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_save_agent-300x102.png" alt="" width="300" height="102" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_save_agent-300x102.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_save_agent-768x261.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_save_agent-1024x348.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_create_save_agent-1080x368.png 1080w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">Save the Agent, it is still not enabled at this point.</p></div> <h3>Where the Agent is stored?</h3> <p>There are two places where information about Agents are stored.<br /> The main place is the catalog itself, as any other object, the XML describing the Agent is created in a file (with a corresponding .atr file).</p> <p>This is the content of that file for a sample Agent I just created:</p><pre class="crayon-plain-tag">&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;saw:ibot xmlns:saw="com.siebel.analytics.web/report/v1.1" xmlns:cond="com.oracle.bi/conditions/v1" xmlns:sawx="com.siebel.analytics.web/expression/v1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1" priority="normal" jobID="6"&gt; &lt;saw:schedule disabled="true"&gt; &lt;saw:start startImmediately="false" repeatMinuteInterval="10" endTime="23:59:00" date="2017-03-12" time="01:00:00" /&gt; &lt;saw:recurrence runOnce="false"&gt; &lt;saw:daily dayInterval="1" /&gt; &lt;/saw:recurrence&gt; &lt;/saw:schedule&gt; &lt;saw:dataVisibility type="runAsUser" runAs="weblogic" runAsGuid="weblogic" /&gt; &lt;cond:condition /&gt; &lt;saw:choose&gt; &lt;saw:when condition="true"&gt; &lt;saw:deliveryContent disposition="deviceDefault"&gt; &lt;saw:reportRef path="/shared/Agents/Sample analysis for agent" /&gt; &lt;saw:headline&gt; &lt;saw:caption&gt; &lt;saw:text&gt;Test Agent 01&lt;/saw:text&gt; &lt;/saw:caption&gt; &lt;/saw:headline&gt; &lt;/saw:deliveryContent&gt; &lt;saw:postActions /&gt; &lt;/saw:when&gt; &lt;saw:otherwise&gt; &lt;saw:postActions /&gt; &lt;/saw:otherwise&gt; &lt;/saw:choose&gt; &lt;saw:deliveryDestinations&gt; &lt;saw:destination category="dashboard" /&gt; &lt;/saw:deliveryDestinations&gt; &lt;saw:recipients specificRecipients="true" subscribers="false" customize="false"&gt; &lt;saw:specificRecipients&gt; &lt;saw:user name="weblogic" guid="weblogic" /&gt; &lt;/saw:specificRecipients&gt; &lt;saw:subscribers /&gt; &lt;/saw:recipients&gt; &lt;saw:emailRecipients /&gt; &lt;/saw:ibot&gt;</pre><p>Another place where you find information about the Agents is the database, the BIPLATFORM schema created by the RCU when OBIEE has been configured.<br /> There are few tables for Agents there, the main one is S_NQ_JOB which is the one defining the ID assigned to each Agent (the JOB_ID column) registered by the Scheduler (one of the components of OBIEE).</p> <div id="attachment_362" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_s_nq_job_table.png"><img class="size-large wp-image-362" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_s_nq_job_table-1024x241.png" alt="" width="1024" height="241" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_s_nq_job_table-1024x241.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_s_nq_job_table-300x71.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_s_nq_job_table-768x181.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_s_nq_job_table-1080x254.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_s_nq_job_table.png 1416w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">Entries for the Agents in the S_NQ_JOB table</p></div> <p>If you look well, between the XML and the database table there is a link: the XML contains the ID which has been assigned to the Agent in the S_NQ_JOB table. The &#8220;driver&#8221; isn&#8217;t the XML but the database as we will see later in case of conflicting IDs.</p> <div id="attachment_363" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_xml_highlight_jobid.png"><img class="size-large wp-image-363" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_xml_highlight_jobid-1024x130.png" alt="" width="1024" height="130" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_xml_highlight_jobid-1024x130.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_xml_highlight_jobid-300x38.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_xml_highlight_jobid-768x97.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_xml_highlight_jobid-1080x137.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_xml_highlight_jobid.png 1191w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">The jobID attribute of the saw:ibot node contains the ID assigned in the database</p></div> <h3>How to enable an Agent?</h3> <p>Once your Agent exists you can of course edit it again and check the &#8220;Enabled&#8221; checkbox and save, but there is a simpler way. In the catalog clicking on the &#8220;More&#8221; link just underneath the Agent itself a list of actions is displayed and if the Agent isn&#8217;t already enabled the last option will be &#8220;Enable Schedule&#8221; (if the Agent is already enabled you will have the link to disable it).</p> <div id="attachment_364" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_actions.png"><img class="size-large wp-image-364" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_actions-1024x691.png" alt="" width="1024" height="691" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_actions-1024x691.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_actions-300x202.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_actions-768x518.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_actions-1080x729.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_actions.png 1110w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">The &#8220;enable&#8221; link is available in the catalog</p></div> <h3>How to enable Agents by a script in an automated way?</h3> <p>As I&#8217;m not aware of a simple webservice to enable the Agents (didn&#8217;t search for it in detail as few other people who needed it said it wasn&#8217;t there, so I trusted them) the solution must be behind the &#8220;Enable Schedule&#8221; link in the catalog.</p> <p>All I have to do is to find that piece of code, easy &#8230;</p><pre class="crayon-plain-tag">saw.catalogaction.IbotsActionHandler.prototype.enableIBotSchedule = function(l) { saw.header.showBusyIndicator(true); var d = saw.getLastPathPart(l); var p = saw.getFolder(l); var h = obide.ServerRequests.retrieveIBotInfo(l, true); var k = XUIGetElementText(obips.XMLDOM.selectSingleNode(h, "IBotInfo/SchedulerRegistered")) == "1"; var a = obips.XMLDOM.selectSingleNode(h, "//saw:ibot", saw.delivers.namespaceMap); var r = false; if (!k) { a.removeAttribute("jobID"); if (p) { var b = '&lt;?xml version="1.0" encoding="UTF-8"?&gt;' + obips.XMLDOM.getXMLString(a); r = (this.tItemInfo.extendedAttributes &amp;&amp; this.tItemInfo.extendedAttributes.recipient); saw.catalog.getCatalogManager().writeXML(saw.catalog.ItemCategory.IBOT, b, l) } } var e = obips.XMLDOM.createXMLDomFromString('&lt;saw:ibotUI xmlns:saw="com.siebel.analytics.web/report/v1.1"/&gt;'); var n = obips.XMLDOM.selectSingleNode(e, "saw:ibotUI", saw.delivers.namespaceMap); XUIAppendChild(n, a); var t = obips.XMLDOM.selectSingleNode(a, "saw:schedule", saw.delivers.namespaceMap); var o = obips.XMLDOM.selectSingleNode(t, "saw:start", saw.delivers.namespaceMap); var s = null; if (o) { s = XUIGetAttributeString(o, "date") } if (s &amp;&amp; s != "") { t.removeAttribute("disabled") } else { XUISetAttributeBool(t, "disabled", true) } var f = XUIInsertNewElement(n, saw.xml.kSawNamespace, "ibotSaveInfo", 1); var m = XUIForceSingleNode(f, saw.xml.kSawNamespace, "saveMode"); XUISetElementText(m, "save"); var q = XUIForceSingleNode(f, saw.xml.kSawNamespace, "name"); XUISetElementText(q, d); var i = XUIForceSingleNode(f, saw.xml.kSawNamespace, "oldName"); XUISetElementText(i, d); var g = XUIForceSingleNode(f, saw.xml.kSawNamespace, "path"); XUISetElementText(g, p); var c = XUIForceSingleNode(f, saw.xml.kSawNamespace, "oldPath"); XUISetElementText(c, p); var j = obide.ServerRequests.saveIBot(obips.XMLDOM.getXMLString(e), false); saw.delivers.handleSaveResult(j); this.updateDetails(r); saw.header.showBusyIndicator(false) };</pre><p>Let me introduce you saw.catalogaction.IbotsActionHandler.prototype.enableIBotSchedule, the enableIBotSchedule method of the saw.catalogaction.IbotsActionHandler javascript object. That&#8217;s a custom object Oracle developed (there are many many others, a lot more) to manage all the interactions with the catalog in the webpage.</p> <p>This piece of code is, all in all, quite readable even without knowing what does call it, what&#8217;s the context and what there is around. A single parameter, by the code I would guess it can be an object or a reference to the Agent, actually the &#8221; <i>l </i>&#8221; parameter is just the path of the Agent, so something like <em>/shared/Example agents/Test Agent 01</em> for the example Agent I created above.</p> <p>If you look in your browser&#8217;s Developer tools extension what happen when you click the enable link the javascript code makes even more sense.</p> <div id="attachment_365" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_ajax_calls.png"><img class="size-large wp-image-365" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_ajax_calls-1024x661.png" alt="" width="1024" height="661" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_ajax_calls-1024x661.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_ajax_calls-300x194.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_ajax_calls-768x496.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_ajax_calls-1080x697.png 1080w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_catalog_ajax_calls.png 1236w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">When clicking on &#8220;Enable Schedule&#8221; there are 2 ajax calls.</p></div> <p>Looking at the URLs it&#8217;s easy to match these 2 ajax calls with the javascript code: row 5 and 42 in the above snippet.</p> <p>To make it easier to understand the rest of the javascript function, this is the result of the first call to <em>saw.dll?RetrieveIBotInfo</em> :</p><pre class="crayon-plain-tag">&lt;IBotInfo&gt; &lt;SchedulerRegistered&gt;1&lt;/SchedulerRegistered&gt; &lt;Subscribed&gt;false&lt;/Subscribed&gt; &lt;DirectRecipient&gt;true&lt;/DirectRecipient&gt; &lt;CanSubscribe&gt;false&lt;/CanSubscribe&gt; &lt;CanCustomize&gt;false&lt;/CanCustomize&gt; &lt;Name&gt;Test Agent 01&lt;/Name&gt; &lt;Description&gt;This is a just a test agent&lt;/Description&gt; &lt;Author&gt;weblogic&lt;/Author&gt; &lt;CreatedOn&gt;3/12/2017 5:28:49 PM (Server OS Time Zone)&lt;/CreatedOn&gt; &lt;LastModified&gt;3/12/2017 5:28:50 PM (Server OS Time Zone)&lt;/LastModified&gt; &lt;LastRun&gt;&lt;/LastRun&gt; &lt;NextRun&gt;&lt;/NextRun&gt; &lt;AgentXML&gt; &lt;saw:ibot xmlns:saw="com.siebel.analytics.web/report/v1.1" xmlns:cond="com.oracle.bi/conditions/v1" xmlns:sawx="com.siebel.analytics.web/expression/v1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1" priority="normal" jobID="6"&gt; &lt;saw:schedule disabled="true"&gt; &lt;saw:start startImmediately="false" repeatMinuteInterval="10" endTime="23:59:00" date="2017-03-12" time="01:00:00" /&gt; &lt;saw:recurrence runOnce="false"&gt; &lt;saw:daily dayInterval="1" /&gt; &lt;/saw:recurrence&gt; &lt;/saw:schedule&gt; &lt;saw:dataVisibility type="runAsUser" runAs="weblogic" runAsGuid="weblogic" /&gt; &lt;cond:condition /&gt; &lt;saw:choose&gt; &lt;saw:when condition="true"&gt; &lt;saw:deliveryContent disposition="deviceDefault"&gt; &lt;saw:reportRef path="/shared/Agents/Sample analysis for agent" /&gt; &lt;saw:headline&gt; &lt;saw:caption&gt; &lt;saw:text&gt;Test Agent 01&lt;/saw:text&gt; &lt;/saw:caption&gt; &lt;/saw:headline&gt; &lt;/saw:deliveryContent&gt; &lt;saw:postActions /&gt; &lt;/saw:when&gt; &lt;saw:otherwise&gt; &lt;saw:postActions /&gt; &lt;/saw:otherwise&gt; &lt;/saw:choose&gt; &lt;saw:deliveryDestinations&gt; &lt;saw:destination category="dashboard" /&gt; &lt;/saw:deliveryDestinations&gt; &lt;saw:recipients specificRecipients="true" subscribers="false" customize="false"&gt; &lt;saw:specificRecipients&gt; &lt;saw:user name="weblogic" guid="weblogic" /&gt; &lt;/saw:specificRecipients&gt; &lt;saw:subscribers /&gt; &lt;/saw:recipients&gt; &lt;saw:emailRecipients /&gt; &lt;/saw:ibot&gt; &lt;/AgentXML&gt; &lt;/IBotInfo&gt;</pre><p>The key element is at row 2: <em>&lt;SchedulerRegistered&gt;1&lt;/SchedulerRegistered&gt;</em><br /> It means the Agent is already registered in the Scheduler, the database entries are there and are fine !<br /> If the Agent wasn&#8217;t found in the database (in case of a migration for example) or there would be an issue the value would have been 0.</p> <p>Based on this XML the rest of the javascript code make sense too as it&#8217;s a lot of XML manipulations: if the Agent is already registered in the Scheduler and there is a date for the schedule the code remove the <em>disabled=&#8221;true&#8221;</em> attribute from the <em>saw:schedule</em> node and then save the new Agent code.</p> <p>This is actually the same as if you open the Agent to edit it, check the &#8220;Enabled&#8221; checkbox and finally save the Agent, same thing, same process, same logic.</p> <p>You now have all the pieces to script and automate these steps if you want, simple standard HTTP calls sending and receiving pieces of XML (almost XML in reality, there is a kind of prefix you have to remove to make it really XML).</p> <p>You can use the scripting language of your choice and after simulating a login to have a session ID with the required privileges you can execute the same logic and same HTTP calls.</p> <h3>Job ID collision: how is that managed?</h3> <p>Based on what I just wrote you can imagine you could easily have a Job ID collision when promoting code between environments.</p> <p>For example, if you have 5 Agents in total in DEV and PROD and you add a new one while developing in DEV. This new Agent will have the ID = 6.<br /> In the meantime in PROD a new Agent is created for a special need only in PROD (if you allow that or not it&#8217;s a different thing, processes are all different). In PROD the ID = 6 is assigned to this new Agent.</p> <p>What happen when you promote your development till PROD? You will have 2 Agents with ID = 6: one will be the one promoted by your development release, the other the one created only in PROD.</p> <div id="attachment_367" style="width: 430px" class="wp-caption aligncenter"><img class="size-full wp-image-367" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_panic.jpg" alt="" width="420" height="279" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_panic.jpg 420w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_panic-300x199.jpg 300w" sizes="(max-width: 420px) 100vw, 420px" /><p class="wp-caption-text">Job ID collision? Panic! 2 Agents but same Job ID</p></div> <p>No need to panic, OBIEE is smart!</p> <p>The collision is detected, the system will see there is a second Agent with the Job ID = 6 but the path is different when compared with the one stored in the S_NQ_JOB_PARAM database table. It will discard the JobID = 6 and will create a new one when saving and enabling the Agent.</p> <div id="attachment_368" style="width: 1034px" class="wp-caption aligncenter"><a href="https://gianniceresa.com/wp-content/uploads/2017/03/agents_jobid_collision_detected.png"><img class="size-large wp-image-368" src="https://gianniceresa.com/wp-content/uploads/2017/03/agents_jobid_collision_detected-1024x301.png" alt="" width="1024" height="301" srcset="https://gianniceresa.com/wp-content/uploads/2017/03/agents_jobid_collision_detected-1024x301.png 1024w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_jobid_collision_detected-300x88.png 300w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_jobid_collision_detected-768x226.png 768w, https://gianniceresa.com/wp-content/uploads/2017/03/agents_jobid_collision_detected-1080x318.png 1080w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><p class="wp-caption-text">The metadata of the Agent mismatch with the attributes saved in the database</p></div> <p>You can test this case by simply copy/paste an existing Agent to a new path in the catalog or with a different name.</p> <h3>To resume</h3> <p>Agents are stored in the catalog but also in the database once they are registered with the Scheduler (enabled or disabled doesn&#8217;t matter at this point).<br /> This means that when deploying Agents in a new environment <strong>you do not have to care about the content of the S_NQ_JOB and S_NQ_JOB_PARAM</strong> database tables, OBIEE will manage that for you. It&#8217;s actually <strong>better to not write inside these tables by hand</strong> trying to migrate content.</p> <blockquote><p><strong>Just to be sure you didn&#8217;t miss it&#8230;</strong></p> <p>Don&#8217;t copy the content of S_NQ_JOB and S_NQ_JOB_PARAM around between environments during code promotion or upgrades. Let OBIEE create these entries.<br /> If needed, you can then copy the content of the log table, but first map the old Job IDs to the new ones.</p></blockquote> <p>No need to worry about conflicting Job ID in case you allow your users to create Agents directly in PROD and so ending up with the same ID of the Agents you deploy when releasing new features. OBIEE will detect the conflict thanks to the database and reassign IDs as needed.</p> <p>Finally, and most important: you can script and automate the steps to enable Agents by replicating the simple javascript function logic: retrieve the Agent XML details, manipulate them a bit to remove the &#8220;disabled&#8221; attribute and save the Agent again.</p> <p>Do you want a super simple way to do this in one step from OBIEE itself? Stay tuned, in few days I will post a Dashboard page containing all the code to select all the Agents you want to enable at once and with a single click they will be enabled, using the OBIEE javascript libraries (so it&#8217;s like if you will do it by hand in the catalog one by one). All you have to do is to unarchive it somewhere in your catalog.<br /> Do you need to be able to execute an agent by clicking a button or link in an analysis or dashboard? Same as above: stay tuned and in few days a sample code will be posted.</p> <p>The post <a rel="nofollow" href="https://gianniceresa.com/2017/03/obiee-12c-agents-enable-them-by-code/">OBIEE 12c Agents: enable them by code !</a> appeared first on <a rel="nofollow" href="https://gianniceresa.com">Gianni&#039;s world: things crossing my mind</a>.</p> Gianni Ceresa https://gianniceresa.com/?p=357 Mon Mar 13 2017 06:36:42 GMT-0400 (EDT) Property Graph in Oracle 12.2 http://www.rittmanmead.com/blog/2017/03/property-graph-in-oracle-12-2/ <p>The latest release of Oracle (12.2) includes support for Property Graph, previously available only as part of the Big Data Spatial and Graph tool. Unlike the latter, in which data is held in a NoSQL store (Oracle NoSQL, or Apache HBase), it is now possible to use the Oracle Database itself for holding graph definitions and analysing them. </p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/Cursor_and_Analysing_the_Panama_Papers_with_Oracle_Big_Data_Spatial_and_Graph_key.png" style="width: 600px;"></p> <p>Here we'll see this in action, using the same dataset as I've <a href="https://community.oracle.com/docs/DOC-1006400">previously used</a> - the "Panama Papers".</p> <p>My starting point is the <a href="http://www.oracle.com/technetwork/community/developer-vm/">Oracle Developer Day VM</a>, which at under 8GB is a tenth of the size of the beast that is the <a href="http://www.oracle.com/technetwork/database/bigdata-appliance/oracle-bigdatalite-2104726.html">BigDataLite VM</a>. BDL is great for exploring the vast Big Data ecosystem, both within and external to the Oracle world. However the Developer Day VM serves our needs perfectly here, having been recently updated for the 12.2 release of Oracle. You can also use DB 12.2 in Oracle Cloud, as well as the <a href="https://github.com/oracle/">Docker image</a>.</p> <h2 id="preparedatabaseforpropertygraph">Prepare Database for Property Graph</h2> <p><em>The steps below are based on Zhe Wu's blog "<a href="https://blogs.oracle.com/oraclespatial/entry/graph_database_says_hello_from2">Graph Database Says Hello from the Cloud (Part III)</a>", modified slightly for the differing SIDs etc on Developer Day VM.</em></p> <p>First, set the Oracle environment by running from a bash prompt</p> <pre><code>. oraenv </code></pre> <p>When prompted for SID enter <code>orcl12c</code>:</p> <pre><code class="language-bash">[oracle@vbgeneric ~]$ . oraenv ORACLE_SID = [oracle] ? orcl12c ORACLE_BASE environment variable is not being set since this information is not available for the current user ID oracle. You can set ORACLE_BASE manually if it is required. Resetting ORACLE_BASE to its previous value or ORACLE_HOME The Oracle base has been set to /u01/app/oracle/product/12.2/db_1 [oracle@vbgeneric ~]$ </code></pre> <p>Now launch SQL*Plus:</p> <pre><code>sqlplus sys/oracle@localhost:1521/orcl12c as sysdba </code></pre> <p>and from the SQL*Plus prompt create a tablespace in which the Property Graph data will be stored:</p> <pre><code class="language-sql">alter session set container=orcl; create bigfile tablespace pgts datafile '?/dbs/pgts.dat' size 512M reuse autoextend on next 512M maxsize 10G EXTENT MANAGEMENT LOCAL segment space management auto; </code></pre> <p>Now you need to do a bit of work to update the database to hold larger string sizes, following the following steps.</p> <p>In SQL*Plus:</p> <pre><code>ALTER SESSION SET CONTAINER=CDB$ROOT; ALTER SYSTEM SET max_string_size=extended SCOPE=SPFILE; shutdown immediate; startup upgrade; ALTER PLUGGABLE DATABASE ALL OPEN UPGRADE; EXIT; </code></pre> <p>Then from the bash shell:</p> <pre><code>cd $ORACLE_HOME/rdbms/admin mkdir /u01/utl32k_cdb_pdbs_output mkdir /u01/utlrp_cdb_pdbs_output $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u SYS -d $ORACLE_HOME/rdbms/admin -l '/u01/utl32k_cdb_pdbs_output' -b utl32k_cdb_pdbs_output utl32k.sql </code></pre> <p>When prompted, enter SYS password (<code>oracle</code>)</p> <p>After a short time you should get output:</p> <pre><code>catcon.pl: completed successfully </code></pre> <p>Now back into SQL*Plus: </p> <pre><code>sqlplus sys/oracle@localhost:1521/orcl12c as sysdba </code></pre> <p>and restart the database instances:</p> <pre><code>shutdown immediate; startup; ALTER PLUGGABLE DATABASE ALL OPEN READ WRITE; exit </code></pre> <p>Run a second script from the bash shell:</p> <pre><code>$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u SYS -d $ORACLE_HOME/rdbms/admin -l '/u01/utlrp_cdb_pdbs_output' -b utlrp_cdb_pdbs_output utlrp.sql </code></pre> <p>Again, enter SYS password (<code>oracle</code>) when prompted. This step then takes a while (c.15 minutes) to run, so be patient. Eventually it should finish and you'll see:</p> <pre><code>catcon.pl: completed successfully </code></pre> <p>Now to validate that the change has worked. Fire up SQL*Plus:</p> <pre><code>sqlplus sys/oracle@localhost:1521/orcl12c as sysdba </code></pre> <p>And check the value for <code>max_string</code>, which should be <code>EXTENDED</code>:</p> <pre><code>alter session set container=orcl; SQL&gt; show parameters max_string; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ max_string_size string EXTENDED </code></pre> <h2 id="loadpropertygraphdatafromoracleflatfileformat">Load Property Graph data from Oracle Flat File format</h2> <p>Now we can get going with our Property Graph. We're going to use <strong>Gremlin</strong>, a groovy-based interpretter, for interacting with PG. As of Oracle 12.2, it ships with the product itself. Launch it from bash:</p> <pre><code>cd $ORACLE_HOME/md/property_graph/dal/groovy sh gremlin-opg-rdbms.sh -------------------------------- Mar 08, 2017 8:52:22 AM java.util.prefs.FileSystemPreferences$1 run INFO: Created user preferences directory. opg-oracledb&gt; </code></pre> <p>First off, let's create the Property Graph object in Oracle itself. Under the covers, this will set up the necessary database objects that will store the data.</p> <pre><code>cfg = GraphConfigBuilder.\ forPropertyGraphRdbms().\ setJdbcUrl("jdbc:oracle:thin:@127.0.0.1:1521/ORCL").\ setUsername("scott").\ setPassword("oracle").\ setName("panama").\ setMaxNumConnections(8).\ build(); opg = OraclePropertyGraph.getInstance(cfg); </code></pre> <p>You can also do this with the PL/SQL command <code>exec opg_apis.create_pg('panama', 4, 8, 'PGTS');</code>. Either way, the effect is the same; a set of tables created in the owner's schema:</p> <pre><code class="language-sql">SQL&gt; select table_name from user_tables; TABLE_NAME ------------------------------------------ PANAMAGE$ PANAMAGT$ PANAMAVT$ PANAMAIT$ PANAMASS$ </code></pre> <p>Now let's load the data. I'm using the Oracle Flat File format here, having converted it from the original CSV format <a href="https://gist.github.com/rmoff/17025830c81e60d6446e34a37273f705">using R</a>. For more details of why and how, see my <a href="https://community.oracle.com/docs/DOC-1006400">article here</a>.</p> <p>From the Gremlin prompt, run:</p> <pre><code>// opg.clearRepository(); // start from scratch opgdl=OraclePropertyGraphDataLoader.getInstance(); efile="/home/oracle/panama_edges.ope" vfile="/home/oracle/panama_nodes.opv" opgdl.loadData(opg, vfile, efile, 1, 10000, true, null); </code></pre> <p>This will take a few minutes. Once it's completed you'll get <code>null</code> response, but can verify the data has successfully loaded using the opg.Count* functions:</p> <pre><code>opg-oracledb&gt; opgdl.loadData(opg, vfile, efile, 1, 10000, true, null); ==&gt;null opg-oracledb&gt; opg.countEdges() ==&gt;1265690 opg-oracledb&gt; opg.countVertices() ==&gt;838295 </code></pre> <p>We can inspect the data in Oracle itself too. Here I'm using SQLcl, which is available by default on the Developer Day VM. Using the <code>...VT$</code> table we can query the number of distinct properties the nodes (verticies) in the graph:</p> <pre><code class="language-sql">SQL&gt; select distinct k from panamaVT$; K ---------------------------- Entity incorporation.date Entity company.type Entity note ID Officer icij.id Countries Type Entity status Country Source ID Country Codes Entity struck.off.date Entity address Name Entity jurisdiction Entity jurisdiction.description Entity dorm.date 17 rows selected. </code></pre> <p>Inspect the edges:</p> <pre><code class="language-sql">[oracle@vbgeneric ~]$ sql scott/oracle@localhost:1521/orcl SQL&gt; select p.* from PANAMAGE$ p where rownum&lt;5; EID SVID DVID EL K T V VN VT SL VTS VTE FE ---------- ---------- ---------- ---------------- ---- ---- ---- ---- ---- ---- ---- ---- ---- 6 6 205862 officer_of 11 11 228601 officer_of 30 36 216748 officer_of 34 39 216487 officer_of SQL&gt; </code></pre> <p>You can also natively execute some of the Property Graph algorithms from PL/SQL itself. Here is how to run the <a href="https://docs.oracle.com/database/122/SPGDG/OPG_APIS-reference.htm#SPGDG-GUID-A5F629F8-D086-4E7F-8ECF-6094982E7A05">PageRank algorithm</a>, which can be used to identify the most significant nodes in a graph, assigning them each a score (the "page rank" value):</p> <pre><code>set serveroutput on DECLARE wt_pr varchar2(2000); -- name of the table to hold PR value of the current iteration wt_npr varchar2(2000); -- name of the table to hold PR value for the next iteration wt3 varchar2(2000); wt4 varchar2(2000); wt5 varchar2(2000); n_vertices number; BEGIN wt_pr := 'panamaPR'; opg_apis.pr_prep('panamaGE$', wt_pr, wt_npr, wt3, wt4, null); dbms_output.put_line('Working table names ' || wt_pr || ', wt_npr ' || wt_npr || ', wt3 ' || wt3 || ', wt4 '|| wt4); opg_apis.pr('panamaGE$', 0.85, 10, 0.01, 4, wt_pr, wt_npr, wt3, wt4, 'SYSAUX', null, n_vertices) ; END; / </code></pre> <p>When run this creates a new table with the PageRank score for each vertex in the graph, which can then be queried as any other table:</p> <pre><code class="language-sql">SQL&gt; select * from panamaPR 2 order by PR desc 3* fetch first 5 rows only; NODE PR C ---------- ---------- ---------- 236724 8851.73652 0 288469 904.227685 0 264051 667.422717 0 285729 562.561604 0 237076 499.739316 0 </code></pre> <p>On its own, this is not so much use; but joined to the vertices table, we can now find out, within our graph, the top ranked vertices:</p> <pre><code>SQL&gt; select pr.pr, v.k,v.V from panamaPR pr inner join PANAMAVT$ V on pr.NODE = v.vid where v.K = 'Name' order by PR desc fetch first 5 rows only; PR K V ---------- ---------- --------------- 8851.73652 Name Portcullis TrustNet Chambers P.O. Box 3444 Road Town- Tortola British Virgin Isl 904.227685 Name Unitrust Corporate Services Ltd. John Humphries House- Room 304 4-10 Stockwell Stre 667.422717 Name Company Kit Limited Unit A- 6/F Shun On Comm Bldg. 112-114 Des Voeux Road C.- Hong 562.561604 Name Sealight Incorporations Limited Room 1201- Connaught Commercial Building 185 Wanc 499.739316 Name David Chong &amp; Co. Office B1- 7/F. Loyong Court 212-220 Lockhart Road Wanchai Hong K SQL&gt; </code></pre> <p>Since our vertices in this graph have properties, including "Type", we can also analyse it by that - the following shows the top ranked vertices that are Officers:</p> <pre><code class="language-sql">SQL&gt; select V.vid, pr.pr from panamaPR pr inner join PANAMAVT$ V on pr.NODE = v.vid where v.K = 'Type' and v.V = 'Officer' order by PR desc fetch first 5 rows only; VID PR ---------- ---------- 12171184 1.99938104 12030645 1.56722346 12169701 1.55754873 12143648 1.46977361 12220783 1.39846834 </code></pre> <p>which we can then put in a subquery to show the details for these nodes:</p> <pre><code class="language-sql">with OfficerPR as (select V.vid, pr.pr from panamaPR pr inner join PANAMAVT$ V on pr.NODE = v.vid where v.K = 'Type' and v.V = 'Officer' order by PR desc fetch first 5 rows only) select pr2.pr,v2.k,v2.v from OfficerPR pr2 inner join panamaVT$ v2 on pr2.vid = v2.vid where v2.k in ('Name','Countries'); </code></pre> <pre><code> PR K V ---------- ---------- ----------------------- 1.99938104 Countries Guernsey 1.99938104 Name Cannon Asset Management Limited re G006 1.56722346 Countries Gibraltar 1.56722346 Name NORTH ATLANTIC TRUST COMPANY LTD. AS TRUSTEE THE DAWN TRUST 1.55754873 Countries Guernsey 1.55754873 Name Cannon Asset Management Limited re J006 1.46977361 Countries Portugal 1.46977361 Name B-49-MARQUIS-CONSULTADORIA E SERVICOS (SOCIEDADE UNIPESSOAL) LDA 1.39846834 Countries Cyprus 1.39846834 Name SCIVIAS TRUST MANAGEMENT LTD 10 rows selected. </code></pre> <p>But here we get into the limitations of SQL - already this is starting to look like a bit of a complex query to maintain. This is where <a href="http://pgql-lang.org/spec/1.0/">PGQL</a> comes in, as it enables to express the above request much more eloquently. The key thing with PGQL is that it understands the concept of a 'node', which removes the need for the convoluted sub-select that I had to do above to first identify the top-ranked nodes that had a given property (<code>Type = Officer</code>), and then for those identified nodes show information about them (<code>Name</code> and <code>Countries</code>). The above SQL could be expressed in PGQL simply as:</p> <pre><code>SELECT n.pr, n.name, n.countries WHERE (n WITH Type =~ 'Officer') ORDER BY n.pr limit 5 </code></pre> <p>At the moment Property Graph in the Oracle DB doesn't support PGQL - but I'd expect to see it in the future.</p> <h2 id="jupyternotebooks">Jupyter Notebooks</h2> <p>As well as working with the Property Graph in SQL and Gremlin, we can use the Python API. This is shipped with Oracle 12.2. I'd strongly recommend using it through a Notebook, and this provides an excellent environment in which to prototype code and explore the results. Here I'll use Jupyter, but Apache Zeppelin is also very good.</p> <p>First let's install Anaconda Python, which includes Jupyter Notebooks:</p> <pre><code>wget https://repo.continuum.io/archive/Anaconda2-4.3.0-Linux-x86_64.sh bash Anaconda2-4.3.0-Linux-x86_64.sh </code></pre> <p>In the install options I use the default path (<code>/home/oracle</code>) as the location, and keep the default (<code>no</code>)</p> <p>Launch Jupyter, telling it to listen on any NIC (not just localhost). If you installed anaconda in a different path from the default you'll need to amend the <code>/home/oracle/</code> bit of the path.</p> <pre><code>/home/oracle/anaconda2/bin/jupyter notebook --ip 0.0.0.0 </code></pre> <p>If you ran the above command from the terminal window within the VM, you'll get Firefox pop up with the following:</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/oddvm_jupyter01.png" alt=""></p> <p>If you're using the VM headless you'll now want to fire up your own web browser and go to <code>http://&lt;ip&gt;:8888</code> use the token given in the startup log of Jupyter to login.</p> <p>Either way, you should now have a functioning Jupyter notebook environment.</p> <p>Now let's install the Property Graph support into the Python &amp; Jupyter environment. First, make sure you've got the right Python set, by confirming with <code>which</code> it's the anaconda version you installed, and when you run <code>python</code> you see <code>Anaconda</code> in the version details:</p> <pre><code>[oracle@vbgeneric ~]$ export PATH=/home/oracle/anaconda2/bin:$PATH [oracle@vbgeneric ~]$ which python ~/anaconda2/bin/python [oracle@vbgeneric ~]$ python -V Python 2.7.13 :: Anaconda 4.3.0 (64-bit) [oracle@vbgeneric ~]$ </code></pre> <p>Then run the following</p> <pre><code class="language-bash">cd $ORACLE_HOME/md/property_graph/pyopg touch README python ./setup.py install </code></pre> <p><em>without the <code>README</code> being created, the install fails with <code>IOError: [Errno 2] No such file or directory: './README'</code></em></p> <p>You need to be connected to the internet for this as it downloads dependencies as needed. After a few screenfuls of warnings that appear OK to ignore, the installation should be succesful:</p> <pre><code>[...] creating /u01/userhome/oracle/anaconda2/lib/python2.7/site-packages/JPype1-0.6.2-py2.7-linux-x86_64.egg Extracting JPype1-0.6.2-py2.7-linux-x86_64.egg to /u01/userhome/oracle/anaconda2/lib/python2.7/site-packages Adding JPype1 0.6.2 to easy-install.pth file Installed /u01/userhome/oracle/anaconda2/lib/python2.7/site-packages/JPype1-0.6.2-py2.7-linux-x86_64.egg Finished processing dependencies for pyopg==1.0 </code></pre> <p>Now you can use the Python interface to property graph (<code>pyopg</code>) from within Jupyter, as seen below. I've put the notebook on <a href="https://gist.github.com/rmoff/6637de06efe30f1ec230a088c2cf3969">gist.github.com</a> meaning that you can download it from there and run it yourself in Jupyter.</p> <script src="https://gist.github.com/rmoff/6637de06efe30f1ec230a088c2cf3969.js"></script> Robin Moffatt 15f00b58-9c1a-4fb8-8d9d-eeebcb412bef Fri Mar 10 2017 12:00:00 GMT-0500 (EST) Oracle 12c Release 2 (12.2.0.1.0) Grid Infrastructure Upgrade http://gavinsoorma.com/2017/03/oracle-12c-release-2-12-2-0-1-0-grid-infrastructure-upgrade/ <p>I recently performed an upgrade of an Oracle 12c Release 1 (12.1.0.2) Grid Infrastructure environment hosted on a RAC Virtual Box environment on my laptop to the latest release 12c Release 2 12.2.0.1.0 version.</p> <p>Here are some points to be noted related to the upgrade process:</p> <ul> <ul> <li>The Grid Infrastructure 12c Release 2 (12.2) software is now available as a <strong>single image file for direct download and installation</strong>. This greatly simplifies and enables a much quicker installation of the Grid Infrastructure software.</li> </ul> </ul> <p>&nbsp;</p> <ul> <ul> <li>We just have to extract the image file <strong>linuxx64_12201_grid_home.zip</strong> into an empty directory where we want the Grid home to be located.</li> </ul> </ul> <p>&nbsp;</p> <ul> <ul> <li>Once the software has been extracted we have to run the <strong>gridSetup.sh</strong> script which will launch the installer where we can perform both an initial install as well as an upgrade.</li> </ul> </ul> <p>&nbsp;</p> <ul> <ul> <li>We need to have about <strong>33 GB of free disk space in the ASM disk groups</strong> for the upgrade process.</li> </ul> </ul> <p>&nbsp;</p> <ul> <ul> <li>The mount point which hosts the Grid Infrastructure home needs to have at least <strong>12 GB of free disk space</strong>.</li> </ul> </ul> <p>&nbsp;</p> <ul> <ul> <li>It is now<strong> mandatory to store the Oracle Clusterware files like the Cluster Registry (OCR) and Voting Disks on ASM</strong> and we cannot locate these files now on any kind of other shared storage system.</li> </ul> </ul> <p>&nbsp;</p> <ul> <ul> <li>We have to install a <strong>mandatory patch 21255373</strong> to the Grid Infrastructure software home.  We will see that in this case a number of prerequisite checks have failed related to memory (now needs <strong>8 GB minimum RAM</strong> on each node ) as well as other checks related to swap size, NTP and resolv.conf &#8211; since this is test Virtual Box environment we can ignore those and continue with the upgrade &#8211; however we cannot ignore the mandatory patch 21255373 which needs to be applied to the existing 12.1.0.2 Grid Infrastructure home.</li> </ul> </ul> <p>&nbsp;</p> <ul> <ul> <li>In order to install the patch, we have to also download the opatch patch 6880880 for Oracle 12.2.0.1.0 (opatch 12.2.0.1.8).</li> </ul> </ul> <p>&nbsp;</p> <ul> <ul> <li>When we run opatchauto to apply the patch 21255373, we get an error <strong><span class="skimlinks-unlinked">java.text.ParseException</span>: Unparseable date</strong>.  This is because time zone TZ entry AWST (Australian Western Standard Time)  is added into $ORACLE_HOME/inventory/ContentsXML/<span class="skimlinks-unlinked">comps.xml and the opatch is using $ORACLE_HOME/jdk/jre, which is version 1.6. Java 1.6 is not able read the TZ entry AWST. We can ignore the error and continue with  the patch application &#8211; but after the patch has been applied, <strong>we have to change all the occurrences of string &#8220;AWST&#8221; in the comps.xml file to &#8220;WST&#8221;</strong> &#8211; otherwise even though we have applied the patch, the command opatch lsinventory will not show that the patch has been applied until the date format string in the comps.xml is changed as mentioned earlier.</span><strong><br /> </strong></li> </ul> </ul> <p>&nbsp;</p> <ul> <ul> <li>Upgrade failed at 46% in the phase Execute Root Scripts. Ran the command <strong>crsctl stop crs -f</strong> as root on each node and clicked on the Retry button and the upgrade then continued without any error</li> </ul> </ul> <p>&nbsp;</p> <ul> <ul> <li>At the end of the upgrade, the Cluster Verification Utility fails because it checks for NTP configuration appropriate for an Oracle RAC environment. NTP is not configured on this Virtual Box environment so we can ignore the error</li> </ul> </ul> <p>&nbsp;</p> <p>&nbsp;</p> <p>Here are some screen shots captured while the 12c Release 2 Grid Infrastructure upgrade was in progress&#8230;..</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi1.jpg" rel="attachment wp-att-7431"><img class="aligncenter size-full wp-image-7431" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi1.jpg" alt="gi1" width="606" height="476" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi1.jpg 606w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi1-300x236.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi1-300x236@2x.jpg 600w" sizes="(max-width: 606px) 100vw, 606px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi2.jpg" rel="attachment wp-att-7432"><img class="aligncenter size-full wp-image-7432" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi2.jpg" alt="gi2" width="554" height="419" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi2.jpg 554w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi2-300x227.jpg 300w" sizes="(max-width: 554px) 100vw, 554px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi3.jpg" rel="attachment wp-att-7433"><img class="aligncenter size-full wp-image-7433" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi3.jpg" alt="gi3" width="798" height="597" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi3.jpg 798w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi3-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi3-768x575.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi3-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi3-300x224@2x.jpg 600w" sizes="(max-width: 798px) 100vw, 798px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi4.jpg" rel="attachment wp-att-7434"><img class="aligncenter size-full wp-image-7434" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi4.jpg" alt="gi4" width="804" height="598" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi4.jpg 804w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi4-300x223.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi4-768x571.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi4-300x223@2x.jpg 600w" sizes="(max-width: 804px) 100vw, 804px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi5.jpg" rel="attachment wp-att-7435"><img class="aligncenter size-full wp-image-7435" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi5.jpg" alt="gi5" width="798" height="598" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi5.jpg 798w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi5-300x225.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi5-768x576.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi5-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi5-300x225@2x.jpg 600w" sizes="(max-width: 798px) 100vw, 798px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi6.jpg" rel="attachment wp-att-7436"><img class="aligncenter size-full wp-image-7436" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi6.jpg" alt="gi6" width="800" height="599" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi6.jpg 800w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi6-300x225.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi6-768x575.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi6-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi6-300x225@2x.jpg 600w" sizes="(max-width: 800px) 100vw, 800px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi7.jpg" rel="attachment wp-att-7437"><img class="aligncenter size-full wp-image-7437" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi7.jpg" alt="gi7" width="802" height="600" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi7.jpg 802w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi7-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi7-768x575.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi7-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi7-300x224@2x.jpg 600w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi8.jpg" rel="attachment wp-att-7438"><img class="aligncenter size-full wp-image-7438" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi8.jpg" alt="gi8" width="797" height="600" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi8.jpg 797w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi8-300x226.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi8-768x578.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi8-300x226@2x.jpg 600w" sizes="(max-width: 797px) 100vw, 797px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi9.jpg" rel="attachment wp-att-7439"><img class="aligncenter wp-image-7439" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi9.jpg" alt="gi9" width="987" height="327" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi9.jpg 1322w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi9-300x99.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi9-768x254.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi9-1024x339.jpg 1024w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi9-300x99@2x.jpg 600w" sizes="(max-width: 987px) 100vw, 987px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi10.jpg" rel="attachment wp-att-7440"><img class="aligncenter size-full wp-image-7440" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi10.jpg" alt="gi10" width="953" height="524" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi10.jpg 953w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi10-300x165.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi10-768x422.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi10-300x165@2x.jpg 600w" sizes="(max-width: 953px) 100vw, 953px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi11.jpg" rel="attachment wp-att-7441"><img class="aligncenter size-full wp-image-7441" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi11.jpg" alt="gi11" width="802" height="602" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi11.jpg 802w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi11-300x225.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi11-768x576.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi11-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi11-300x225@2x.jpg 600w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi12.jpg" rel="attachment wp-att-7442"><img class="aligncenter size-full wp-image-7442" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi12.jpg" alt="gi12" width="804" height="601" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi12.jpg 804w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi12-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi12-768x574.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi12-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi12-300x224@2x.jpg 600w" sizes="(max-width: 804px) 100vw, 804px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi13.jpg" rel="attachment wp-att-7443"><img class="aligncenter size-full wp-image-7443" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi13.jpg" alt="gi13" width="799" height="597" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi13.jpg 799w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi13-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi13-768x574.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi13-300x224@2x.jpg 600w" sizes="(max-width: 799px) 100vw, 799px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi14.jpg" rel="attachment wp-att-7444"><img class="aligncenter size-full wp-image-7444" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi14.jpg" alt="gi14" width="800" height="604" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi14.jpg 800w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi14-300x227.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi14-768x580.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi14-300x227@2x.jpg 600w" sizes="(max-width: 800px) 100vw, 800px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi15.jpg" rel="attachment wp-att-7445"><img class="aligncenter size-full wp-image-7445" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi15.jpg" alt="gi15" width="801" height="600" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi15.jpg 801w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi15-300x225.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi15-768x575.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi15-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi15-300x225@2x.jpg 600w" sizes="(max-width: 801px) 100vw, 801px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi16.jpg" rel="attachment wp-att-7446"><img class="aligncenter size-full wp-image-7446" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi16.jpg" alt="gi16" width="800" height="598" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi16.jpg 800w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi16-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi16-768x574.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi16-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi16-300x224@2x.jpg 600w" sizes="(max-width: 800px) 100vw, 800px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi17.jpg" rel="attachment wp-att-7447"><img class="aligncenter size-full wp-image-7447" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi17.jpg" alt="gi17" width="801" height="599" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi17.jpg 801w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi17-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi17-768x574.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi17-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi17-300x224@2x.jpg 600w" sizes="(max-width: 801px) 100vw, 801px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi18.jpg" rel="attachment wp-att-7448"><img class="aligncenter size-full wp-image-7448" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi18.jpg" alt="gi18" width="800" height="602" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi18.jpg 800w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi18-300x226.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi18-768x578.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi18-300x226@2x.jpg 600w" sizes="(max-width: 800px) 100vw, 800px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi19.jpg" rel="attachment wp-att-7449"><img class="aligncenter size-full wp-image-7449" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi19.jpg" alt="gi19" width="1042" height="362" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi19.jpg 1042w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi19-300x104.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi19-768x267.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi19-1024x356.jpg 1024w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi19-300x104@2x.jpg 600w" sizes="(max-width: 1042px) 100vw, 1042px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>Note:</p> <p>Change all occurrences of &#8220;AWST&#8221; to &#8220;WST&#8221; in comps.xml file</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi22.jpg" rel="attachment wp-att-7450"><img class="aligncenter size-full wp-image-7450" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi22.jpg" alt="gi22" width="649" height="157" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi22.jpg 649w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi22-300x73.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi22-300x73@2x.jpg 600w" sizes="(max-width: 649px) 100vw, 649px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>Now opatch lsinventory command will show that the patch 21255373 has been applied.</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi23.jpg" rel="attachment wp-att-7451"><img class="aligncenter size-full wp-image-7451" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi23.jpg" alt="gi23" width="640" height="176" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi23.jpg 640w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi23-300x83.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi23-300x83@2x.jpg 600w" sizes="(max-width: 640px) 100vw, 640px" /></a> <a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi24.jpg" rel="attachment wp-att-7452"><img class="aligncenter size-full wp-image-7452" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi24.jpg" alt="gi24" width="613" height="244" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi24.jpg 613w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi24-300x119.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi24-300x119@2x.jpg 600w" sizes="(max-width: 613px) 100vw, 613px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi25.jpg" rel="attachment wp-att-7453"><img class="aligncenter size-full wp-image-7453" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi25.jpg" alt="gi25" width="806" height="600" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi25.jpg 806w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi25-300x223.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi25-768x572.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi25-300x223@2x.jpg 600w" sizes="(max-width: 806px) 100vw, 806px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi26.jpg" rel="attachment wp-att-7454"><img class="aligncenter size-full wp-image-7454" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi26.jpg" alt="gi26" width="802" height="604" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi26.jpg 802w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi26-300x226.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi26-768x578.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi26-300x226@2x.jpg 600w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi27.jpg" rel="attachment wp-att-7455"><img class="aligncenter size-full wp-image-7455" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi27.jpg" alt="gi27" width="801" height="598" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi27.jpg 801w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi27-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi27-768x573.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi27-300x224@2x.jpg 600w" sizes="(max-width: 801px) 100vw, 801px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi28.jpg" rel="attachment wp-att-7456"><img class="aligncenter size-full wp-image-7456" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi28.jpg" alt="gi28" width="804" height="599" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi28.jpg 804w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi28-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi28-768x572.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi28-300x224@2x.jpg 600w" sizes="(max-width: 804px) 100vw, 804px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi29.jpg" rel="attachment wp-att-7457"><img class="aligncenter size-full wp-image-7457" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi29.jpg" alt="gi29" width="805" height="602" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi29.jpg 805w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi29-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi29-768x574.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi29-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi29-300x224@2x.jpg 600w" sizes="(max-width: 805px) 100vw, 805px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi30.jpg" rel="attachment wp-att-7458"><img class="aligncenter size-full wp-image-7458" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi30.jpg" alt="gi30" width="799" height="601" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi30.jpg 799w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi30-300x226.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi30-768x578.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi30-300x226@2x.jpg 600w" sizes="(max-width: 799px) 100vw, 799px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi31.jpg" rel="attachment wp-att-7459"><img class="aligncenter size-full wp-image-7459" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi31.jpg" alt="gi31" width="794" height="595" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi31.jpg 794w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi31-300x225.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi31-768x576.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi31-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi31-300x225@2x.jpg 600w" sizes="(max-width: 794px) 100vw, 794px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi32.jpg" rel="attachment wp-att-7460"><img class="aligncenter size-full wp-image-7460" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi32.jpg" alt="gi32" width="804" height="599" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi32.jpg 804w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi32-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi32-768x572.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi32-300x224@2x.jpg 600w" sizes="(max-width: 804px) 100vw, 804px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi33.jpg" rel="attachment wp-att-7461"><img class="aligncenter size-full wp-image-7461" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi33.jpg" alt="gi33" width="792" height="593" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi33.jpg 792w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi33-300x225.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi33-768x575.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi33-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi33-300x225@2x.jpg 600w" sizes="(max-width: 792px) 100vw, 792px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi34.jpg" rel="attachment wp-att-7462"><img class="aligncenter size-full wp-image-7462" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi34.jpg" alt="gi34" width="802" height="600" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi34.jpg 802w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi34-300x224.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi34-768x575.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi34-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi34-300x224@2x.jpg 600w" sizes="(max-width: 802px) 100vw, 802px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi35.jpg" rel="attachment wp-att-7463"><img class="aligncenter size-full wp-image-7463" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi35.jpg" alt="gi35" width="796" height="597" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi35.jpg 796w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi35-300x225.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi35-768x576.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi35-627x470.jpg 627w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi35-300x225@2x.jpg 600w" sizes="(max-width: 796px) 100vw, 796px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi36.jpg" rel="attachment wp-att-7464"><img class="aligncenter size-full wp-image-7464" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi36.jpg" alt="gi36" width="795" height="599" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi36.jpg 795w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi36-300x226.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi36-768x579.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi36-300x226@2x.jpg 600w" sizes="(max-width: 795px) 100vw, 795px" /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://gavinsoorma.com/wp-content/uploads/2017/03/gi37.jpg" rel="attachment wp-att-7465"><img class="aligncenter size-full wp-image-7465" src="http://gavinsoorma.com/wp-content/uploads/2017/03/gi37.jpg" alt="gi37" width="770" height="310" srcset="http://gavinsoorma.com/wp-content/uploads/2017/03/gi37.jpg 770w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi37-300x121.jpg 300w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi37-768x309.jpg 768w, http://gavinsoorma.com/wp-content/uploads/2017/03/gi37-300x121@2x.jpg 600w" sizes="(max-width: 770px) 100vw, 770px" /></a></p> Gavin Soorma http://gavinsoorma.com/?p=7466 Fri Mar 10 2017 08:51:52 GMT-0500 (EST) Help! My Data Visualization Desktop Maps Stopped Working! https://realtrigeek.com/2017/03/10/help-my-data-visualization-desktop-maps-stopped-working/ <p>Twice in the past 2 days, I have had coworkers reach out because their maps in Oracle Data Visualization Desktop stopped rendering. When they switched the visualization away from a map, a visualization would show. Likewise, when they exported a project (.dva) and sent it to a coworker for testing, it worked for the recipient. What we found was that both people ran a Disk Cleanup on their machine recently. It seems that Disk Cleanup deletes some necessary files (presumably from a temp directory) for map rendering for DVD. If this has happened to you, here are the steps to fix DVD and maps:</p> <ol> <li>First see if you can export the project (.dva), delete the project from DVD, then reimport into DVD. If it works, then you are good to go! If not,&#8230;</li> <li>Make sure you export each of your projects that you want to save.</li> <li>Uninstall DVD.</li> <li>Delete the following folder from your machine: C:\Users\{username}\AppData\Local\DVDesktop (yes, the whole folder!)</li> <li>Reinstall DVD (reinstall Advanced Analytics if desired)</li> <li>Import your projects.</li> </ol> <p>You should be good to go!</p><br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/epmqueen.wordpress.com/1409/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/epmqueen.wordpress.com/1409/" /></a> <img alt="" border="0" src="https://pixel.wp.com/b.gif?host=realtrigeek.com&#038;blog=70089387&#038;post=1409&#038;subd=epmqueen&#038;ref=&#038;feed=1" width="1" height="1" /> Sarah Craynon Zumbrum http://realtrigeek.com/?p=1409 Fri Mar 10 2017 08:51:15 GMT-0500 (EST) Happy 20th Birthday ODTUG http://www.odtug.com/p/bl/et/blogaid=680&source=1 On March 13, 2017, ODTUG celebrates its 20th birthday! 20 years of evolving technology and ODTUG is still the user group that keeps you on the cutting-edge of the constantly changing Oracle technology landscape. In honor of ODTUG’s birthday you can save $200 off your ODTUG Kscope17 registration. ODTUG http://www.odtug.com/p/bl/et/blogaid=680&source=1 Thu Mar 09 2017 11:22:59 GMT-0500 (EST) Accelerating Your ODI Implementation, Rittman Mead Style http://www.rittmanmead.com/blog/2017/03/accelerating-your-odi-implementation-rittmanmead-style/ <h2 id="introduction">Introduction</h2> <p>Over the years, at Rittman Mead, we've built up quite a collection of tooling for ODI. We have accelerators, scripts, reports, templates and even entire frameworks at our disposal for when the right use case arises. Many of these tools exploit the power of the excellent ODI SDK to automate tasks that would otherwise be a chore to perform manually. Tasks like, topology creation, model automation, code migration and variable creation. </p> <p>In this blog post, I'm going to give you a demo of our latest addition, <strong>a tool that allows you to programmatically create ODI mappings</strong>. ( and a few other tricks )</p> <p>So you may be thinking <strong><em>isn't that already possible using the ODI SDK ?</em></strong> and you'd be right, it most definitely is. There are many examples out there that show you how it's done, but they all have one thing in common, they create a fairly simple mapping, with, relatively speaking, quite a lot of code and are only useful for creating the said mapping.</p> <p>And herein lies the obvious question, <strong>Why <em>would</em> you create a mapping using the ODI SDK, when it's quicker to use ODI Studio ?</strong></p> <p>And the obvious answer is...you wouldn't, unless, you were trying to <strong>automate the creation of multiple mappings using metadata</strong>. </p> <p>This is a reasonable approach using the raw ODI SDK, the typical use case being the automation of your source to stage mappings. These mappings tend to be simple 1 to 1 mappings, the low hanging fruit of automation if you like. The problem arises though, when you want to <strong>automate the creation of a <em>variety</em> of more complex mappings</strong>, you run the risk of spending more time writing the automation code, than you would actually save due to the automation itself. The point of diminishing return can creep up pretty quickly.</p> <p>The principle, however, is sound. Automate as much as possible by leveraging metadata and free up your ODI Developers to tackle the more complex stuff. <br> <br> </p> <h2 id="allaboardtherittmanmeadmetadatatrain">All Aboard the Rittman Mead Metadata Train !</h2> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/mdtrain.png" alt=""></p> <p>What would be really nice is something more succinct, more elegant, something that allows us to create <strong><em>any mapping</em></strong>, with minimal code and fuss.</p> <p>Something that will allow us to further accelerate...</p> <ul> <li><strong>Migrating to ODI from other ETL products</strong></li> <li><strong>Greenfield ODI Projects</strong></li> <li><strong>Day to Day ODI Development work</strong></li> </ul> <p>..all powered by juicy <strong>metadata</strong>.</p> <p>These were the design goals for our latest tool. To meet these goals, we created a mini-mapping-language on top of the ODI SDK. This mini-mapping-language abstracts away the SDK's complexities, while, at the same time, retaining its inherent power. We call this mini mapping language <strong>OdiDsl</strong> ( Oracle Data Integrator Domain Specific Language ) catchy heh?! <br> <br> </p> <h2 id="odidsl">OdiDsl</h2> <p><strong>OdiDsl</strong> is written in Groovy and looks something like this...</p> <pre><code>/* * OdiDsl to create a SCD2 dimension load mapping. */ mapping.drop('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') mapping.create('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') .datastores([ [name: "HR.EMPLOYEES"], [name: "HR.DEPARTMENTS"], [name: "HR.JOBS"], [name: "PERF.D_EMPLOYEE", integration_type: "SCD"], ]) .select("EMPLOYEES") .filter('NAME_FILTER', [filter_condition: "EMPLOYEES.FIRST_NAME LIKE 'D%'" ]) .join('EMP_DEPT', ['DEPARTMENTS'], [join_condition: "EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID" ]) .join('DEPT_JOBS', ['JOBS'], [join_condition: "EMPLOYEES.JOB_ID = JOBS.JOB_ID" ]) .connect("D_EMPLOYEE", [ [ attr: "employee_id", key_indicator: true ], [ attr: "eff_from_date", expression: "sysdate", execute_on_hint: "TARGET"], [ attr: "eff_to_date", expression: "sysdate", execute_on_hint: "TARGET"], [ attr: "current_flag", expression: 1, execute_on_hint: "TARGET"], [ attr: "surr_key", expression: ":RM_PROJECT.D_EMPLOYEE_SEQ_NEXTVAL", execute_on_hint: "TARGET"], ]) .commit() .validate() </code></pre> <p>The above code will create the following, fully functional, mapping in ODI 12c (sorry 11g).</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/mapping.png" alt=""></p> <p>It should be <em>fairly</em> easy to eyeball the code and reconcile it with the above mapping image. We can see that we are specifying our datastores, selecting the <code>EMPLOYEES</code> datastore, adding a filter, a couple of joins and then connecting to our target. <strong>OdiDsl</strong> has been designed in such a way that it mimics the <strong>flow based style</strong> of ODI 12c's mappings by chaining components onto one another. <br> <br> </p> <h2 id="creatingamappingusingodidsl">Creating a Mapping Using OdiDsl</h2> <p>Let's walk through the above code, starting with just the datastores, adding the rest as we go along...</p> <h3 id="datastores">Datastores</h3> <p>We start by creating the mapping with <code>mapping.create( &lt;project&gt;, &lt;folder&gt;, &lt;mapping name&gt;)</code>. We then chain the <code>.datastores()</code>, <code>.commit()</code> and <code>.validate()</code> methods onto it using the "dot" notation. The <code>.datastores()</code> method is the only method you can chain directly onto <code>mapping.create()</code> as it's a requirement to add some datastores before you start building up the mapping. The <code>.commit()</code> method persists the mapping in the repository and the <code>.validate()</code> method calls ODI's validation routine on the mapping to check if all is ok.</p> <pre><code>/* * OdiDsl to create a mapping with 4 datastores. */ mapping.drop('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') mapping.create('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') .datastores([ [name: "HR.EMPLOYEES"], [name: "HR.DEPARTMENTS"], [name: "HR.JOBS"], [name: "PERF.D_EMPLOYEE", integration_type: "SCD"], ]) .commit() .validate() </code></pre> <p>When we execute this code it returns the following to the console. You can see that the mapping has been dropped/created and that ODI has some validation warnings for us.</p> <pre><code>Connecting to the repository... mapping EMPLOYEE_DIM_LOAD dropped mapping EMPLOYEE_DIM_LOAD created Validation Results ------------------ WARNING: Mapping component EMPLOYEES has no input or output connections. WARNING: Mapping component DEPARTMENTS has no input or output connections. WARNING: Mapping component JOBS has no input or output connections. WARNING: Mapping component D_EMPLOYEE has no input or output connections. </code></pre> <p>And here is the mapping in ODI - well, it's a start at least...</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/datastores.png" alt=""></p> <h3 id="startingtheflowwithafilter">Starting the Flow with a Filter</h3> <p>Before we can start building up the rest of the mapping we need to select a starting datastore to chain off, you've got to start somewhere right? For that, we call <code>.select("EMPLOYEES")</code>, which is a bit like clicking and selecting the component in ODI Studio. The <code>.filter()</code> method is then chained onto it, passing in the filter name and some configuration, in this case, the actual filter condition.</p> <pre><code>/* * OdiDsl to create a mapping with 4 datastores and a filter. */ mapping.drop('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') mapping.create('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') .datastores([ [name: "HR.EMPLOYEES"], [name: "HR.DEPARTMENTS"], [name: "HR.JOBS"], [name: "PERF.D_EMPLOYEE", integration_type: "SCD"], ]) .select("EMPLOYEES") .filter('NAME_FILTER', [filter_condition: "EMPLOYEES.FIRST_NAME LIKE 'D%'" ]) .commit() .validate() </code></pre> <p>We now have an error in the validation results. This is expected as our filter doesn't connect to anything downstream yet. </p> <pre><code>Connecting to the repository... mapping EMPLOYEE_DIM_LOAD dropped mapping EMPLOYEE_DIM_LOAD created Validation Results ------------------ WARNING: Mapping component DEPARTMENTS has no input or output connections. WARNING: Mapping component JOBS has no input or output connections. WARNING: Mapping component D_EMPLOYEE has no input or output connections. ERROR: Mapping component NAME_FILTER must have a connection for output connector point OUTPUT1. </code></pre> <p>And here's the mapping, as you can see the filter is connected to the EMPLOYEES datastore output connector. <br> <img src="http://www.rittmanmead.com/blog/content/images/2017/03/datastores_filter.png" alt=""></p> <h3 id="addingajoin">Adding a Join</h3> <p>Next we'll create the join between the filter and the <code>DEPARTMENTS</code> table. To do this we can just chain a <code>.join()</code> onto the <code>.filter()</code> method and pass in some arguments to specify the join name, what it joins to and the join condition itself. </p> <pre><code>/* * OdiDsl to create a mapping with 4 datastores a filter and a join. */ mapping.drop('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') mapping.create('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') .datastores([ [name: "HR.EMPLOYEES"], [name: "HR.DEPARTMENTS"], [name: "HR.JOBS"], [name: "PERF.D_EMPLOYEE", integration_type: "SCD"], ]) .select("EMPLOYEES") .filter('NAME_FILTER', [filter_condition: "EMPLOYEES.FIRST_NAME LIKE 'D%'" ]) .join('EMP_DEPT', ['DEPARTMENTS'], [join_condition: "EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID" ]) .commit() .validate() </code></pre> <p> Only 2 validation warnings and no errors this time... </p> <pre><code>Connecting to the repository... mapping EMPLOYEE_DIM_LOAD dropped mapping EMPLOYEE_DIM_LOAD created Validation Results ------------------ WARNING: Mapping component JOBS has no input or output connections. WARNING: Mapping component D_EMPLOYEE has no input or output connections. </code></pre> <p>We now have a join named <code>EMP_DEPT</code> joining <code>DEPARTMENTS</code> and the filter, <code>NAME_FILTER</code>, together. <br> <img src="http://www.rittmanmead.com/blog/content/images/2017/03/datastores_filter_join.png" alt=""></p> <h3 id="addinganotherjoin">Adding another Join</h3> <p>We'll now do the same for the final join. </p> <pre><code>/* * OdiDsl to create a mapping with 4 datastores, a filter and 2 joins. */ mapping.drop('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') mapping.create('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') .datastores([ [name: "HR.EMPLOYEES"], [name: "HR.DEPARTMENTS"], [name: "HR.JOBS"], [name: "PERF.D_EMPLOYEE", integration_type: "SCD"], ]) .select("EMPLOYEES") .filter('NAME_FILTER', [filter_condition: "EMPLOYEES.FIRST_NAME LIKE 'D%'" ]) .join('EMP_DEPT', ['DEPARTMENTS'], [join_condition: "EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID" ]) .join('DEPT_JOBS', ['JOBS'], [join_condition: "EMPLOYEES.JOB_ID = JOBS.JOB_ID" ]) .commit() .validate() </code></pre> <p> looking better all the time... </p> <pre><code>Connecting to the repository... mapping EMPLOYEE_DIM_LOAD dropped mapping EMPLOYEE_DIM_LOAD created Validation Results ------------------ WARNING: Mapping component D_EMPLOYEE has no input or output connections. </code></pre> <p>And we now have a join named <code>DEPT_JOBS</code> joining <code>JOBS</code> and the join, <code>EMP_DEPT</code>, to each other. <br> <img src="http://www.rittmanmead.com/blog/content/images/2017/03/datastores_filter_join_join.png" alt=""></p> <h3 id="connectingtothetarget">Connecting to the target</h3> <p>The final step is to connect the <code>DEPT_JOBS</code> join to our target datastore, <code>D_EMPLOYEE</code>. For this we can use the <code>.connect()</code> method. This method is used to map upstream attributes to a datastore. When you perform this action in ODI Studio, you'll be prompted with the attribute matching dialog, with options to auto-map the attributes.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/attribute_mapping.png" alt=""></p> <p><strong>OdiDsl</strong> will, by default, auto-map all attributes that are not explicitly mapped in the <code>.connect()</code> method. In our completed code example below we are explicitly mapping several attributes to support SCD2 functionality, auto-map takes care of the rest.</p> <pre><code>/* * OdiDsl to create a SCD2 dimension load mapping */ mapping.drop('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') mapping.create('MY_PROJECT', 'DEMO_FOLDER', 'EMPLOYEE_DIM_LOAD') .datastores([ [name: "HR.EMPLOYEES"], [name: "HR.DEPARTMENTS"], [name: "HR.JOBS"], [name: "PERF.D_EMPLOYEE", integration_type: "SCD"], ]) .select("EMPLOYEES") .filter('NAME_FILTER', [filter_condition: "EMPLOYEES.FIRST_NAME LIKE 'D%'" ]) .join('EMP_DEPT', ['DEPARTMENTS'], [join_condition: "EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID" ]) .join('DEPT_JOBS', ['JOBS'], [join_condition: "EMPLOYEES.JOB_ID = JOBS.JOB_ID" ]) .connect("D_EMPLOYEE", [ [ attr: "employee_id", key_indicator: true ], [ attr: "eff_from_date", expression: "sysdate", execute_on_hint: "TARGET"], [ attr: "eff_to_date", expression: "sysdate", execute_on_hint: "TARGET"], [ attr: "current_flag", expression: 1, execute_on_hint: "TARGET"], [ attr: "surr_key", expression: ":RM_PROJECT.D_EMPLOYEE_SEQ_NEXTVAL", execute_on_hint: "TARGET"], ]) .commit() .validate() </code></pre> <p> Nice, all validated this time. </p> <pre><code>Connecting to the repository... mapping EMPLOYEE_DIM_LOAD dropped mapping EMPLOYEE_DIM_LOAD created Validation Successful </code></pre> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/02/mapping.png" alt=""> <br> </p> <h2 id="whataboutupdates">What about Updates ?</h2> <p>Yes. We can also <strong><em>update an existing mapping</em></strong> using <code>mapping.update(&lt;project&gt;, &lt;folder&gt;, &lt;mapping name&gt;)</code>. This is useful when you need to make changes to multiple mappings or when you can't drop and recreate a mapping due to a dependency. The approach is the same, we start by selecting a component with <code>.select()</code> and then chain a method onto it, in this case, <code>.config()</code>. </p> <pre><code>mapping.update('MYPROJECT', 'DEMO', "EMPLOYEE_DIM_LOAD") .select('DEPT_JOBS') .config([join_type: "LEFT_OUTER"]) </code></pre> <p><br> </p> <h2 id="whichpropertiescanichangeforeachcomponent">Which Properties Can I Change for each Component ?</h2> <p>Probably more than you'll ever need to, <strong>OdiDsl</strong> mirrors the properties that are available in ODI Studio via the SDK. <br> <br> </p> <h2 id="canwegenerateodidslcodefromanexistingmapping">Can We Generate OdiDsl Code From an Existing Mapping ?</h2> <p>Yes, we can do that too, with <code>.reverse()</code>. This will allow you to mirror the process.</p> <p>Let's take this, hand built, fictional and completely <code>CRAZY_MAPPING</code> as an example. (fictional and crazy in the sense that it does nothing <em>useful</em>, however, the flow and configuration are completely valid). <br> <img src="http://www.rittmanmead.com/blog/content/images/2017/03/complex-mapping-10.png" alt=""></p> <p>If we execute <code>.reverse()</code> on this mapping by calling... </p> <pre><code>mapping.reverse('MY_PROJECT', 'DEMO_FOLDER', 'CRAZY_MAPPING') </code></pre> <p>...<strong>OdiDsl</strong> will return the following output to the console. What you are seeing here is the <strong>OdiDsl</strong> required to <strong>recreate</strong> the crazy mapping above.</p> <pre><code>Connecting to the repository... mapping.create('MY_PROJECT', 'DEMO_FOLDER', 'CRAZY_MAPPING') .datastores([ ['name':'STAGING.TABLE1', 'alias':'TABLE1'], ['name':'STAGING.TABLE9', 'alias':'TABLE9'], ['name':'STAGING.TABLE3', 'alias':'TABLE3'], ['name':'STAGING.TABLE4', 'alias':'TABLE4'], ['name':'STAGING.TABLE6', 'alias':'TABLE6'], ['name':'STAGING.TABLE5', 'alias':'TABLE5'], ['name':'STAGING.TABLE7', 'alias':'TABLE7'], ['name':'STAGING.TABLE2', 'alias':'TABLE2'], ['name':'STAGING.TABLE8', 'alias':'TABLE8'], ['name':'STAGING.TABLE11', 'alias':'TABLE11'], ['name':'STAGING.TABLE12', 'alias':'TABLE12'], ['name':'STAGING.TABLE13', 'alias':'TABLE13'], ['name':'STAGING.TABLE15', 'alias':'TABLE15'], ['name':'STAGING.TABLE14', 'alias':'TABLE14'], ['name':'STAGING.TABLE16', 'alias':'TABLE16'], ['name':'STAGING.TABLE17', 'alias':'TABLE17'], ['name':'STAGING.TABLE42', 'alias':'TABLE42'], ]) .select('TABLE5') .join('JOIN2', ['TABLE7'], [join_condition: "TABLE5.ID = TABLE7.ID" ]) .join('JOIN3', ['TABLE6'], [join_condition: "TABLE6.ID = TABLE7.ID" ]) .connect('TABLE14', [ [ attr: "ID", expression: "TABLE5.ID" ], [ attr: "COL1", expression: "TABLE7.COL1" ], [ attr: "COL2", expression: "TABLE6.COL2" ], [ attr: "COL3", expression: "TABLE7.COL3" ], [ attr: "COL4", expression: "TABLE7.COL4" ], ]) .select('JOIN3') .expr('EXPRESSION1', [attrs: [ [ attr: "ID", expression: "TABLE6.ID * 42", datatype: "NUMERIC", size: "38", scale: "0"]]]) .connect('TABLE15', [ [ attr: "ID", expression: "EXPRESSION1.ID" ], [ attr: "COL1", expression: "", active_indicator: false ], [ attr: "COL2", expression: "TABLE6.COL2" ], [ attr: "COL3", expression: "TABLE7.COL3" ], [ attr: "COL4", expression: "", active_indicator: false ], ]) .join('JOIN', ['TABLE14'], [join_condition: "TABLE14.ID = TABLE15.ID" ]) .filter('FILTER2', [filter_condition: "TABLE15.COL3 != 'FOOBAR'" ]) .connect('TABLE16', [ [ attr: "ID", expression: "TABLE15.ID" ], [ attr: "COL1", expression: "TABLE15.COL1" ], [ attr: "COL2", expression: "TABLE14.COL2" ], [ attr: "COL3", expression: "TABLE14.COL3" ], [ attr: "COL4", expression: "TABLE14.COL4" ], ]) .select('JOIN') .connect('TABLE17', [ [ attr: "ID", expression: "TABLE15.ID" ], [ attr: "COL1", expression: "TABLE15.COL1" ], [ attr: "COL2", expression: "TABLE14.COL2" ], [ attr: "COL3", expression: "TABLE14.COL3" ], [ attr: "COL4", expression: "TABLE14.COL4" ], ]) .select('TABLE5') .sort('SORT1', [sorter_condition: "TABLE5.ID, TABLE5.COL2, TABLE5.COL4" ]) .connect('TABLE13', [ [ attr: "ID", expression: "TABLE5.ID" ], [ attr: "COL1", expression: "TABLE5.COL1" ], [ attr: "COL2", expression: "TABLE5.COL2" ], [ attr: "COL3", expression: "TABLE5.COL3" ], [ attr: "COL4", expression: "TABLE5.COL4" ], ]) .select('TABLE3') .filter('FILTER1', [filter_condition: "TABLE3.ID != 42" ]) .select('TABLE4') .filter('FILTER', [filter_condition: "TABLE4.COL1 = 42" ]) .lookup('LOOKUP1', 'FILTER1', [join_condition: "TABLE4.ID = TABLE3.ID AND TABLE3.COL1 = TABLE4.COL1"]) .join('JOIN5', ['TABLE13'], [join_condition: "TABLE13.ID = TABLE3.ID" ]) .distinct('DISTINCT_', [attrs: [ [ attr: "COL3_1", expression: "TABLE4.COL3", datatype: "VARCHAR", size: "30"], [ attr: "COL4_1", expression: "TABLE4.COL4", datatype: "VARCHAR", size: "30"]]]) .select('DISTINCT_') .join('JOIN4', ['EXPRESSION1'], [join_condition: "TABLE5.ID = TABLE6.COL1" ]) .sort('SORT', [sorter_condition: "EXPRESSION1.ID" ]) .connect('TABLE8', [ [ attr: "ID", expression: "EXPRESSION1.ID" ], [ attr: "COL1", expression: "", active_indicator: false ], [ attr: "COL2", expression: "", active_indicator: false ], [ attr: "COL3", expression: "TABLE7.COL3" ], [ attr: "COL4", expression: "", active_indicator: false ], ]) .connect('TABLE12', [ [ attr: "ID", expression: "TABLE8.ID" ], [ attr: "COL1", expression: "TABLE8.COL1" ], [ attr: "COL2", expression: "TABLE8.COL2" ], [ attr: "COL3", expression: "TABLE8.COL3" ], [ attr: "COL4", expression: "TABLE8.COL4" ], ]) .select('TABLE9') .expr('EXPRESSION', [attrs: [ [ attr: "ID", expression: "TABLE9.ID *42", datatype: "NUMERIC", size: "38", scale: "0"], [ attr: "COL4", expression: "TABLE9.COL4 || 'FOOBAR'", datatype: "VARCHAR", size: "30"]]]) .connect('TABLE1', [ [ attr: "ID", expression: "EXPRESSION.ID" ], [ attr: "COL1", expression: "", active_indicator: false ], [ attr: "COL2", expression: "", active_indicator: false ], [ attr: "COL3", expression: "", active_indicator: false ], [ attr: "COL4", expression: "TABLE9.COL4" ], ]) .join('JOIN1', ['TABLE2'], [join_condition: "TABLE1.ID = TABLE2.ID" ]) .aggregate('AGGREGATE', [attrs: [ [ attr: "ID", expression: "TABLE1.ID", datatype: "NUMERIC", size: "38", scale: "0", group_by: "YES"], [ attr: "COL4_1", expression: "MAX(TABLE2.COL4)", datatype: "VARCHAR", size: "30", group_by: "AUTO"]]]) .lookup('LOOKUP', 'DISTINCT_', [join_condition: "AGGREGATE.ID = DISTINCT_.COL3_1"]) .aggregate('AGGREGATE1', [attrs: [ [ attr: "ID", expression: "AGGREGATE.ID", datatype: "NUMERIC", size: "38", scale: "0", group_by: "YES"], [ attr: "COL4_1_1", expression: "SUM(AGGREGATE.COL4_1)", datatype: "VARCHAR", size: "30", group_by: "AUTO"]]]) .filter('FILTER3', [filter_condition: "AGGREGATE1.COL4_1_1 &gt; 42" ]) .connect('TABLE42', [ [ attr: "ID", expression: "AGGREGATE1.ID" ], ]) .select('AGGREGATE1') .join('JOIN6', ['TABLE8'], [join_condition: "AGGREGATE1.ID = TABLE8.ID" ]) .connect('TABLE11', [ [ attr: "ID", expression: "TABLE8.ID" ], [ attr: "COL1", expression: "" ], [ attr: "COL2", expression: "" ], [ attr: "COL3", expression: "TABLE8.COL3" ], [ attr: "COL4", expression: "TABLE8.COL4" ], ]) .commit() .validate() </code></pre> <p>When we execute this <strong>OdiDsl</strong> code we get, you guessed it, exactly the same crazy mapping with the flow and component properties all intact. <br> <img src="http://www.rittmanmead.com/blog/content/images/2017/03/complex-mapping-11.png" alt=""></p> <p>Being able to flip between ODI studio and <strong>OdiDsl</strong> has some really nice benefits for those who like the workflow. You can start prototyping a mapping in ODI Studio, convert it to code, hack around for a bit and then reflect it all back into ODI. It's also very useful for generating a "code template" from an existing mapping. The generated code template can be modified to accept variables instead of hard coded properties, all you need then is some metadata. <br> <br> </p> <h2 id="didsomebodysaymetadata">Did Somebody Say Metadata ?</h2> <p>Metadata is the key to bulk automation. You can find metadata in all kinds of places. If you are migrating to ODI from another product then there will be a whole mass of metadata living in your current product's repository or via some kind of export routine which typically produces XML files. If you are starting a fresh ODI implementation, then there will be metadata living in your source and target systems, in data dictionaries, in excel sheets, in mapping specifications documents, all over the place really. This is the kind of metadata that can be used to <strong><em>feed</em> OdiDsl</strong>.</p> <p><strong>A Quick Example of One possible Approach to Using OdiDsl With Metadata</strong></p> <p>First we build a mapping in Odi Studio, this will act as our template mapping.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/feedmemetadata.png" alt=""></p> <p>We then generate the equivalent <strong>OdiDsl</strong> code using <code>mapping.reverse('MY_PROJECT', 'DEMO_FOLDER', 'FEED_ME_METADATA')</code>. Which gives us this code.</p> <pre><code>mapping.create('MY_PROJECT', 'DEMO_FOLDER', 'FEED_ME_METADATA') .datastores([ ['name':'STAGING.TABLE1', 'alias':'LOOKUP_TABLE'], ['name':'STAGING.TABLE2', 'alias':'TABLE2'], ['name':'STAGING.TABLE3', 'alias':'TABLE3'], ['name':'STAGING.TABLE4', 'alias':'TARGET_TABLE'], ]) .select('TABLE2') .lookup('LOOKUP', 'LOOKUP_TABLE', [join_condition: "TABLE2.ID = LOOKUP_TABLE.ID"]) .join('JOIN', ['TABLE3'], [join_condition: "TABLE2.ID = TABLE3.ID" ]) .filter('FILTER', [filter_condition: "TABLE3.COL1 = 'FILTER'" ]) .expr('EXPRESSION', [attrs: [ [ attr: "CONSTANT", expression: "42", datatype: "VARCHAR", size: "30"]]]) .connect('TARGET_TABLE', [ [ attr: "ID", expression: "LOOKUP_TABLE.ID" ], [ attr: "COL1", expression: "LOOKUP_TABLE.COL1 || EXPRESSION.CONSTANT" ], [ attr: "COL2", expression: "TABLE2.COL2" ], [ attr: "COL3", expression: "TABLE3.COL3" ], [ attr: "COL4", expression: "LOOKUP_TABLE.COL4" ], ]) .commit() .validate() </code></pre> <p>We now need to decorate this code with some variables, these variables will act as place holders for our metadata. The metadata we are going to use is from a database table, I'm keeping it simple for the purpose of this demonstration but the approach is the same. Our metadata table has 10 rows and from these 10 rows we are going to create 10 mappings, replacing certain properties with the values from the columns.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/data-2.png" alt=""> Remember that <strong>OdiDsl</strong> is expressed in Groovy. That means, as well as <strong>OdiDsl</strong> code, we also have access to the entire Groovy language. In the following code we are using a mixture of Groovy and <strong>OdiDsl</strong>. We are connecting to a database, grabbing our metadata and then looping over <code>mapping.create()</code>, once for each row in our metadata table. The columns in the metadata table are represented as the variables <code>row.datastore</code>, <code>row.constant_expr</code> and <code>row.filter_cond</code>. The code comments indicate where we are substituting these variables in place of our previously hard coded property values. </p> <pre><code>import groovy.sql.Sql // Connect to the database and retrieve rows from the METADATA table. def sqlConn = Sql.newInstance("jdbc:oracle:thin:@hostname:1521/pdborcl", "username", "password", "oracle.jdbc.pool.OracleDataSource") def rows = sqlConn.rows("SELECT * FROM METADATA") sqlConn.close() // For each row in our METADATA table rows.eachWithIndex() { row, index -&gt; mapping.create('MY_PROJECT', 'DEMO_FOLDER', "FEED_ME_METADATA_${index+1}") // Interpolate row number to make the mapping name unique .datastores([ ['name': 'STAGING.TABLE1', 'alias': 'LOOKUP_TABLE'], ['name': "STAGING.${row.datastore}" ], // substitute in a different datastore ['name': 'STAGING.TABLE3', 'alias': 'TABLE3'], ['name': 'STAGING.TABLE4', 'alias': 'TARGET_TABLE'], ]) .select(row.datastore) .lookup('LOOKUP', 'LOOKUP_TABLE', [join_condition: "${row.datastore}.ID = LOOKUP_TABLE.ID"]) // substitute in a different datastore .join('JOIN', ['TABLE3'], [join_condition: "${row.datastore}.ID = TABLE3.ID"]) // substitute in a different datastore .filter('FILTER', [filter_condition: "TABLE3.COL1 = '${row.filter_cond}'"]) // substitute in a different filter condition .expr('EXPRESSION', [attrs: [ [attr: "CONSTANT", expression: row.constant_expr, datatype: "VARCHAR", size: "30"]]]) // substitute in a different constant for the expression .connect('TARGET_TABLE', [ [attr: "ID", expression: "LOOKUP_TABLE.ID"], [attr: "COL1", expression: "LOOKUP_TABLE.COL1 || EXPRESSION.CONSTANT"], [attr: "COL2", expression: "${row.datastore}.COL2"], // substitute in a different datastore [attr: "COL3", expression: "TABLE3.COL3"], [attr: "COL4", expression: "LOOKUP_TABLE.COL4"], ]) .commit() .validate() } </code></pre> <p>Here is the output... </p> <pre><code>Connecting to the repository... mapping FEED_ME_METADATA_1 created Validation Successful mapping FEED_ME_METADATA_2 created Validation Successful mapping FEED_ME_METADATA_3 created Validation Successful mapping FEED_ME_METADATA_4 created Validation Successful mapping FEED_ME_METADATA_5 created Validation Successful mapping FEED_ME_METADATA_6 created Validation Successful mapping FEED_ME_METADATA_7 created Validation Successful mapping FEED_ME_METADATA_8 created Validation Successful mapping FEED_ME_METADATA_9 created Validation Successful mapping FEED_ME_METADATA_10 created Validation Successful </code></pre> <p>And here are our 10 mappings, each with it's own configuration.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/mappings.png" alt=""> If we take a look at the <code>FEED_ME_METADATA_5</code> mapping, we can see the metadata has been reflected into the mapping.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/metamappingannotated.png" alt=""></p> <p>And that's about it. We've basically just built a mini accelerator using <strong>OdiDsl</strong> and we hardly had to write any code. The <strong>OdiDsl</strong> code was generated <em>for</em> us using <code>.reverse()</code>. All we really had to code, was the connection to the database, a loop and bit of variable substitution!</p> <h2 id="summary">Summary</h2> <p>With the Rittman Mead ODI Tool kit, accelerating your ODI implementation has never be easier. If you are thinking about migrating to ODI from another product or embarking on a new ODI Project, Rittman Mead can help. For more information please <a href="mailto:info+tuod@rittmanmead.com">get in touch</a>.</p> Tom Underhill 50098ab2-4bb9-420d-86b3-5554c80f5af4 Thu Mar 09 2017 11:01:16 GMT-0500 (EST) Upcoming ODTUG Webinars http://www.odtug.com/p/bl/et/blogaid=679&source=1 ODTUG Online EducationBelow is the list of upcoming webinars. If there is a topic you would like covered that is not on our current list, or if you would like to present a webinar, please email alicia@odtug.com. Did you miss a webinar? Our Webinar File Library lists all of our webinars and ODTUG http://www.odtug.com/p/bl/et/blogaid=679&source=1 Wed Mar 08 2017 13:31:48 GMT-0500 (EST) Create Your Own DVD Plugin in 22 minutes http://www.rittmanmead.com/blog/2017/03/create-your-own-dvd-plugin-in-22-minutes/ <h2 id="introduction">Introduction</h2> <p>Oracle DVD played well for the task of <a href="https://www.rittmanmead.com/blog/2017/02/analysing-elections-data-with-oracle-data-visualisation-desktop">elections data analysis</a>. But I faced some limitations and had to curtail my use of one of my favourite charts - Scatter chart. While DVD’s implementation of it looks good, has smooth animations and really useful, it is not suitable for visualisations of huge datasets. Election dataset has about 100K election precinct data rows and if I try to plot all of them at one chart I will get something close to this. It doesn't really important what is the data, just compare how charts look like.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/10.png" alt="Picture with Turnout%, United Russia% by PEC"></p> <p>This picture can give us about zero insights. Actually, I'm not even sure if shows my 100K points. What I want to get is something like this: <br> <img src="https://habrastorage.org/files/aa1/95e/747/aa195e7477664873b0f5047b37bb5e45.png" alt="plugin with Turnout%, United Russia% by PEC"> <em>(source: <a href="https://habrahabr.ru/post/313372/">https://habrahabr.ru/post/313372/</a>)</em></p> <p>What can I see at this chart and can't see at the vanilla one? First of all, it gives a much better understanding of points distribution other the plot. I can see a relatively dense core around coordinates [30;40] and then not so dense tail growing by both dimensions and again a small and very dense core in the top right corner. <br> Secondly, it not only shows dense and sparse areas but shows that there are exist a few points which have an unexplainably high concentration. Around [64;62], for example. </p> <p>Luckily DVD allows me (<a href="https://sites.google.com/site/oraclebipublicstore/downloads">and anyone else too</a>) create custom plugins. That's what I'm going to show here. The plugin I'm going to do is something I'd call Minimum Viable Product. It's very, very simple and needs a lot of work to make it good and really useful.</p> <p>The code I'm going to show is the simplest I can invent. It doesn't handle errors, exceptions and so on. It should be more modular. It possibly could use some optimisation. But that was done for a purpose. And the purpose is called 'simplicity'. If you want a more comprehensive sample, there is a link to the Oracle's guide in the Summary. I want to show you that writing a DVD plugin is not a rocket science. It takes less than half an hour to build your own DVD plugin.</p> <p>And the clock starts now!</p> <h2 id="000540setupenvironmentanddvdsdk">[0:00-5:40] Setup Environment and DVD SDK</h2> <h3 id="setup">Setup</h3> <p><a href="http://www.oracle.com/technetwork/middleware/oracle-data-visualization/downloads/oracle-data-visualization-desktop-2938957.html">Download</a> and install DVD. I presume you already have it, because from my experience people who doesn't have it very rarely feel a need for its plugins. Hence I didn't include download and installation times into 22 minutes.</p> <p>Create a folder to store your plugins and some <a href="https://en.wikipedia.org/wiki/Gradle">Gradle</a>-related configs and scripts. It may be any directory you like, just select your favourite place.</p> <p>Next step is to define some environment variables.</p> <ul> <li>The first one is <code>DVDDESKTOP_SDK_HOME</code> and it should point to thу DVD folder. In most of the cases, it is <code>C:\Program files\Oracle Data Visualisation Desktop</code>. </li> <li>The second variable is <code>PLUGIN_DEV_DIR</code> it points to the folder you created 40 seconds ago. These two variables seem not to be absolutely necessary, but they make your life a bit easier.</li> <li>And one more change to the environment before going further. Add <code>%DVDESKTOP_SDK_HOME%\tools\bin</code> to the <code>PATH</code> variable (do you feel how your life became easier with <code>DVDDESKTOP_SDK_HOME</code> already defined so you can start using it right now?). </li> </ul> <p>And the last step is to initialise our development environment. Go to the plugins directory and execute the initialization command. Open <strong>cmd</strong> window and execute: </p> <pre><code>cd %PLUGIN_DEV_DIR% bicreateenv </code></pre> <p>This will not only initialise everything your need but create a sample plugin to explore and research.</p> <p>Let's take a look at what we got. In the folder we have created before (<code>%PLUGIN_DEV_DIR%</code>) this command generated the following structure.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/20.png" alt="a screenshot of %PLUGIN_DEV_DIR%"></p> <p>All names here are more than self-explanatory. You won't need to do anything with <code>.gradle</code> and <code>gradle</code>, and <code>src</code> stores all the code we will develop. Please notice that <code>src</code> already has sample plugin <code>sampleviz</code>. You may use it as a referrence for your own work.</p> <h3 id="createfirstplugin">Create First Plugin</h3> <p>Every plugin consists of a few parts. We don't need to create them from scratch every time. Oracle gives us a simple way of creating a new plugin. If you didn't close <strong>cmd</strong> window from previous steps execute the following: </p> <pre><code>bicreateplugin viz -id com.rittmanmead.demo -subType dataviz </code></pre> <p>Obviously, you should use your own company name for the id. The last word (<strong>demo</strong>) plus word <strong>Plugin</strong> is what user will see as a visualisation name. Obviously we can change it but not today.</p> <p>This will create a fully operational plugin. Where can we find it? You shouldn't be too surprised if I say "In src folder".</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/30.png" alt="a screenshot of %PLUGIN_DEV_DIR%"></p> <p>And we may test it right now. Yes, its functionality is very limited, but you didn't expect it to do something useful, right?</p> <h3 id="startsdk">Start SDK</h3> <p>Now we should start Oracle DVD in SDK mode. The main difference from the normal mode is that DVD will start in the default browser. That's not a typo. DVD will start as a usual site in a browser. It's a good idea to select as the default a browser with good developer console and tools. I prefer Chrome for this task but that's not the only choice. Choose the browser you'd normally use for site development. When you finish with setting up of the default browser do: </p> <pre><code>cd %PLUGIN_DEV_DIR% .\gradlew run </code></pre> <p>If you don't have an ultrafast computer I'd recommend you to make some tea at this point. Because the very first start will take a long time. Actually, it will consume most of the first stage time. <br> <img src="http://www.rittmanmead.com/blog/content/images/2017/03/35.png" alt=""></p> <h2 id="540615testtheplugin">[5:40-6:15] Test the Plugin</h2> <p>We didn't start changing the first plugin yet, so I expect everything to be OK at this point. But anyway it's a good idea to test everything. I think we can afford 30-40 seconds for this.</p> <p>And again I assume you know how to use DVD and don't need a step-by-step guide on creating a simple visualisation. Just create a new project, select any data source, go to <strong>Visualisations</strong>, find your plugin and add it. You may even add some data to the plugin and it will show how many rows your data has. I think that's a good place to start from.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/blankplugin-1.gif" alt="a picture of plugin"></p> <h2 id="6152200addfunctions">[6:15-22:00] Add Functions</h2> <h3 id="changeparameters">Change parameters</h3> <p>If you didn't skip testing phase and played with this new toy for a while you may have noticed two things we need to change right now. First, for a chosen type of visualisation, I need that my plugin can accept two measures. You possibly noticed that I was unable to add <strong>Number of cancelled ballots</strong> as a second measure. By default a plugin accepts not more than one (zero or one). Luckily it can be changed very easily. </p> <p>We can find all parameter about measures, rows, columns etc inside of <code>extensions</code> folder. In this case it is <code>%PLUGIN_DEV_DIR%\customviz\com-rittmanemad-demo\extensions</code>. Here we can find two folders. The first one is <code>oracle.bi.tech.pluginVisualizationDataHandler</code>and it has only one file <code>com.rittmanemad.demo.visualizationDataHandler.JSON</code>. This file allows us to define which types of input data our plugin has (measures, columns, rows, colour etc.), what are their types (measures/dimensions), which is the default one and so on.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/40-2.png" alt="a picture of json and plugin side-by side"> Here we should change <code>maxCount</code> to 2. This will allow us to add more than one measure to our visualisation.</p> <p>The second thing I want to change is the number of data points. Elections dataset has data about 100K precinct commissions. And DVD's default is 10K. We can change this value in the second configuration file from <code>extensions</code> folder. Its name is <code>oracle.bi.tech.Visualization</code>. There is again only one JSON file <code>com.rittmanmead.demo.json</code>. We need to change <code>rows</code> to 200000. </p> <p>Why 200000 if I need only 100000 points? Well, it's about how data will be passed to our code. Every measure is a separate row, so I need 100K points with 2 measures each and that gives me 200000 rows. It looks like right now that's the only way to have more than one measure in a plugin (at least it's my best knowledge for <strong>DVD 12.2.2.2.0-20170208162627</strong>).</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/50-1.png" alt="a picture of json and plugin side-by side"></p> <p><em>Note. I could change here some things like plugin name, input data types shown to user and so on but my aim is simplicity.</em></p> <p>Now we should restart DVD SDK in order to use new parameters.</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/55-1.png" alt="two measures and ~200K rows"></p> <h3 id="writecode">Write code</h3> <p>For my custom scatter chart I'm going to use <a href="https://d3js.org">d3js JavaScript library</a>. It will allow me to concentrate more on logic and less on HTML manipulation. To add it to my plugin I should add a couple of strings in the beginning of my code.</p> <p>Before: </p> <pre><code>define(['jquery', 'obitech-framework/jsx', 'obitech-report/datavisualization', 'obitech-reportservices/datamodelshapes', 'obitech-reportservices/events', 'obitech-appservices/logger', 'ojL10n!com-rittmanmead-demo/nls/messages', 'obitech-framework/messageformat', 'css!com-rittmanmead-demo/demostyles'], function($, jsx, dataviz, datamodelshapes, events, logger, messages) { </code></pre> <p>After (I added two lines starting with <em>d3</em>): </p> <pre><code>define(['jquery', 'obitech-framework/jsx', 'obitech-report/datavisualization', 'obitech-reportservices/datamodelshapes', 'obitech-reportservices/events', 'obitech-appservices/logger', 'd3js', 'ojL10n!com-rm-domoViz/nls/messages', 'obitech-framework/messageformat', 'css!com-rittmanmead-demo/demostyles'], function($, jsx, dataviz, datamodelshapes, events, logger, d3, messages) { </code></pre> <p>That's all. Now I can use d3js magic. And that's cool.</p> <p>OK, it's time to make our plugin do something more useful than a simple counting of rows. All plugin code is in <code>demo.js</code> file and the main procedure is <code>render</code>. It is called every time DVD needs to update the visualisation. The initial version of this function is really small. Without comments there are only four rows. It retrieves data, counts rows, then finds a container to write and writes a message.</p> <pre><code>Demo.prototype.render = function(oTransientRenderingContext) { // Note: all events will be received after initialize and start complete. We may get other events // such as 'resize' before the render, i.e. this might not be the first event. // Retrieve the data object for this visualization var oDataLayout = oTransientRenderingContext.get(dataviz.DataContextProperty.DATA_LAYOUT); // Determine the number of records available for rendering on ROW // Because we specified that Category should be placed on ROW in the data model handler, // this returns the number of rows for the data in Category. var nRows = oDataLayout.getEdgeExtent(datamodelshapes.Physical.ROW); // Retrieve the root container for our visualization. This is provided by the framework. It may not be deleted // but may be used to render. var elContainer = this.getContainerElem(); $(elContainer).html(messages.TEXT_MESSAGE.format("Demo Plugin", "" + nRows)); }; </code></pre> <p>First of all, I need to know the actual size of the plotting area. I simply added that after <code>var elContainer = this.getContainerElem();</code>: </p> <pre><code> [...] var elContainer = this.getContainerElem(); //container dimensions var nWidth = $(elContainer).width(); var nHeight = $(elContainer).height(); [...] </code></pre> <p>The template plugin has code for pulling the data into the script (<code>oDataLayout</code> variable). But for my scatter plot, I need to put this data into an array and find the minimum and the maximum value for both measures. This part of the code is my least favourite one. It looks like currently we can't make two separate measures in a custom viz (or at least I can't find the solution), therefore instead of two nice separate measures, I have them as different rows. Like:</p> <table style="width:400px"> <tr><td>...</td><td>...</td><td>...</td></tr> <tr><td>PEC #1</td><td>Turnout,%</td><td>34,8%</td></tr> <tr><td>PEC #1</td><td>United Russia,%</td><td>44,3%</td></tr> <tr><td>PEC #2</td><td>Turnout,%</td><td>62,1%</td></tr> <tr><td>PEC #2</td><td>United Russia,%</td><td>54,2%</td></tr> <tr><td>PEC #3</td><td>Turnout,%</td><td>25,9%</td></tr> <tr><td>PEC #3</td><td>United Russia,%</td><td>33,2%</td></tr> <tr><td>...</td><td>...</td><td>...</td></tr> </table> <p>I really hope that any solution for this will be found. So far I just put even and odd rows into X ad Y coordinates. At the same time, I determine minimum and maximum values for both axes.</p> <pre><code> //temporary measure var tmp_measure; //current measure var cur_measure; var vMinimax=[Number.MAX_VALUE, Number.MIN_VALUE]; var hMinimax=[Number.MAX_VALUE, Number.MIN_VALUE]; for(var i=0;i&lt;nRows;i++){ if(i%2==1){ cur_measure=Number(oDataLayout.getValue(datamodelshapes.Physical.DATA, i, 0, false)); vMinimax[0]=Math.min(vMinimax[0], cur_measure); vMinimax[1]=Math.max(vMinimax[1], cur_measure); points.push([cur_measure,tmp_measure]); } else{ tmp_measure=Number(oDataLayout.getValue(datamodelshapes.Physical.DATA, i, 0, false)); hMinimax[0]=Math.min(hMinimax[0], tmp_measure); hMinimax[1]=Math.max(hMinimax[1], tmp_measure); } } </code></pre> <p>The next part of the code is about handling multiple calls. I should handle things like changing measures or dimensions. I simply delete the old chart and create a new empty one. </p> <pre><code> var oSVG; //Delete old chart if exists d3.select("#DemoViz").remove(); //Create new SVG with id=DemoViz oSVG=d3.select(elContainer).append("svg"); oSVG.attr("id","DemoViz"); //Set plot area size oSVG=oSVG .attr("width", nWidth) .attr("height", nHeight) .append("g"); </code></pre> <p>Now I have an array with data. I have a prepared SVG plot for drawing. And I have no reason not to combine all this into a chart. </p> <pre><code> //Compute scaling factors var hStep=(nWidth-40)/(hMinimax[1]-hMinimax[0]); var vStep=(nHeight-40)/(vMinimax[1]-vMinimax[0]); //Draw oSVG.selectAll("rect") .data(points) .enter() .append("rect") .attr("x", function(d) {return 20+d[1]*hStep;}) .attr("y", function(d) {return nHeight-(20+d[0]*vStep);}) .attr("height",1).attr("width",1) .attr('fill-opacity', 0.3); </code></pre> <p>What I should mention here is opacity. If its value is too high (almost no opacity) the chart looks like this:</p> <p><img src="http://www.rittmanmead.com/blog/content/images/2017/03/60.png" alt="0.99"></p> <p>If I make dots more opaque, the chart looks (and works) better. This is how it looks like with <code>fill-opacity=0.3</code>. <br> <img src="http://www.rittmanmead.com/blog/content/images/2017/03/70-2.png" alt="0.99"> Look at the black point in the middle. It's there because a lot of commissions has exactly the same values for both measures. That's how we could find <a href="https://www.rittmanmead.com/blog/2017/02/analysing-elections-data-with-oracle-data-visualisation-desktop/#Saratov">Saratov region anomaly</a>.</p> <h3 id="2200summaryandtodos">[22:00-] Summary and TODOs</h3> <p>This shows how we may enhance Oracle DVD with our own visualisation. Yes, it's really, really, really simple. And it needs a lot of work in order to make it more useful. First of all, we should make it more reliable. This realisation doesn't test input parameters for correctness. And we also need to add interactivity. The chart should be zoomable and selectable. It should work as a filter. It should react to resize. It needs visible axes. And so on. But we can create it in less than a half of hour and I think as a first step it works well. I hope you don't afraid of making your own plugins now.</p> <p>If you need more complex sample, take a look at the <a href="http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/bi/dvdesktop/viz_plugin/dvd_sdk.html">Oracle's tutorial</a>. It covers some of these TODOs.</p> Andrew Fomin b846abbd-1811-4a84-b754-e24a07b3716d Wed Mar 08 2017 07:45:46 GMT-0500 (EST) Which Version Was It Again? https://medium.com/red-pill-analytics/which-version-was-it-again-e55634267847?source=rss----abcc62a8d63e---4 <figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*P4ChhA_w9yjYADDdLet8dQ.jpeg" /><figcaption><em>Photo Credit to Clem Onojeghuo</em></figcaption></figure><h4>Finding Your OBIEE Version</h4><p>Recently I had to verify the version of an OBIEE installation for a client. As I was already ssh-ed into the Linux machine, I figured there was a way to determine the version without having to log into the presentation server. Turns out I was right, but for thoroughness sake, I’ll cover both approaches.</p><h4>Using Bash (or CMD)</h4><p>Navigate to your installation’s Oracle Home. Next, navigate through the bi directory, and into the bifoundation directory. You’ll find in this directory a file called version.txt. If you open this file, you’ll find all of the relevant details for your installation’s version. Below is a command that will open the file in VI for you. <em>Note: This structure is relevant to both 11g and 12c releases of OBIEE.</em></p><pre>vi &lt;oracle_home&gt;/bi/bifoundation/version.txt</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EKPjSnIwvbXCxMqlXiYXgg.png" /><figcaption>And here is the version file.</figcaption></figure><h4>Using the Presentation Services</h4><p>Perhaps the easiest way for most people to find the version is to use the “Help” menu in the Analytics Presentation Service. To do this, click on the “Help” menu, and then click on “About Oracle BI EE”. A new window will appear and will display the OBIEE version.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/754/1*FhatD6rqWrTco9Re80ur6A.png" /><figcaption>Tell me all your secrets…</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/602/1*6yZB196k8Suk12AyRisQSg.png" /><figcaption>There’s the version info!</figcaption></figure><h4>Closing Remarks</h4><p>If you’re looking for specific build, server or package information, you’ll definitely need to find the version.txt file. However, if you’re looking for basic versioning information, the presentation services approach is just as informative as the complete file.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e55634267847" width="1" height="1"><hr><p><a href="https://medium.com/red-pill-analytics/which-version-was-it-again-e55634267847">Which Version Was It Again?</a> was originally published in <a href="https://medium.com/red-pill-analytics">Red Pill Analytics</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p> Phil Goerdt https://medium.com/p/e55634267847 Tue Mar 07 2017 12:19:10 GMT-0500 (EST) Which Version Was It Again? http://redpillanalytics.com/which-version-was-it-again/ <p><img width="300" height="200" src="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/clem-onojeghuo-99396.jpg?fit=300%2C200" class="attachment-medium size-medium wp-post-image" alt="" srcset="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/clem-onojeghuo-99396.jpg?w=5616 5616w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/clem-onojeghuo-99396.jpg?resize=300%2C200 300w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/clem-onojeghuo-99396.jpg?resize=768%2C512 768w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/clem-onojeghuo-99396.jpg?resize=1024%2C683 1024w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/clem-onojeghuo-99396.jpg?w=2340 2340w, https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/clem-onojeghuo-99396.jpg?w=3510 3510w" sizes="(max-width: 300px) 100vw, 300px" data-attachment-id="4682" data-permalink="http://redpillanalytics.com/which-version-was-it-again/clem-onojeghuo-99396/" data-orig-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/clem-onojeghuo-99396.jpg?fit=5616%2C3744" data-orig-size="5616,3744" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="search for your version of OBIEE" data-image-description="&lt;p&gt;search for your version of OBIEE&lt;/p&gt; " data-medium-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/clem-onojeghuo-99396.jpg?fit=300%2C200" data-large-file="https://i1.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/clem-onojeghuo-99396.jpg?fit=1024%2C683" /></p><p>Recently I had to verify the version of an OBIEE installation for a client. As I was already ssh-ed into the Linux machine, I figured there was a way to determine the version without having to log into the presentation server. Turns out, I was right, but for thoroughness sake, I’ll cover both approaches.</p> <hr /> <h4 id="392e" class="graf graf--h4 graf--leading">Using Bash (or CMD)</h4> <p id="dbf3" class="graf graf--p graf-after--h4">Navigate to your installation’s Oracle Home. Next, navigate through the bi directory, and into the bifoundation directory. You’ll find in this directory a file called version.txt. If you open this file, you’ll find all of the relevant details for your installation’s version. Below is a command that will open the file in VI for you. <em class="markup--em markup--p-em">Note: This structure is relevant to both 11g and 12c releases of OBIEE.</em></p> <pre id="ea94" class="graf graf--pre graf-after--p">vi &lt;oracle_home&gt;/bi/bifoundation/version.txt</pre> <figure id="953f" class="graf graf--figure graf-after--pre"> <div class="aspectRatioPlaceholder is-locked"> <div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="1*EKPjSnIwvbXCxMqlXiYXgg.png" data-width="1334" data-height="306" data-action="zoom" data-action-value="1*EKPjSnIwvbXCxMqlXiYXgg.png" data-scroll="native"> <p>&nbsp;</p> <div style="width: 350px" class="wp-caption aligncenter"><img class="progressiveMedia-image js-progressiveMedia-image" src="https://i0.wp.com/cdn-images-1.medium.com/max/1600/1*EKPjSnIwvbXCxMqlXiYXgg.png?resize=340%2C66&#038;ssl=1" data-src="https://i0.wp.com/cdn-images-1.medium.com/max/1600/1*EKPjSnIwvbXCxMqlXiYXgg.png?resize=340%2C66&#038;ssl=1" data-recalc-dims="1" /><p class="wp-caption-text">And here is the version file.</p></div> </div> </div><figcaption class="imageCaption"></figcaption></figure> <hr /> <h4 id="e7e3" class="graf graf--h4 graf-after--figure">Using the Presentation Services</h4> <p id="8d38" class="graf graf--p graf-after--h4">Perhaps the easiest way for most people to find the version is to use the “Help” menu in the Analytics Presentation Service. To do this, click on the “Help” menu, and then click on “About Oracle BI EE”. A new window will appear and will display the OBIEE version.</p> <figure id="02cd" class="graf graf--figure graf-after--p"> <div class="aspectRatioPlaceholder is-locked"> <div class="progressiveMedia js-progressiveMedia graf-image is-canvasLoaded is-imageLoaded" data-image-id="1*FhatD6rqWrTco9Re80ur6A.png" data-width="754" data-height="370" data-action="zoom" data-action-value="1*FhatD6rqWrTco9Re80ur6A.png" data-scroll="native"> <p>&nbsp;</p> <div style="width: 305px" class="wp-caption aligncenter"><img class="progressiveMedia-image js-progressiveMedia-image" src="https://i0.wp.com/cdn-images-1.medium.com/max/1600/1*FhatD6rqWrTco9Re80ur6A.png?resize=295%2C145&#038;ssl=1" data-src="https://i0.wp.com/cdn-images-1.medium.com/max/1600/1*FhatD6rqWrTco9Re80ur6A.png?resize=295%2C145&#038;ssl=1" data-recalc-dims="1" /><p class="wp-caption-text">Tell me all your secrets…</p></div> </div> </div><figcaption class="imageCaption"> </figcaption></figure> <figure id="a458" class="graf graf--figure graf-after--figure"> <div class="aspectRatioPlaceholder is-locked"> <div id="attachment_4680" style="width: 310px" class="wp-caption aligncenter"><img data-attachment-id="4680" data-permalink="http://redpillanalytics.com/which-version-was-it-again/aboutobiee/" data-orig-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/AboutOBIEE.png?fit=602%2C440" data-orig-size="602,440" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="AboutOBIEE" data-image-description="&lt;p&gt;info about OBIEE version&lt;/p&gt; " data-medium-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/AboutOBIEE.png?fit=300%2C219" data-large-file="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/AboutOBIEE.png?fit=602%2C440" class="wp-image-4680 size-medium" src="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/AboutOBIEE.png?resize=300%2C219" srcset="https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/AboutOBIEE.png?resize=300%2C219 300w, https://i0.wp.com/redpillanalytics.com/wp-content/uploads/2017/03/AboutOBIEE.png?w=602 602w" sizes="(max-width: 300px) 100vw, 300px" data-recalc-dims="1" /><p class="wp-caption-text">There’s the version info!</p></div> </div> </figure> <hr /> <h4 id="72b3" class="graf graf--h4 graf-after--figure">Closing Remarks</h4> <p id="d7d0" class="graf graf--p graf-after--h4 graf--trailing">If you’re looking for specific build, server or package information, you’ll definitely need to find the version.txt file. However, if you’re looking for basic versioning information, the presentation services approach is just as informative as the complete file.</p> <p class="graf graf--p graf-after--h4 graf--trailing">Check out our collection of tip posts <a href="http://redpillanalytics.com/category/red-pill-analytics-tips/">here</a>. Subscribe to have them delivered to your inbox <a href="http://eepurl.com/cz5H_r">here</a>.</p> Phil Goerdt http://redpillanalytics.com/?p=4675 Tue Mar 07 2017 09:00:25 GMT-0500 (EST) Including Fusion-on-Cloud Extensions in BIAPPS (Troubleshooting) - Part 3 https://blogs.oracle.com/biapps/entry/including_fusion_on_cloud_extensions2 <p><span style="color: #0003ff;">Authors: </span><span style="color: #0003ff;"><span style="color: #0003ff;">&quot;Yadukrishna Munugoti - Oracle &quot; and </span>&quot;Guna Vasireddy - Oracle&quot;</span> <br /></p> <p><font face="verdana,arial,helvetica,sans-serif" size="2">The <a href="https://blogs.oracle.com/biapps/entry/including_fusion_on_cloud_extensions1">blog1</a> and <a href="https://blogs.oracle.com/biapps/entry/including_fusion_on_cloud_extensions">blog2</a> in this series provided steps on how to get Fusion Flexfields into BIAPPS. This blog, the third in this series, details some common issues you might encounter when doing so and how to resolve those issues.&nbsp;</font></p> <p> <!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:TargetScreenSize>800x600</o:TargetScreenSize> </o:OfficeDocumentSettings> </xml><![endif]--></p> <h4><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:EnableOpenTypeKerning/> <w:DontFlipMirrorIndents/> <w:OverrideTableStyleHps/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="&#45;-"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Calibri","sans-serif";} </style> <![endif]--><b><span><span style="font-size: 11pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;"><font face="verdana,arial,helvetica,sans-serif" size="2">ODI-40444: Column not found:XXXXXXXXXXXXXXXXXX</font> </span></span></b></h4> <p><font face="verdana,arial,helvetica,sans-serif" size="2">After doing the required configuration to get the Fusion Flexfields into BIAPPS, you might encounter the<b> </b></font><b><span><span style="font-size: 11pt; line-height: 115%; font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;">ODI-40444: Column not found </span></span></b><font face="verdana,arial,helvetica,sans-serif" size="2"><b><span><span style="font-size: 11pt; line-height: 115%;"></span></span></b> error at times. This error can occur for a couple of reasons<b>.</b></font></p> <ol> <li><font face="verdana,arial,helvetica,sans-serif" size="2">The flex columns are not present in the Fusion BI Server OTBI RPD.This may happen if the user introduced flex fields in the Fusion Application for the VO but forgot to run BI extender (ESS Job: Import Oracle Fusion Data Extensions for Transactional Business Intelligence) to push those changes to the Fusion BI Server OTBI RPD. </font><font face="verdana,arial,helvetica,sans-serif" size="2"><font face="verdana,arial,helvetica,sans-serif" size="2">This has been the primary reason for this error. </font>To verify if this is cause: Check the source files (.csv &amp; .mdcsv) for the flex VO that are present in UCM (<a href="https://blogs.oracle.com/biapps/entry/obia_fusion_cloud_adaptor_view">blog</a>). If we find that the column list in .mdcsv file (VO’s metadata file) does not match the actual extract column list in the .csv file(data file), then this is indeed the cause. To fix this issue, it is recommended to reset and do a full extract/load. The steps would be (a) Clean up all existing MANIFEST.MF files by deleting them from UCM (Oracle WebContent Server) (b) Run the BI Extender (c) Reset to full extract using BICCC (Refer to BICCC <a href="https://docs.oracle.com/cloud/latest/common/BIACC/GUID-A8BA7B9F-6E31-471B-B0B1-728E757CDB3B.htm#BIACC-GUID-A8BA7B9F-6E31-471B-B0B1-728E757CDB3B">Documentation</a>) (d) Re-run the Data extract again from BICCC Console (e) Reset SDS/WH (Refer to &quot;Functional Configuration Reference Guide&quot; -&gt; Manage Load Plans UI in BIAPPS Documentation) (f) Run the ODI load plan. <br /></font></li> <li><font face="verdana,arial,helvetica,sans-serif" size="2"><font face="verdana,arial,helvetica,sans-serif" size="2">If you are on BIAPPS 10.1 release and the csv file name exceeds 128 characters. As per the ODI File Technology setting in that BIAPPS version, the maximum allowed file name length is 128.Hence while running FTS map, it automatically does trimming on file name length with 128 chars. Hence FTS map is not able to read the csv file (hence ODI-40444 issue). Download and apply the tech note as available in patch (Patch Number </font><font face="verdana,arial,helvetica,sans-serif" size="2"><span id="pt1:r1:0:gts1:gts_pc1:resTbl:0:pgl7" class="x1a">22278058)</span> to resolve this issue.So check the length of the file name in UCM and if the length is longer than 128 characters and you are in BIAPPS 10.1, then apply the above patch. </font><br /></font></li> </ol> <h4><font face="verdana,arial,helvetica,sans-serif" size="2">Verify if the Flex columns are prese