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 7 years. Beyond my BI experience, I have a finance background ranging over 13 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

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.

1 comments:

GlennS said...

Gary, I appreciate the explaniation. It was clear and consise, even if it will get confusing to people trying to debug code(or writing it). Is the member name first or second. It would have been much easier if they added the isdescendants like the ischild.