Who am I and why should you read this blog?

I've been working with Business Intelligence software in one form or another for the past 10 years. Beyond my BI experience, I have a finance background ranging over 17 years. Primarily in recent years I've focused on working with the Oracle/Hyperion Essbase OLAP product. Over the years I've been an end user, administrator, developer, consultant, and most recently I am a Vice President for Financial Systems Development at a large financial brokerage firm. I was certified on Essbase in 2004 and received an Oracle Ace award in 2008. I can honestly say I've gotten a lot out of working in this field and I like to give back as much as I can. I've always been very active in user forums and I thought I could be of more service to my fellow developers (presumably by sharing my ideas) if I started a blog to share some of my experiences. Beyond Essbase and its related products I am also a heavy relational database user/developer and ETL developer. So you can expect to find more on this blog than just Essbase. I love the idea of manipulating data and turning it into something useful and when I can, I'll share with you how I do it.
Beyond the technical talk, I find BI to be an architecture for management and when applicable I'll also be talking about the human side (some say the ugly side) of Business Intelligence. I hope you enjoy and can make use of the content you find here.

Best Regards,

Gary Crisci

Monday, January 23, 2012

Dusting off this blog

Well - it has been a while since I have posted to my blog and figured it was time I get something new out there. I've been pretty busy lately, which puts me in the paradox of having lots to share on my blog, but not enough time to write blog posts. Ironically when I have time to blog, that usually means I don't have anything to talk about. But this is an exception and I am motivated to publish some information given a number of things going on, particularly on the heels of my recent trip to San Antonio Texas to check out the site of this year's ODTUG KScope12 conference.

But before I get into that, first I would like to share some news that will also explain my hiatus from blogging. Over the past year I have been working on a book project with a number of well known and highly respected Oracle Essbase professionals. If I am to be judged by the company I keep, then I have managed to work my way into something special. This project is headed up by friend, colleague, and fellow ODTUG'r and Oracle Ace Cameron Lackpour. Cameron is a top notch Essbase guy and apparently the only one among us who was brave enough to take on the project manager task and actually secure a publisher for our content. For that we are all eternally indebted to Cameron.

The book is a compilation of various Essbase content that even the most seasoned Essbase developer should be able to pick up some tips from. I had the privilege of authoring the MDX chapter. So for anyone who reads my blog, you can now get the same information I provide here for free buy purchasing the book :) I know that doesn't seem like the best deal, but I assure you I compiled a good amount of information on MDX that has not made its way to my blog or OTN posts. Beyond a fascinating chapter on MDX, my co-authors have written on various topics from ASO optimization to how to perform a successful Essbase implementation and various other topics that any Essbase developer would be interested in. The book is in final drafts and should go to print soon. I will be sure to update more on that as dates become available.

In addition to working on the book project and my full time job I have also had the opportunity and privilege to be a part of the ODTUG KScope12 conference committee this year. My role is Vendor chair and I am excited to be working with such a top notch organization as ODTUG and their conference partner YCC. This year's conference is shaping up to be the best so far and while I know I say that every year, so far I have not been wrong. Each year this conference manages to surpass itself, when it seems impossible to do so.

For starters, interest in the conference this year is the greatest it has been as evident by the record number of content abstracts received and the number of registrations to date. It is clear that the message is out there that ODTUG KScope is an amazing conference opportunity for people in the Oracle community, particularly in the EPM space, to get fresh up to date information on product functionality and future direction directly from Oracle product managers, along with the best in-depth training opportunities. In the past I raved about the technical deep dive sessions and the hands on labs. This year will be no different, but add in the fact that we have broken through the tech-manager barrier and will have a good amount of business content as well. One thing we know in the former Hyperion world is that many of the people using the products are not tech people. They should not feel out of place at KScope, there is a place for them too with sessions devoted specifically to the challenges and solutions end users in the business face. This years content is going to be amazing and for anyone who is a fan of my MDX sessions, I will presenting again this year and you can be sure after spending the last year writing about MDX for the book project, the content will be spot on.

