Want to know The Truth About CPM?

10 April 2010

The Humble ComboBox

Introduction
A lousy combobox?  Really?  You have got to be kidding me. 

I can’t think of a simpler dimension picker than a combobox.  Even its definition is pretty short.

So why would I write a post on this most humble of dimension selectors?

The combobox’s simplicity lets me focus on how that control gets filled, not the many cool dimension picker features that Dodeca provides.  I’ll get to that in the next post (a three post series on member selection, zoiks).

How do I populate a combobox?

Dodeca splits dimension pickers into two parts:  Selectors and Selector Lists.

Selector

To be able to select or modify a dimension’s member selection, it must first have a Selector.  A Selector defines the dimension, data source, caption, tool tip, and other settings.  We’ll come back to some of these settings, but for the time being, know that a Selector List without a Selector is a bit pointless as it has nowhere to go.

Selector Lists

Selector Lists are used to populate a Selector.   For me, that’s a pretty short sentence, but it is pregnant with potential.

Four ways to get to the same place

To get to a Selector List, go into Dodeca’s Admin menu, and pick “Selector Lists”.  (Yes, there is a metadata library, yes, it is stored relationally and served up through a really cool web services architecture, yes, there is a whole potential blog post on the architecture, no, I’m not going there right now – let’s see if I can populate a combobox first.)

Delimited member list

AppliedOLAP provides a slew of different Selector Lists, but I’m going to create my own to walk through this process.

Selector List ID

After clicking on New, I will fill in the Selector List ID – that’s the name of the Selector List.  In this case I’m going to call it “Blog_Scenario_Combo” because I am an inventive sort.

Selector

Remember how I wrote that Selector Lists have to be tied to a Selector?  I’m going to associate my new Selector List with a Selector called “5_Scenario”.  It’s the Scenario dimension from My Very Favorite Essbase Database In The Whole Wide World, Sample.Basic, aka MVFEDITWWWSB, also aka meph-edit-wysb, for those of you prone to say these things out loud.


NB – This Selector’s association with Essbase is important, as we’ll see in a little bit when we tie SQL to the selector.

Select List Object Type

There are four ways to populate an Essbase Selector:  a delimited text list, an Essbase API member query, an Essbase report script, and an Essbase SQL pass through data set.  It’s sort of a easiest to hardest progression, or maybe a nice to OMG-that’s-cool.  You choose.

The easiest (and least flexible) one is the delimited list – it’s just what it sounds like, a delimited list of member names.

Selector Control Type

Remember how I wrote this was going to be a combobox?  I must choose EssbaseSelectorComboBox to make that choice.

Description

This is optional – I’m just putting in a description for the sake of completeness/my sanity.

SelectorListObjectTypeID

Click on the magic OK button and the property sheet for the newly created Blog_Scenario_Combo Selector List appears. 

Click on the SelectorListObjectTypeID dropdown control, and select EssbaseDelimitedString.
Two spelling corrections

DelimitedString

Then click on the DelimtedString text box and type in “Actual;Budget”.  Note that a semicolon is the delimiter. .

If you had a big list, you could expand the text box by clicking on the ellipsis button:

There are other options (lots of them) you can set, too many of them to go into here.  This is what your property sheet should look like when you’re done:

I did not set a NullSelectionText to handle never making a selection (did I mention the awesome awesomeness of this product – good grief, they think of everything) – without something like “Please select a Scenario, the initial combobox will look “narrow”.  You’ll see what I mean in a few screen shots.

Dodeca is smart

While your Selector List is being modified, Dodeca will tell you that it’s under modification by sticking a grid and a plus logo to the left of the name.

Commit it

Click on Commit to save the change, then confirm Yes.

Modify the View

The View (or report) must be modified to use this new selector list.  In the Dodeca Admin client, pick Admin->Views and then select the View called “Blog Income Statement”.

Click on the ellipsis for SelectorConfiguration.

Configure Selectors

The Selector List for Scenario needs to change. 

Click on the dropdown and pick the new Blog_Scenario_Combo list.

Click on OK, then Commit, then Yes.  You have now made your first Selector List change.  Off to the View to see what happened.

Viewing the View

Not much to look at initially.

Click on the arrow next to Scenario in the toolbar.


And there it is in all of its abbreviated glory.

Okay, but so what?

Well, you have to crawl before walking, walk before running, etc., yes?

