Who am I and why should you read this blog?
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
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
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
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)
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
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
--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
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.