If I sound particularly excited about the conference and you are wondering why am I babbling on about it now a full five months before the conference, it's because I just got back from San Antonio where I had an on-site meeting with the ODTUG board and the rest of the conference committee. Normally I don't too excited about the location of the conference. When I go to a KScope conference I don't tend to see much daylight, so aside from a few social events, the conference could be in a basement and it wouldn't be all that much different to me. Despite my lack of appreciation for location, ODTUG has consistently chosen unique and enjoyable locations for their conferences. Staying off the typical conference belt, ODTUG prides themselves on finding facilities that allow the conference attendee the opportunity to go somewhere they might not typically visit on their own, and leave with an experience that fits the location. I still here people talk about the Queen Mary event in Long Beach California last year, it certainly was a night to remember.

I suppose I also tend to downplay the conference location as I am sensitive to the current state of the economy and how employers are not keen on throwing money towards employees going on a week long junket to some exotic location. It is tough to balance between the two, but I think it is important to keep perspective and recognize that just because the location looks like a good time, that doesn't take away from the exceptional training and networking opportunities available. This year is a bit tougher to sell that since the location chosen for the conference this year is absolutely amazing. San Antonio is a very nice city, I was surprised to learn it is the 7th largest in the U.S. and it is nicely located regardless if you are coming from either coast or anywhere in the middle of the country. However, what really makes this year exceptional is the facility. This year the conference will be held at the JW Marriot Hill Country. I strongly recommend checking out the website to try and get an idea of how nice this property is, although I have to be honest, the website as nice as it is, just can't do it justice compared to being there. The place is huge, modern, clean, with unbelievable amenities. For those of you who would consider bringing your family with you, this is the year to do it. I'm planning to bring my wife and kids and spend a few days after the conference enjoying the location with them.

The conference committee is making special arrangements for family activities in addition to the normal packed itinerary of events to keep spouses and children well entertained during the trip. I can't stress how much I am looking forward to this. I hope you get as excited when you see what is going to be happening at this year's conference. I can tell you that it would be a good idea to sign up early because despite how large the conference facility is, I expect they will sell out. So take a look at the link I provided and be sure to look at the ODTUG KScope12 website to read about all the content and activities being provided this year. I believe this is going to be the best KScope to date and hope you won't miss it.

If anyone has any questions about ODTUG or KScope, please free to leave a comment on this blog.

Best regards - Gary

Thursday, February 17, 2011

SQL queries for Essbase developers

So when I first set up this blog I posted that I would not only write about Essbase all of the time and I would include other content as well. Looking back over my posts, I have not lived up to that too well, so here's one in the "other technology" category. Of course it still has an Essbase slant on it, but even if you are one of those non-believers that uses a different OLAP technology, some of these examples might still be of interest to you.

Recursive (Parent/Child) queries in SQL.
Let's say you are well organized and have your metadata structures in relational tables, rather than just living in some Excel files. Now suppose you want to spin off a cube from one of these structures, but you don't want the entire structure, maybe you just want a particular branch of the hierarchy (i.e. all descendants below a certain parent). Pulling that kind of query in a relational database used to be kind of tough. Here's an example of how to do it.

Let's say you start off with an Outline extract of the Sample Basic database for the Market dimension and you want to query the table to get all descendant of "East".


WITH Descendants (child,parent) AS
(SELECT [CHILD0,Market], [PARENT0,Market]
FROM dbo.Market
WHERE [PARENT0,Market] = 'East'
UNION ALL
SELECT dbo.Market.[CHILD0,Market],
dbo.Market.[PARENT0,Market]
FROM dbo.Market
INNER JOIN Descendants ON dbo.Market.[PARENT0,Market]= Descendants.child)

SELECT DISTINCT dbo.Market.[PARENT0,Market], dbo.Market.[CHILD0,Market]
FROM dbo.Market
INNER JOIN Descendants ON dbo.Market.[CHILD0,Market] = Descendants.child




Your results will be


PARENT0,Market CHILD0,Market
East Connecticut
East Florida
East Massachusetts
East New Hampshire
East New York



