Analytics Server, Data Visualization, OAS, OBI, obiee

I’ve had quite some feedback and reactions on this post over various channels on the last days. I’ll leave the original post as it is so you can read through it, but here are the most important takeaways of the back and forth behind the scenes:

a) Reminder: Deprecated doesn’t mean dead. Otherwise I would have said “dead”
b) Oracle reassured me that they won’t just kill a feature without thinking about proposing a replacement
c) They’re probably going to spell all of this out more explicitly in the documentation
d) Thinking about the support lifecycle of Oracle products each new release means commencing a 12 months grace period for the “now old” version. For something like OAS with yearly releases we can therefore expect a roughly 24months-long timeframe in which we get warned about a feature change in V1 (month 0), then V2 comes along and the feature goes away (month 12) and by month 24 we have to move away from V1 and lose the feature/replace them with something else/do it differently/…. Note that this is a hypothetical case. I’m not saying these features ARE going away by V2 of OAS.

And that’s it for the update. Huge thanks for the amazing reactivity of the Oracle Product Management team and Partner Management as well as everybody out there who bombarded me with messages over just about every conceivable channel.

12c, Analytics Server, Data Visualization, OAS, obiee

With last Friday’s release of Oracle Analytics Server and Gianni beating just about everybody to a first write-up on how to get it running (after getting the correct versions first) I thought it would be time for a real-world reality check of this newest incarnation of the Oracle Analytics family for on-premises clients.

OAS it the gateway to OAC with pretty much seamless moving from OAS to OAC or deploying things both on-premises and in-cloud in a hybrid setup. New features galore but in turn a dependency on assuring that on-premises is built in a way that they can be moved to the cloud easily. More on this in a moment.

This release is aimed at lifting existing OBIEE customers on par with OAC in terms of functionalities. Customers who for whatever reason do not want or can not move to the cloud. A decision which is valid in and of itself as not everything or everybody has to go to the cloud.

Many functionalities of OAS which weren’t available on-premises so far at all and/or were tied to additional licensing costs are given to customers with existing licenses – for free. Now I have to say it fulfills this bit more than well. To say that Oracle was generous in scooping ladles of additional stuff into it is an understatement.

You can see a full list off features differences here.

However….

HOWEVER the huge issue I see is precisely that list of feature differences combined with the fact that most OBIEE customers have systems that are running since years, are very mature, HIGHLY integrated into their other business-critical systems and their business processes. You know…the things companies actually use to make money. Sadly almost all existing things that aren’t fancy eye-candy for executives but make a solution successful and workable are marked as “deprecated” which translates to:

“Deprecated: Deprecated features won’t be enhanced in the future but are supported for the full life of the Oracle Analytics Server 5.5.x release. Where indicated, a deprecated feature might be desupported in a future, major release. “

  • Oracle Marketing Segmentation – Well isn’t that a major punch below the belt line. Using analytics as the marketing engine for Siebel was half the reason Siebel bought nQuire in the first place. Getting rid of said segmentation engine for Siebel Marketing and drop the related functionality may cause existing customers to both leave both Analytics and Siebel. One stone, two birds. Sadly not the good kind of kill.
  • Flat Files and XML-based Data Sources – Having this in DV is fine, but confining its use to data sets and no longer have the ability to model it properly into corporate data structures? A step back since you simply do not have the same level of integration and access control in terms of detailed row-level filtering and even attribute filtering/masking anymore.
  • Session Personalization using System Session Variables – Now this is just silly. It seems that nobody ever went through any RPD of clients with thousands of users in worldwide implementations and went “Oh hey they are actually using this to make the system react more dynamically without hard-coding 5 gazillion things!”.
  • Act As Another User – Again how can anybody who worked more than 2 weeks on any real life project consider this a candidate to be deprecated? Ever had to Act As another user around the globe to see his data or pick up his slack or troubleshoot? Can you imagine that not every business user is ok with planning a meeting to screen-share with you because they have more important things to do like running the business? Thought not.
  • Database Storage for User Group Memberships – The absolute kicker. This takes the cake (with cream and cherry on top). Like deprecating Marketing Segmentation but taken to the extreme. Customers using other Oracle applications and leveraging what they have already implemented there to help secure and control analytics from a functional, content and data access control perspective are being left out in the cold.

