One of the more interesting (and disappointing) tidbits I got from the folks talking about the new semantic layer (the Information Design Tool) coming in 4.0 is that there won’t be an SDK in the initial release. There may be one coming later, but it will potentially be java based rather than VBA. That means that my VBA experience is going to be less useful, and tools like my Schema Change utility and the soon to be posted Universe Change Log script that I showed at the 2010 BusinessObjects User Conference will soon not only be obsolete but we won’t have a mechanism to replace them. π―
While on the subject of the SDK… I was asked multiple times when I would be posting my script from the conference. I discovered a few days before the presentation was due that there is a problem with joins when switching from one database to another. For example, we are in the process of switching one of our larger datamarts from DB2 to Teradata. I am going to write a more detailed blog post on that shortly, but let me say that my universe compare script was very useful during the process. But during the compare process I found that this join:
table1.table_1_id = table2.table_2_id
Got changed to this:
table2.table_2_id = table1.table_1_id
Of course both joins are functionally the same. But to my script they showed up as three different changes. Table 1 was changed from “table1” to “table2” while Table 2 was changed in reverse. And of course the join logic was reversed as shown above. So while this was not really a change, my script was recognizing three unique differences between the two universes, all related to that one join. I had not encountered this when running against two different versions of the same universe pointing to the same database, which is the expected use of the tool. I created it primarily to compare the DEV and PROD versions of the same universe. But I am trying to think about a way to update the code so that inverted or reversed joins are not detected as changes. If I can’t come up with something in the next few weeks, I will go ahead and post the code as I demonstrated it at the conference last week.
I generally have several goals when attending a BusinessObjects conference. In no particular order, they are:
- Make sure that my sessions are delivered effectively and provide value to those that attend
- See what is coming new from SAP BusinessObjects
- Reconnect with old friends and see what they’re up to
- Attend a few sessions and try to learn something
Maybe those are in the right order. π Both of my sessions were delivered on Tuesday which left me (in theory) free for the rest of the conference. I did manage to reconnect with some old friends as well as make some new ones. I did attend some sessions to see what’s coming new in the semantic layer in 4.0. I participated in the first-ever ASUG Influencer Summit, and will post more on that in a bit. I also worked with Bridgette Chambers (and many others) to finalize the agreement related to the new collaboration agreement between BOB and ASUG, which you can read more about in the announcement post on BOB.
I went to Epcot on Wednesday night and stayed until midnight. I got a bruise from somewhere, probably on my second or third mission to Mars. π
Ultimately due to the lack of wireless (something that many folks have provided feedback about) I did not blog much while there. That’s why the last two days are going to be wrapped up here, and will seem a bit short. It seems easier to write while I am in the middle of everything instead of back at home. But here goes. Continue reading “SBOUC 2010 – Day 2 + 3”
I have done conference presentations before. I have done more than one presentation for the same conference. I have even done a double presentation (a longer two-part session stretched over two hours) before. But never have I done two unrelated sessions, in different rooms, in back-to-back time slots on the same day. π― I did my first session as a co-presenter with Brian Durning, where we talked about picking out the proper client tool to use. As soon as I got finished there, I had to shut down my laptop and get to my next session, which was all about managing changes in a universe design. I was quite pleased with the turnout for both sessions, and also pleased with my delivery. Some might think that after so many years of doing this it becomes second nature… and some parts do. But every year is a new subject and a new challenge, and I always want to do my best to share what I have found to be useful.
Brian and I had a lot of fun with our first session. The fact that we work together (and occasionally play together) really helped with the presentation style, which was very easy and laid-back. We created three specific (and exaggerated) scenarios that showed that Web Intelligence was the best tool for casual or interactive reports, Crystal is the best for reports with prompts, and Xcelsius provides the only tool with βwhat ifβ capability. I will be posting the presentation file here shortly.
The second session from me today was related to the concepts of change management for universe designers. I am often asked questions like:
- What is different between these two universes?
- What changes were made in βbreak fixβ that now have to be applied to development?
- What are you getting ready to move into production?
I concluded the presentation by doing a live demonstration of a universe change detection script that I have written in VBA. I took several suggestions for changes in a universe from the audience (change an object name, remove some joins from a context, and change a join from a shortcut to a regular join) and my script found them all. Whew! I will be posting that presentation here shortly, and the script should follow soon after.
There is also a lot to talk about regarding BOB and ASUG and other developments, but that’s worthy of a separate blog post to come later.
That means that the good news is that I’m done with presentations for this conference! The bad news is that I have not done much of anything else (other than saying “hi” to some old friends and meeting some new ones) so I don’t have anything to report. Tomorrow I hope to get to some other sessions and be able to share some tidbits from the conference.
Until then, it’s time for a good night’s sleep. π
I’m not participating in this podcast, but Jamie Oswald gives me a nice (and appreciated) shout-out. Along the way Jamie, Eric, and the rest of the crew talk about “must see” presentations and other plans for the BusinessObjects user conference coming up in a few weeks. It’s worth a listen.
SBOUC Pre-Conference Podcast
If you’re in the Dallas / Fort Worth area, and you’re not familiar with the local ASUG chapter meetings, tomorrow is a great chance to get introduced to the event. We have some wonderful speakers lined up, and then there’s me. π Ginger Gatling is speaking, and she is a real dynamo when she gets behind a podium. I always enjoy hearing her speak. My friend (and ASUG Crystal SIG Chair and Reportapalooza competitor) Brian Durning is going to deliver a Crystal presentation. I’m going to update an old presentation of mine from six years ago, and make everything work in the new Web Intelligence Rich Client (WRC). It was a bit frustrating that so many things had to be updated. I have one trick with filters that I have not managed to get working on the new platform because the functions don’t work the same way now, but that’s another blog post.
If you’re not a member of ASUG yet, then why aren’t you? ASUG announced earlier this year that membership for BusinessObjects-only customers is free (that’s FREE) from now until the end of 2011. Seeing a local chapter meeting is one way to take advantage of that. Getting a discount on attending the fall conference in Orlando is another. Connecting to www.asug.com to review old recorded podcasts is still another way to see what ASUG has to offer, so why aren’t you doing any of these things? π
Related Links
Comments Off on DFW ASUG Chapter Meeting, Friday, September 16
In the “good old days” we used to have a somewhat primitive form of object-level security. In the universe a designer could pick from one of five security access levels for each individual object. The settings were public, controlled, restricted, confidential, and private. The text was just a placeholder; behind the scenes the values were stored in the OBJ_M_ACTOR table as as value from zero (0) to four (4). As long as a user had a security level that was greater than or equal to an object security level, that user could see that object.
Last week I was asked to discuss security objects on a universe, and of course I thought about this. However, it seems that there is no matching setting in the CMC anymore. In my experience, nobody used this feature very much (it’s not very flexible and it takes a long time to set up) but it seems weird that it’s just gone from CMC.
Is anyone using this feature? If so, how to you configure the user side of the system?
I am happy to be able to (finally!) report that my universe “diff” tool (first mentioned a long time ago) is nearing completion. I have been using this partially completed tool on my own for many years, but the only things it compared were objects and predefined conditions. As such it was somewhat useful (mostly to me) but since it was not complete I did not release it even internally to my employer. When I started to extend the code to compare joins, tables, contexts, and other universe components I soon realized that the way I had originally written the code was not very modular. I was going to have to either write specific routines to compare each universe component, or go back and rewrite what I had in order to make it more generic. I didn’t do either of those things. π
As of today I have completed the rewrite and am now going to extend the comparison to other universe components. I expect to have the final code ready to demonstrate (and release) during my talk Change Management Strategies For Universe Developers at the fall BusinessObjects conference. And of course once I release it there, I will also set up a way to download the code here on my blog.
Why use this tool rather than some of the other tools that are available? For one thing, it will be free. Free is good. π It will be released under the GNU GPL license, which allows me to retain the copyright on the code while ensuring that the code can be distributed without restrictions. Support for the code will be on an “as time allows” basis here on my blog. For more details on the GNU GPL license (if you are not familiar with it) I have included a link at the end of this post. Basically it says that I retain copyright of the code, but anyone can use it however they see fit. So there are no restrictions on using it for personal or company use, and it can even be redistributed. The only requirement is that the code remains free of all restrictions and that my copyright information be retained in a visible fashion.
I’m excited to be able to finally complete this project. When I submitted the abstract for the conference I was hoping that it would get accepted, and that would be the incentive for me to get around to completing the code. It seems to have worked. Now all I have to do is complete my slides and get them submitted (a week late). I look forward to being able to share the results and the code in Orlando.
Related Links
This post is a bit outside of my normal technical content. I was struck by something on the way home today and can’t get it out of my head until I write it down. For the past several years (since 2005, I think) I have had a beard. A few weeks ago, I shaved it off. Guys that have worn then removed beards will probably be able to answer this next question: What is the most common comment I receive from people that are seeing me for the first time without my long-time beard? Continue reading “What does personal grooming have to do with business intelligence?”
I don’t like outer joins in my reporting universes. Never have. Sure, if I am creating a universe against an application system I might consider using outer joins because of the normalized nature of the data. But if I am reporting against a warehouse schema of some kind, I really prefer to use inner joins. That way I avoid any potential performance issues caused by outer joins, but more importantly I avoid questions about report data. That being said, outer joins do have a specific purpose, and if I need to use them in my universe I certainly can.
One of the biggest challenges with outer joins (other than potential performance issues) is explaining to a user why their query results changed because they added a condition to their query. Remember that users don’t (typically) look at the SQL, so they won’t know that I have created an outer join. It can be confusing. Fortunately I have options as to how my outer joins are executed, so once I determine their usage requirements I can change the way my universe behaves.
Defining the Problem
For this post I will am going to use a very simple universe with only three tables, shown here.
This universe joins a customer to an order, and an order to order lines. In my database I have one customer that does not yet have any orders. If I run a query against the current universe structure, this new customer will not show up. My requirement is to show all customers, whether they have orders or not. This must be true even if I put a condition on the order table. That’s where it gets tricky. π Continue reading “Handling Conditions on Outer Joins”
A while back I was on a project where the users wanted to set up reports that initially displayed about six different dimension objects and a bunch of measures. They also wanted to have the flexibility of dragging a different set of dimension objects on the report and either adding to or replacing an existing dimension. The idea was good. The amount of data brought back was a problem. I was able to fix that with some interesting prompt objects in the universe.
The Problem Definition
For the example I will present in this post I will once again use my version of Island Resorts Marketing universe which I have converted to Oracle. I will create a report that initially shows the Resort and (for simplicity) a single measure (Revenue). The report will be designed to let the user drag on additional details like Service Line and Service. But I will design my objects in such a way that if the user doesn’t want to see the information at that level of detail they don’t incur the overhead (row count) simply because the object is present in the query. In order to accomplish this, I will prompt the user with a list that includes the tokens ‘Resort’, ‘Service Line’, and ‘Service.’ The user will select the lowest level of detail they expect to use on the report. In this particular example the selections are hierarchical, meaning that selecting ‘Service Line’ implies that the Resort data will also be present. There is another option ‘None’ that can be selected if they want to deactivate the entire list.
Note that XI 3.1 offers a new feature called Query Stripping (in service pack 3) that works for BW and other OLAP queries and does this process automatically. It is not (yet) available for relational databases. Continue reading “Too Many Objects? Too Many Rows? Try Prompting For Level of Detail”