Remember, your Scenario dimension could have 20 members in it – how would you limit that list in another tool?  Through METAREAD security?  A bit tricky that, as different reports would likely have different scope requirements.  Through hard coded lists – yes, you could do that, but you’d either be sticking it on a sheet and referencing the list or directly entering it into the control.  The former would be mildly painful, the latter a maintenance disaster.  And oh by the way, would either one be validated against Essbase?  I didn’t think so.  Told you that Dodeca was smart.

Two Essbase-centric approaches

Well, that’s great if you want to limit the list to two hard-coded members, but what if you want to dynamically retrieve all of the level zero members?  We all know what the Scenario dimension looks like:

How can we get Dodeca to dynamically query the outline to give us all of the level zero members?

EssbaseMemberQuery

One approach is to use the Essbase member query approach.  This is the simplest (code wise) and maybe a little unfamiliar to those who aren’t used to the Outline API.

Let’s go back to the View editor and change the SelectorListObjectTypeID to EssbaseMemberQuery:

Then navigate to the MemberQuery property and enter <DESCENDANTSOF “Scenario”

Commit it, run the View again and now:
There’s all of the descendants of Scenario, dynamically retrieved from Essbase as required.  Nice.

How would you do that in Excel for Smart View or the Classic add-in?   I believe the phrases “painful”, “ow, that hurts my brain”, “whattya mean I can’t use the API in SmartView, huh?”, “boss, can we please buy Dodeca” are all involved.

ReportSpec

Essbase API too esoteric for you?  How about a good old fashioned Essbase report script?

A report script to return the same four members looks like:

If this report is run in EAS it outputs the following:

Don’t worry about the data, Dodeca is smarter than the average front end, and will just pick up the member names for the selector lists.  .Remember, this is true just for selector lists – when it comes to a proper report, Dodeca is oh so capable of returning numbers to go along with metadata.

Change the SelectorListObjectTypeID to EssbaseReportScript and then click on the text box on the new ReportSpec property.

Click on the ellipsis button to expand the ReportSpec property and paste/type in the report script.

Click on OK to assign the script, then Commit, and Yes and rerun the view.

Again, a fully dynamic dimension list from sourced from the Essbase outline.  Dodeca gives you two ways to do this – awesome, isn’t it?

Let’s do this in SQL

Dodeca can drive member selection through SQL queries.  Why would you do that?  Well, how about a mix of limited member selections by View, central administration, and (this is really nice) validation against Essbase so you can’t select the Scenario “Rutabaga” even though it’s in the table.  I apologize to those who love this terrific tuber.

How about another, chuckle, scenario, like driving dimensionality from SQL (load rules, Studio, or EIS) and then having your limited lists (based on whatever SQL voodoo you can come up with) driven from the very same tables?  Neat-o, keen-o.  Take it as far as imagination and your SQL skills can go.

SQL Passthrough DataSets

Okay, the above is a pie-in-the-sky moment, let’s return to earth and define the SQL – don’t worry, I can barely spell S-Q-L, so there’s nothing to be afraid of.

Back to our Favorite Dodeca Menu In The Whole World, At Least For Right Now (FDMITWWALFRN – feh-dim-it-wall-forn – I like the sound of that one), Admin, and select SQL Passthrough DataSets.

Create a new SQL Passthrough DataSet and call it Blog_SQL_Scenario.

Click on the Query[] Array ellipsis button.

Three things need to get set in the Query Editor property box:
·       ConnectString – This looks scarier than it really is and defines the server, database type,
·       DataTableName – What table/view will this query read from.
·       SQL – The actual SQL statement.
ConnectString

This is pretty easy to read – I stole mine from Dodeca’s hibernate.properties file created during the installation of Dodeca and just changed the server and database name.  Yes, I will not win any awards for security but the server is a development virtual machine.

NB – For those of you currently experiencing cardiac arrest at the thought of clear texting this information, know that Dodeca triple DESes (I just created that verb) the ConnectString back to the metadata store.  I am naked on the Internet, but no else is, at least as far as ConnectString is concerned.

To give you a feel of how flexible Dodeca is (it’s really JDBC, but still), by scanning hibernate.properties, I see that Dodeca supports the following SQL databases:
·       HypersonicSQL
·       H2
·       MySQl
·       Oracle (of course)
·       PostgreSQL
·       DB2
·       TimesTen
·       DB2/400
·       Sybase
·       Mckoi
·       SAP
·       SQL Server
·       Interbase
·       Pointbase
·       Ingres
·       Mimer
·       InterSystems