I love OAC and what it has done to the product line and brought to the cloud line-up. But OAS? With that feature list? Well I only hope somebody realizes that it may not be a good idea to completely disregard the existing and blindly chase after buzzwords when compiling the list of things to remain in the product.

Bet on the future and continue developing things in that direction but please don’t sacrifice the existing things on the altar of the new. Especially if the reason is just “because reasons”.

11g, 12c, 19c, admin, obiee, security, standard configuration

Many times I come across posts and emails asking for help on specific configuration changes or questions asking for help achieving certain things.

Long story short – you can over-complicate everything if you don’t look at what the standard gives you efore going off and hacking / scripting things in an uncontrolled fashion that will come back to haunt you when you patch or upgrade.

Case in point: Implementing new, custom links which should react to standard security privileges.

As in: Adding a link is documented by Oracle, but how can you make this link react to standard privileges which are tied to your Application Roles?

Oracle provides the out-of-the-box functionality of custom links since several years with all the usual bells and whistles. Problem is, that by far not all options are documented in detail with examples. Top tip here: guess what you will never have everything in the documentation, so the important thing is where to look for more information.

Enter the XSD! Every configuration XML comes with an accompagning XSD style sheet which maps all elements and attributes that the XML supports. Find that XSD and you have all the documentation you could ever want. Following the example of making links dependent on OOTB security privileges:


Here we see one of our administrators (prodney) logged in and seeing two custom links rendered. The “SampleApp V607 Index” and the “Custom Link” which is a link to the documentation. Now we don’t want non-admin users to be able to access the documentation link. So how do we go about this?

The customlinks.xml controls the rendering of custom links as described in the official documentation: https://docs.oracle.com/middleware/bi12214/biee/BIESG/GUID-FF6954BA-2DE0-4422-BA58-05F32936F4FF.htm#BIESG3738

That XML file itself is goverened by the customlinks.xsd file. In there we find the following information on the privilege usage:

<xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="iconSmall" type="xs:string" use="optional" />
<xs:attribute name="privilege" type="xs:string" use="optional" />
<xs:attribute name="src" type="xs:string" use="optional" />

Now let’s look back at the documentation and an

<link id="l1" name="OTN" description="OTN open in new window" src="http://www.oracle.com" target="blank" >
   <locations>
      <location name="header" />
   </locations>
</link>

My customlinks.xml says the following for the “Custom Link” one:

<link id="l2" name="Custom Link" description="Instructions on how to insert a custom URL on OBI EE headers" src="http://docs.oracle.com/cd/E23943_01/bi.1111/e10541/answersconfigset.htm#BIESG3738" target="blank" iconSmall="common/info_ena.png">
    <locations>
        <location name="header" insertBefore="home"/>
    </locations>
</link>

Nice. Now let’s add 1 and 1.

“id” and “source” are both attributed of “link” just like privileges which gives us the necessary indication of how to use it.

<link id="l1" name="SampleApp OTN Page"  [skipped...] privilege=" hmm what goes here=?! ">

For the content of the “privilege” attribute we simply refer back to the documentation again:

<link id="l1" name="SampleApp OTN Page"  [skipped...] privilege="privileges.Access['Global Admin']">

Which puts the whole entry in the customlinks.xml to this:

<link id="l2" name="Custom Link" description="Instructions on how to insert a custom URL on OBI EE headers" src="http://docs.oracle.com/cd/E23943_01/bi.1111/e10541/answersconfigset.htm#BIESG3738" target="blank" iconSmall="common/info_ena.png" privilege="privileges.Access['Global Admin']>
    <locations>
        <location name="header" insertBefore="home"/>
    </locations>