Play around with it and see what you can do with it.
Be forewarned, if the table is big this might take a while.
Also note that this "Descendants" feature in MS SQL Server didn't show up until SQL Server 2005.


Another one I have heard is how do I take a parent/child table and turn it into Generations or Levels.

Using a basic Parent/Child table going to Generations would look like this


SELECT a_1.Parent AS Gen1, b_1.Child AS Gen2, c_1.Child AS Gen3, d_1.Child AS Gen4, e_1.Child AS Gen5
FROM (SELECT Parent
FROM dbo.Test_table
WHERE (Parent NOT IN
(SELECT DISTINCT Child
FROM dbo.Test_table AS A))) AS a_1 INNER JOIN
(SELECT DISTINCT Child, Parent
FROM dbo.Test_table AS B) AS b_1 ON a_1.Parent = b_1.Parent LEFT OUTER JOIN
(SELECT DISTINCT Child, Parent
FROM dbo.Test_table AS C) AS c_1 LEFT OUTER JOIN
(SELECT DISTINCT Child, Parent
FROM dbo.Test_table AS D) AS d_1 LEFT OUTER JOIN
(SELECT DISTINCT Child, Parent
FROM dbo.Test_table AS E) AS e_1 ON d_1.Child = e_1.Parent ON c_1.Child = d_1.Parent ON b_1.Child = c_1.Parent
GROUP BY a_1.Parent, b_1.Child, c_1.Child, d_1.Child, e_1.Child



If you want to go to levels it would look like this.


SELECT a_1.Child AS lev0, b_1.Parent AS lev1, c_1.Parent AS lev2,
d_1.Parent AS lev3, e_1.Parent AS lev4
FROM (
SELECT Child
FROM dbo.Test_table
WHERE(Child NOT IN
(SELECT DISTINCT Parent
FROM dbo.Test_table AS A))) AS a_1 INNER JOIN
(SELECT DISTINCT Child, Parent
FROM dbo.Test_table AS B) AS b_1 ON a_1.Child = b_1.Child LEFT OUTER JOIN
(SELECT DISTINCT Child, Parent
FROM dbo.Test_table AS C) AS c_1 LEFT OUTER JOIN
(SELECT DISTINCT Child, Parent
FROM dbo.Test_table AS D) AS d_1 LEFT OUTER JOIN
(SELECT DISTINCT Child, Parent
FROM dbo.Test_table AS E) AS e_1 ON d_1.Parent = e_1.Child ON
c_1.Parent = d_1.Child ON b_1.Parent = c_1.Child



Lastly, let's say you have Generations and you want to go to Parent/Child.
It is important to have a sort key on your source table to maintain the proper order.

So assume the source table looks like

Sort_ID, Gen1, Gen2, Gen3, Gen4

You would create a target table then run some insert queries to cycle through the source table. Lastly I like to run a couple of update queries to tag lev0 members and upper level members.