Your company’s whacko SQL database backend isn’t going to limit your Dodeca implementation.  So what are you waiting for?
Cameron_Blog
This is perhaps the world’s simplest database – one table.
And one column in that single table. 
Big deal you say?  Dodeca doesn’t care how complex your query is – and if it’s a pig to retrieve, remember that the results gets cached, so only the first retrieve is expensive.

Back to the Blog_Scenario_Combo Selector

Just two properties to change after EssbaseSQLPassthroughDataSet is selected in the SelectorListObjectTypeID:  MemberColumnName and the SQLPassThroughDataSetID we just set up.

Commit the changes, click on Yes to confirm, and let’s look at the View.

No code required.  Awesome.  Think about the code you’d have to write in an Excel add-in to get you to SQL.  Urg, I’ve done it before.  No thank you.
What’s in a name?
Rutabaga is a versatile vegetable, but I think I like it because its name just sounds silly to me.  And with that deep thought, I’m going to add the Scenario Rutabaga to the Cameron_Blog.Scenario table.

What oh what will Dodeca do?
Ignore Rutabaga because it isn’t a member name in Sample.Basic.

FWIW, there is just a plain old SQLPassthroughDataSet that doesn’t validate member names against Essbase. 

And there it is.
Why would you ever want to do that?  Well, against Essbase you likely wouldn’t, but remember, Dodeca goes against SQL just as well as it goes against Essbase.  Oh yes, yet another upcoming blog post.

So where have we been?

Comboboxes aren’t fancy, but by examining the way they get populated, a pretty good idea of Dodeca’s dimension power can be grasped.  And remember, comboboxes aren’t even the cool dimensional control.

But the four different paths to populating a combobox – delimited strings, Essbase API member queries, Essbase report scripts, and SQL selectors that validate against Essbase – is there for all to see and the techniques apply to dimension listboxes and treeviews.

The next post will be a quick run through of how to populate those listboxes and treeviews and then a more detailed view of some of the more interesting things you can do with a dimension selector like driving selector possibilities based on other selector choices, all without writing a line of code.

Hacking Essbase, indeed.

30 March 2010

Selecting Dodeca

A small change of plan

My original, and continuing, intent with this series of blog posts is to demonstrate the awesomeness that is Dodeca.

I wrote an outline (yes, this gibberish sadly does not spring from my fingers willy-nilly but in fact is organized, sort of) that started off with a grand tour of the Dodeca interface.

As I began to take screen shots, it occurred to me that there is a lot of functionality to cover.  I don’t think I’ve got a Grand Unified Theory of Dodeca blogging just yet – there’s so much going on.

At least initially, I’m going to focus on functionality across the three products:  the Excel Essbase add-in, Smart View, and Dodeca, and then build from there.

This post is a trip back in time to English Composition class – I’m going to compare and contrast these products.  There is a point to this – you won’t understand the genius of Dodeca until you understand the limitations of its competitors.  J

Member selections

A definition

Member selection in Excel happens when:
1)    An off-grid (classic Essbase add-in) or Point of View (POV) (Smart View) member is selected; only one member can be selected, although in Smart View’s POV manager, you can preselect multiple members and then use the dimension drop down to navigate through the selections.
2)    An on-grid row or column member is selected; one or more members can be selected, either down rows or across columns.