</link>

Restarting things will now give me the same resutl for my administrative user “prodney”:

And the correctly secured result for my non-admin user “testuser01”:

Piece of cake.

installation, OBI, obiee, OTN, sampleapp

Every week between OTN, stackoverflow, and direct questions sent to my email accounts there are 2-4 occurrences of “How do I install OBI on Windows 7/8/10” or “I am having issues with installing OBI on Windows”.

In order to clear up this topic once and for all – here is the ultimate guide to running Oracle BI on your Windows desktop OS:

  1. Download VirtualBox

  2. Install VirtualBox on your machine

  3. Download all image files for the Oracle BI Sample Application
  4. Deploy the VM in your local VirtualBox installation according to the Deployment Guide
  5. Start your deplyoed SampleAppVM via your VirtualBox Manager

  6. Use the “Start” icon to start both the database and the full Oracle BI stack inside the VM

  7. Let the script run its course until all services are up and the leave that terminal window open

  8. Open Firefox inside the VM and click the “OBIEE Login” bookmark

  9. Log on using “weblogic” / “Admin123” (without the quotes)
  10. You’re in. You’re done. That’s it. You have a fully functioning OBI environment with about 5 gazillion more things compared to what you could ever come up with yourself.

Now it you haven’t stopped reading yet because you thought “Hey wait this isn’t a Windows installation” let me explain a couple of things:

Point #1: Oracle BI is a server tool. It isn’t your WhatsApp desktop, it isn’t your Chrome/Firefox/Safari. It’s actually a whole range of servers and as such not something you run on a desktop operating system. And because of that:

Point #2: It is NOT supported on Windows desktop operating systems!
If you go to the Fusion Middleware Supported System Configurations page and open the certification matrix for the current 12.2.1.2.0 version you will find that the only mention of anything “Windows” are 2012 and 2012R2:

No 10, no 8, no 7, no ME, no XP, no 98, no 3.1 … you get the point. No. Desktop. OSs.

Point #3: That means that Oracle will never bother to test things fully or help you out if you mess up things or can’t get something to run because you installed on a Windows desktop OS. You’re on your own.

Point #4: Even if you make it run or clamour “But I’ve seen tons of videos where” it works like someone recently did – I don’t care and neither will Oracle in terms of their product development or support. Sooner or later you will run into follow-up issues and scratch you head and go mad because things just don’t work or not as expected / in a weird fashion.

People this is how technology works. An Android app is an Android app and not usable on iPhone unless the company making it actually releases an iPhone app. Ask any iPhone user and gamer how they felt between the Android release of Pokemon GO and the iPhone release last year.

To use another example: You shouldn’t fill up a diesel-engined car with petrol just because you always took petrol from the pump or whatever unvalid reason you can conjure up. Well you can but don’t complain afterwards that your engine is busted

Got it now? Thanks!

12c, dashboard, OBI, obiee

A new functionality has been introduced in the latest release of OBI – 12.2.1.1.0 – which has gone a bit unnoticed since it hasn’t been included in the documentation anywhere. This is surprising since it’s been requested since a long time.

Dashboard subpages!

As of this release the usual 3-level dashboard hierarchy has been transformed into a 4-level one:

  • Dashboard group
  • Dashboard
  • Dashboard page
  • Dashboard subpage

dashboard sub-pages

Configuration is very straight-forward. Just click the usual “Add” button which will give you two options as of now:

dashboard_add

admin, answers, OBI, obiee

Working on a system without full access can often be a pain and prevent you from being able to get information necessary for your work. One of those areas is access to system variables. Good thing is. that bits and pieces are flying around all over the web and can be found for example both Oracle’s own SampleApp or this little gist here from @rmoff.