CREATE TABLE [dbo].[Target] (
[ID] [decimal](18, 0) IDENTITY (1, 1) NOT NULL ,
[parent] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[member] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[group_item_flag] [varchar] (1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]


INSERT INTO [dbo].[Target] ([parent], [member])
SELECT [Gen1], [Gen2]
FROM [dbo].[Source]
GROUP BY [Gen1], [Gen2]
HAVING (NOT ([Gen2] IS NULL))
ORDER BY MIN([sort_key])

INSERT INTO [dbo].[Target] ([parent], [member])
SELECT [Gen2], [Gen3]
FROM [dbo.[Source]
GROUP BY [Gen2], [Gen3]
HAVING (NOT ([Gen3] IS NULL))
ORDER BY MIN([sort_key])

INSERT INTO [dbo].[Target] ([parent], [member])
SELECT [Gen3], [Gen4]
FROM [dbo.[Source]
GROUP BY [Gen1], [Gen2]
HAVING (NOT ([Gen2] IS NULL))
ORDER BY MIN([sort_key])

UPDATE [dbo].[Target]
SET [group_item_flag] = 'G'
WHERE [member] IN (
SELECT DISTINCT [parent]
FROM [dbo].[Target])

UPDATE [dbo].[Target]
SET [group_item_flag] = 'I'
WHERE [member] NOT IN (
SELECT DISTINCT [parent]
FROM [dbo].[Target])



Let me know some of your favorites in the comments.

Been a long time between posts

Wow, it has been a long time between posts. It's not that I haven't wanted to but it just seems things have been so busy lately. I am living the cliche "do more with less". Actually it's just do more with what you got and more and more and more. Oh well, not that I'm complaining. Anyway it seems like Kaleidoscope is coming around the corner soon and that usually gets me to dust off my blog as I get excited about attending. This year will be particularly important to me since I had to miss last year when I had to cancel at the last minute due to personal reasons. I'm sorry to anyone who was planning to see my presentation, I made a point of forwarding all of my content and I know my session wasn't canceled, a fill in speaker took the slot for me and presented my material, so hopefully that made up for my last minute drop out. This year will hopefully not see anything unexpected. I'm working on a very cool MDX presentation for administrators. Two years ago at Kaleidoscope I was co-presenting an MDX presentation with Mike Nader. IN the banter back and forth some questions came up about how much could we really use MDX as a query language. We get that we use it for member formulas but as a stand alone query language how much would we use it? Essbase users are spoiled with our rockin addin and the idea of actually having to code our queries seems like a step backwards to us. Still you can do some pretty cool things with MDX and one thing in particular that came up was when I mentioned that as an admin, MDX had some great functionality for querying the member outline and understanding things about your dimensions and members. It got me thinking that it would make a pretty cool session. So this year that is what people who attend my session will get. I'm going to explore the ways you can use MDX as an administrator to understand your outline. We'll start off simple by returning members of a dimension, then looking at how to pull children or descendants. We'll go through how to pull a list of members with a particular attribute or UDA. Maybe you want to find all members with a member formula or count how many level 0 members you have in a particular dimension. I plan to have a lot of sample code which attendees will be able to take back and use in their own shops. And since MDX can query both BSO and ASO cubes, I'm going to show people how to run an MDX query that will guide them towards optimizing their BSO outlines when ordering their sparse dimensions.
Beyond my presentation, which should be enough to make anyone want to attend :) there are looking to be some amazing presentations this year. Kaleidoscope has grown considerably, there will be more Oracle presence, a larger variety of vendors and partners, the hands on labs are going to be awesome and the usual fun and networking events will be included. I think we are also finally past those few awkward years of vying amongst the different user groups about whose conference is the best or who is going to be the "next solutions" (please, see my previous post) These days I think people have come to recognize that if you are a Hyperion professional and you want the best Hyperion training for the best value, along with a front row seat to all the new product features coming down the line, there is no conference better than Kaleidoscope. I have no doubt this year will live up to and surpass previous years. I'm looking forward to seeing everyone in June. If you haven't registered yet, you really should. http://www.kscope11.com/

Wednesday, March 24, 2010

Kaleidoscope is NOT the new Solutions (and guess what, that's a good thing)

I’ve heard over the last couple of years that this conference or that conference was going to be the “New Solutions”. It got me thinking back to when I went to the old Hyperion Solutions conference and what was so special about it. I remember having a lot of fun when I went, seeing old friends and colleagues, etc, but I was trying to remember what I really got out of the conference. Did I learn anything? Honestly, the answer is not really. At the end of the day, Solutions was a Sales and Marketing conference. It served one main purpose – to get me to buy more software. It wasn’t about making me a better developer. Yes, there were a few technical sessions here and there, but they never got too far below the surface. Most of the time, the sessions were “success stories”. This is where someone who just spent a bunch of money implementing a product stands up in front of a room and describes all the obstacles they have overcome. Mind you, many of these individual’s experience with the software is limited to the implementation they just went through, not exactly “experts”. Of course, I’m not saying there isn’t value in learning from someone else’s experiences. But as a professional who has been through a number of implementations myself, I’m looking for something a little more advanced than the standard fluff you fit in a 45 minute session, where 20 minutes is devoted to telling me about your company. The reality is Solutions wasn’t much of a value. I still found myself paying for training throughout the year and I never brought back anything really amazing to provide value to my employer. Looking back, I am quite unhappy with myself for spending the amount of money I did those years to sit through a live infomercial. I think this is why I have embraced ODTUG’s Kaleidoscope conference as much as I have.


Kaleidoscope is distinctly different from Solutions. Solutions focused on marketing, Kaleidoscope focuses on training. At Solutions they talked about new functionality, at Kaleidoscope you are taught new functionality. A Solutions presentation usually amounted to pretty power point slides, at Kaleidoscope there are hands on labs and many of the presentations contain live demonstrations. The most notable distinction is that Solutions was about a company; Kaleidoscope is about developers.

Kaleidoscope focuses on how to improve the individual and provide value through training, networking opportunities, and a chance to hear from the product managers and developers first hand during the full day symposium. Speakers and presentations are vetted by a panel of industry experts. Speakers aren’t given a slot just because they bought something this year. Speakers and their presentations are chosen based on a mindset of what is going to provide the best educational opportunity for attendees. This mindset permeates throughout all activities that are planned. This ensures attendees are getting the most value for the money they are spending.

Kaleidoscope has become the one event I plan for every year where I know I will get value and improve myself for my career. So, regardless if my company’s budget has room for me to go, I know I will be there because I will pay out of pocket to attend if I have to. I’ve done it before. Now I know some people might not be able to afford that, but I don’t see how I could afford not to attend. In the past, I would have been willing to miss a Solutions conference; I’m not willing to miss a Kaleidoscope conference.

Thursday, December 17, 2009

Kaleidoscope 2010 - Hyperion agenda publshed

I am very pleased to announce that the Hyperion SIG board has finalized the 2010 Kaliedoscope Hyperion schedule. (Please click the link to view) Keep in mind some minor changes could be made in the cases where speakers are unable to attend and stuff like that.

This schedule is one of the best we have had and shows that Kaliedoscope is THE national conference for Hyperion users and developers.

Please check out the schedule and consider making plans to attend.

I would like to thank the entire board for there efforts in putting together such an awesome schedule and thanks to ODTUG for providing us with the forum to host such an event. Special thanks to Edward Roske for being the content coordinator.

although we are taking a short break for the holidays, the board will be reconvening in January to continue our planning sessions to ensure this year's conference exceeds attendee's expectations. Looking forward to seeing all of you there.

Please check out ODTUG Kaliedoscope for more information on the conference.

Saturday, October 31, 2009

IsAncestor explanation

Recently I answered a post on the user forum regarding a way to test if a member is a Descendent of another member using MDX member formula's in an ASO database. It took me a little while to figure it out. I think it's a little hard for Essbase people to understand because of the way we used to do it in BSO using the function @ISDESC. Below was my response and I thought it was worth posting on the blog.

--In calc script language you are saying @ISDESC("C009") meaning you want hierarchical members below "C2009". Now in Calc script we also have @ISANCEST and if we said @ISANCEST("C009") we would be looking for all members that are hierarchically above "C2009". MDX does not have ISDESC, MDX only has IsAncestor. The parameters are member1 and member2. Now depending on which way you ask the question, you get a different answer.
IsAncestor([C009], [Dimension].CurrentMember) is really saying "Is "C009" an ancestor of the current member"? The answer is only true for descendants of "C009". Now, if you were to say IsAncestor([Dimension].CurrentMember, [C009]) you would be asking "is the current member an ancestor of "C009""? The answer is only true for ancestors of C009.

Book Review: Oracle Essbase 9 Implementation Guide

A while back, I was asked to do a book review for Oracle Essbase 9 Implementation Guide by Sarma Anantapantula and Joseph Gomez by the publisher, Packt Publishing. Despite terrible flashbacks of grade school book reports, I agreed and was shipped a copy of the book. When I first heard this book existed, I rolled my eyes and thought, “this probably won’t be very good”. Then I thought about it a bit, gave some thought to what goes into writing a book, and realized I was being unfair to prejudge. Despite the fact there has historically been very little published content on Essbase, maybe these people got it right and as an active member of the Essbase community, I should embrace the idea of our little world getting more notoriety. It was with this open mind that I began reading the book and hoped to write a positive review.

As I began reading the book, I was encouraged by what I saw. Aside from some minor misstatements in the preface (things like products called ‘Essbase Planning’ and ‘Hyperion Smart Office’) the opening was very good. The authors had an excellent segment defining a data warehouse, frankly, it was one of the best explanations I’ve read on a term that is extremely over used by people to describe many things that are not in fact data warehouses. After reading the preface, I thought to myself “this book is on the right track”. I even made a point of commenting early on that I thought it was a “pretty good book” on a user forum post on Network54. Unfortunately, as I continued to read, I became less and less impressed with the book and about half way through started to feel the book was not what I thought and hoped it would be.

I’m not one of those developers who has a book memory, when working with Essbase I always have a copy of the technical reference and database administrators guide close by, so I’m not going to dive into the technical inaccuracies in the book, although I believe there were many. For the most part, I was not comfortable with the way the book was written. The authors tended to speak very authoritatively about topics that are not absolute. “Essbase is more art than science” is a term repeated ad nauseam in the book, yet the authors took the position in many instances to speak in definitive statements without clarifying what they were saying. Statements like “While the dynamically calculated member occupies a place in the database outline, it does not affect the block size in the database, therefore, it does not affect performance”. They do not clarify what kind of performance they are talking about. Dynamically calculated members with member formulas referencing sparse member sets, most definitely have a performance impact. Referencing dynamically calculated members within a calculation script can also impact performance by engaging the dynamic calculator cache. I realize the book is for beginners and maybe these topics are not appropriate early on in the book, but they needed to be careful making such declarative statements, which they did quite often.

Much of the material in the book can be found in the database administrators’ guide, which has a more thorough explanation. I can accept that in a book of this nature because you would expect the product’s documentation would have all the technical content. What you are looking for in a book like this is the author’s particular point of view and words of wisdom to help understand the technical content. Often I felt the author’s viewpoints were very specific to their own experiences and the book seemed narrow. It was clear that industry experts had not proof read any of the chapters. At the end of the day, you have a book written by a couple of guys who have used Essbase for a while and decided to write a book about it. I don’t say that to take anything away from the effort they put into it, only that it doesn’t have the breadth of experience needed to make it useful to individuals learning how to use this product. The authors often created their own terminology and expressed it as accepted industry jargon. They presented concepts that many would not consider best practices, such as using aliases as the permanent name for a member and codes as the alias. The example given was something along the lines of having a member name as “Hood Esscar Best Dealers” and using an alias for the dealer ID ‘03030-USA’ They then state how you could change the member name and still load to the dealer ID because it is the alias. While this is technically correct, best practice in my experience would be to have the dealer ID as the member name and the name as the description (i.e. Alias). This is an example where I think, in their experience this is the way things are done, but it is not really the best practice.

There are many other examples of things I found to be inaccurate or misleading at best. I won’t get into all of them. Overall, the book was just not written very well, there are many cases when the context of a section will shift direction and it is not clear why, at times, I felt as if someone had accidently cut a paragraph out of the book. This leads me to my primary criticism of the book. The feeling I get was that the book was rushed. The quality was not good and in many cases, it affected the message the authors were trying to get across. This seemed very strange to me that the book would feel rushed because initially I thought it was odd that the book was based on Essbase 9, when Essbase 11 was already general release. I didn’t take this too much to heart because I knew from the Kaleidoscope conference that a large number of users were still on version 9. What I realized as I read was that while technically it was based on 9, often things the authors claimed were based on early releases of version 9, particularly the section on ASO, which was extremely disappointing. It was clear the author’s experience was almost entirely block storage and the feeling I got was that the bulk of what they talked about was relevant in version 6, not so much the newer functionality we have today, with the exception of their discussions on EAS.

Overall, I was not left with a good impression of the book. I would caution new users reading the book to be careful applying what they have learned at face value. While there are some good parts to the book, I found more about it I didn’t like.