Okay, for those of a pedantic bent whose name isn’t “Cameron”, there are two other kinds of member selection that can happen in Excel without using the Member Select (classic)/Member Selection (Smart View):
  • Member selection can also occur simply by typing in the member name on the sheet (you will likely know Scenario, Version, Year, Period, etc. dimension member names or probably your most commonly selected Accounts, Products, Regions, etc.
  • And I guess you could argue that member selection can also occur as part of drilling up and down in a dimension and using keep- and remove-only functions to narrow selections.

How do I get there?

Classic

Click on the Essbase menu in the Excel menubar and navigate to Member Select:

If you’re using Excel 2007 (and the above menu screenshot is from that release), you’ll first need to select the Add-Ins ribbon, and then click on the Essbase menu.



Remember how I wrote that if you have lots of automation in Excel you’ll lose it all with Excel 2007?  Remember that cool menu?  Stuck in the Add-Ins ribbon.  Remember that cool toolbar you wrote?  Gone. 

Someone came to the rescue, but you’ll still have to roll your own for your code

The good folks at in 2 Hyperion wrote a ribbon bar for the Classic add-in.  For those of us still using Classic (I hereby give up on the full name “Classic Essbase Excel add-in”), it’s a lifeline till Oracle kills Classic.  Find it here.  Highly recommended for those using Excel 2007, but Dodeca’s still better.

Smart View

It depends

Smart View splits up dimensions between on-sheet and in-POV manager.  When a dimension is on the sheet, member selection works much the same way, i.e., click on a cell, and then begin Member Selection either via the Ribbon (Excel 2007), toolbar (Excel 2003), or Hyperion menu (2003 or 2007).

On-sheet

Ribbon (Excel 2007)
Toolbar (Excel 2003)
Menu
Remember that the Hyperion menu is also available under the Add-Ins ribbon in Excel 2007.

Point of View Manager

Click on the dimension in question’s down arrowhead, select the ellipses, and Member Selection is coming your way.

Dodeca

Dodeca differentiates between the in-built member select dialog box and customizable member selectors. 

Member select = the Classic interface with a few improvements.

Member selectors = totally customizable, incredibly flexible dimension pickers that you could write in VBA, or VB.Net, or whatever, but after you taste Dodeca’s approach, you will give up on in defeat and despair.

Ad-hoc Member Select

This is similar to the way Classic works, but, of course better because Dodeca knows whether the member select is in a row, column, or off-grid dimension and expands/limits functionality to the appropriate position on the grid. 

Just click on the member, then the toolbar button to get the Member Select button.

Member Selectors

Treeview

Simplicity itself – click on the selector box in the report toolbar.

Dropdown

Classic doesn’t know a dimension dropdown selector from its elbow. 

Smart View’s POV selector can use dropdown selectors within the POV.  Dodeca’s are easier and centrally controlled.

What do they look like?

Classic

So what does it look like?  I’ve been using it so long I can almost recite the objects from memory.

Member Select description

Welcome to 1992’s idea of User Interface design.  Time machines are always fun.

What do I mean?  Think about the down arrowheads for expanding down – replace by up arrowheads for expanding up.  It’s a logical metaphor, but try to think of another hierarchical selector that works this way other than Essbase Application Manager – I dearly miss that product, but it’s time has come and gone.  Plus and minus signs seem to be the universal drill up and drill down metaphor.

At the very upper left hand corner, there’s a dimension picker dropdown control.  This is only useful if you’ve selected a blank cell and the right dimension doesn’t pop up (this will always be the first dimension in the outline), otherwise the dimension will be whatever is selected in Excel.  Of course, Classic will let you select the wrong dimension and overwrite valid selections.  Whoops.

You can use the Find button to search for strings, but remember, no leading wildcards.

Information about a member is but a click away.

Dimensionality can be viewed by member name, generation, level name, or even by Dynamic Time Series if you’re dealing with a DTS-enabled Time dimension.

And of course there’s the option of viewing this by member name, aliases by alias table, and the option to place the selections across the rows or before the selected cell.

What’s really cool about Classic’s member selection process is that the selected members can be saved either to the server (stored in the Essbase database’s directory) or locally.  Nice if you’ve defined complicated searches.

Once the selections are made, you can move the selected members to the right hand list box. 

But wait, there’s more

Once a member has been moved over to the Rules list box (betcha never looked at the description – me neither), the member can be right clicked on and member relationship selections can occur.

Right there you can pick Children, Children and Member, Descendants, and Descendants and Member.

But it all gets powerful when Subset… is selected. 

Attribute members, ANDs, Ors, NOTs, generation and level names, patterns – the whole shebang is there.  Powerful selections can be created and then saved as mentioned before.  You can even use this functionality to figure out what Attributes are associated with a member – this is missing in the Member Information button.

But it’s a hard way to find out that Massachusettes has an attribute of Medium_9000000.  At least you can select it.

Smart View

However you get there, it’s the same thing

Whether it’s through an on-sheet member select, or in the POV, the same Member Selection dialog box pops up:

In many respects, Smart View’s Member Selection dialog box is a step forward in functionality from Classic:
  • Pluses and minuses are used to drill up and down.
  • Filtering of members is easier because you need only pick the member, and then choose the Children, Descendants, Level, Generation, UDA, Attributes, and Subset all from the main dialog box.
  • No need to decide if the selections go in rows or columns – Smart View knows the right way.

Filter

See Attribute in the Filter dropdown?  Easier to get to than moving Market to the Rules listbox and then right clicking on it, then selecting Subset, and then finally getting to the Attributes.

But there are some things missing:
  • Member information
  • Attribute member selections aren’t as detailed as Classic (or Dodeca)

Member information

I don’t know how often you use this – Essbase developers can always go to Essbase Administration Services and find out all we ever wanted to know about a particular member.  For the hoi polloi (that would be your users, not you, dear reader) they’re largely out of luck.  Too bad.

Attribute selection

Attributes are selectable, but not completely.  Whoops.
EAS’ Population
Smart View’s Population
See anything missing?
Classic’s Population
See what’s not missing?

Dodeca

It’s smarter than you.  Or at least it’s smarter than me.

As I was exploring Dodeca member selection for this blog, I found out a couple of cool things:
  • In ad-hoc views, member selection is modal – Dodeca knows when a member is in a row, a column, or off-grid, and allows selection appropriately.Dodeca won’t allow stupid member selections that break ad-hoc reports.
  • In standard views, member selection is surfaced immediately, without a trip to a dialog box.
  • AppliedOLAP spent a *lot* of time figuring out how to customize member selector dialog boxes without you writing code.  I won’t cover this in this post (what, not long enough for you?), but it will be my very next post.  I cannot get over how freaking cool this stuff is.

Modal

Off-grid

Think about this – only one member for a given dimension is on the grid.  Hence, only one member from that dimension should be selectable.  Guess what, Dodeca knows this, and the Member Select dialog reflects that.
Classic breaking retrieves
It’s easy to break a Classic retrieve through Member Selection.  In this case I am selecting the four (sort of) points of the compass.  Note – this doesn’t make sense, but Classic Member Selection isn’t going to save you from yourself.
Place Down the Sheet
Whoops, forgot to untick Place Down the Sheet.
Not Placed Down the Sheet
Nope, that doesn’t work either.
Smart View breaking retrieves
Smart View is a little better at this – it understands rows, columns, and off-grid dimension members, but it will still let you make selections that don’t retrieve.
Dodeca breaking retrieves
Erm, you can’t do it.  Remember how I wrote above that Dodeca knows that a dimension is off-grid and thus does not support multiple selections?  Well, that’s the trick – it doesn’t let you select more than one member and it doesn’t break.  Genius, if you want my opinion.  Or even if you don’t.

On-grid

It’s the same as Classic, with one improvement.
Did you spot them?  Plusses and minuses to expand/collapse the hierarchy. 

No progress?  There are those who would call Classic’s Essbase Member Selection dialog box perfection itself.  And Dodeca improved upon perfection with the +/- controls.

Member Selector

Remember, this is different than plain old member select from an ad-hoc retrieve.  Member selectors have a lot of functionality that you, the developer, customizes as part of a report.  More on this in the next post, I swear.

There it is, right there on the right (position customizable – hey, everything’s customizable).  And the dimension’s available any time you want.  No more clicking on a member and then selecting a menu/toolbar/ribbon and then getting to the dimension to switch from member A to B.

In the meantime, feast your eyes on the below.
             

When I write that there’s surfaced functionality, I mean that without clicking into modal dialog boxes the following functions are instantly available:
  • Expand/Collapse
  • Find
  • Dimensions (depends on how the View is set up)
  • Swapping between dimensions

All without writing a line of code.

Conclusion

Oldie but goodie

For those of us who know and love the Classic Essbase Excel add-in (there, I wrote the whole thing), member selection is pretty nice, if somewhat old fashioned looking.  Eh, looks aren’t everything.

It’s pretty easy to break reports, so be careful.

Newer, but curiously missing some functionality

Smart View keeps on getter better and better, but there are some big holes out there such as member information and a decent attribute member select.

Retrieve intelligence is better, but it’s still easy to break ad-hoc retrieves.

Why use anything else?

Ad-hoc analysis isn’t even Dodeca’s raison d’etre, yet it does it flawlessly with Classic’s functionality and none of Smart View’s holes.

Even more importantly, its intelligence around dimension placement means that you can’t break an ad-hoc report through a member select.  This is a Good Thing.  You haven’t lived (if you can call it living) until you walk a user through why the product breaks their retrieve. 

What’s coming next?

Think of this as the first course in a multi-course meal.  You’ve had the starter, but the main plate is to come.  Hopefully your salivary glands are hard at work.

We’ve now set the baseline; the next post will (soon, I swear, just a week, maybe a little longer…) get to the interesting stuff – all of the different ways to customize member selectors in Dodeca.