I’ve started mixing and matching together as much as possible of “things you can potentially get out of the system” without having anything else than Answers access and combined it into a single analysis. You can find the gist here. To put it into your system all you need to do is create a new analysis, copy over the XML and reference any of your Subject Areas (two locations; top and bottom of the file). Doesn’t matter which one as long as it parses correctly. Not a single query against actual data sources is run.

gist_top

gist_bottom

I’ll keep adding to this and expand it with whatever hack I can find to circumvent the pesky “you’re not an Admin” situations.

sysvars

event, kscope, obiee, odtug

Next week from June 26 to 30 it’s time again for the epic ODTUG KScope16 which is happening in Chicago, Illinois this time. After unfortunately missing last year’s KScope15 in Florida I am happy to be back with two presentation slots of my own plus a joint presentation.

You can find the full agenda here including my three sessions in the BI and Data Warehousing stream of the event:

  • 50 Shades of #Fail: OBI Worst Practices in Real Life
  • Back2Basics: A Day in the Life of an Oracle BI Query
  • OBIEE Security: It’s a Jungle Out There(joint presentation with @G_Ceresa)

This year I had the pleasure and privilege to be a member of the content committee for the BI/DWH stream in order to do my part of making the event as epic an experience as possible for all participants.

Looking forward to seeing all my friends and fellow Oracle ACEs again.

answers, essbase, mdx, obiee

Fiddling around with some more functional options we’ve all come to know, like and use frequently, I found that “in between” filters in answers requests going against MDX sources (Essbase, MS Analysis server etc) don’t work as expected.

To showcase this, I have created a simple request. Planning and Current numbers by Fiscal Month within Europe. And I’m interested in all months between Q1 2009 and Q4 2009:

Checking the results tab we see that it’s not necessarily what we’d expect:

Doing a full data scroll reveals that basically all Fiscal Month members are being pulled up.

Here’s the MDX from the log:

With
set [Geo3] as ‘Filter([Geo].Generations(3).members, (([Geo].CurrentMember.MEMBER_ALIAS = “Europe” OR [Geo].CurrentMember.MEMBER_Name = “Europe”)))’
set [Time Period3] as ‘Filter([Time Period].Generations(3).members, ( NOT (([Time Period].CurrentMember.MEMBER_ALIAS < "Q1-09" OR [Time Period].CurrentMember.MEMBER_Name < "Q1-09"))) AND ( NOT (("Q4-09" < [Time Period].CurrentMember.MEMBER_ALIAS OR "Q4-09" < [Time Period].CurrentMember.MEMBER_Name))))'
set [Time Period4] as ‘Generate({[Time Period3]}, Descendants([Time Period].currentmember, [Time Period].Generations(4),SELF), ALL)’
member [Scenario].[MS1] as ‘AGGREGATE(crossjoin {[Geo3]},Scenario.[Current])’, SOLVE_ORDER = 100
member [Scenario].[MS2] as ‘AGGREGATE(crossjoin {[Geo3]},Scenario.[Planned])’, SOLVE_ORDER = 100
select
{ [Scenario].[MS1],
[Scenario].[MS2],
[Scenario].[MS3]
} on columns,
NON EMPTY {{[Time Period4]}} properties ANCESTOR_NAMES, GEN_NUMBER on rows
from [Sample.Sample]

And here’s the important bit:

set [Time Period3] as ‘Filter([Time Period].Generations(3).members, ( NOT (([Time Period].CurrentMember.MEMBER_ALIAS < "Q1-09" OR [Time Period].CurrentMember.MEMBER_Name < "Q1-09"))) AND ( NOT (("Q4-09" < [Time Period].CurrentMember.MEMBER_ALIAS OR "Q4-09" < [Time Period].CurrentMember.MEMBER_Name))))'

I’ve opened an SR for this since there’s no mentioning on metalink, the release notes or the new features guides.

Cheers,
Christi@n