We have projects, Project Spnosors and Revenues.
If a project has multiple sponsors, the revenue in BO report is multiplied by the number of sponsors involved in that project.
I can count the number of sponsors in the report and divide the revenue by that number to get the correct results.
Is there any better solution for this situation?
Sounds like a typical fan trap, which can be resolved at the universe level using aliases and contexts. Please, ask your universe designer for details.
We had also faced such an problem when the formula for a meaure object in the universe was aggregated as sum
Ex : if amt is the object then instead of having the formula as amount we were having it as sum(amount).
B’cos of this the data generated was wrong
You can check if this is the problem you are having.
Apologies to Andreas, but I think that you have, actually, a chasm trap not a fan trap. You gave the following diagram:
Sponsor >- Company -< Project -< Revenue
Where -< represents a one - many relationship, correct? You have multiple sponsors for a company, and multiple projects (and revenues) for a company. You have a chasm trap between Sponsor and Revenue. For that reason, in this relationship, you cannot show revenues by sponsor without doubling (or tripling or more) the results. Why?
Because revenues are assocated with a project.
Projects are associated with a company.
A project is not associated with a sponsor in any way, and therefore there is no way to properly calculate revenues by sponsor. It just won’t work because there is no relationship.
If you really need to report revenues by sponsors, I believe your only choice is to divide the revenues by the number of sponsors, thereby allocating (in an even fashion) the revenues by sponsor.
So if you have 2 sponsors for a company, and a total of $100 revenue for that company, each sponsor would get credit for $50. Giving you a total of $100.
[Edit - Bah, you beat me to the post by 2 minutes. I took too long to type the answer, I guess.]
We had been asking our users to divide the revenue by number of sponsors till now.
But they are not very comfortable with this idea.
I have suggested them one more work around.
Create separate queries for fetching sponsor and revenue with Company as a common dimension in both queries.
Then they can apply filters at the report level to show the reqd data.
This does fetch a lot of data in report but there are not many solutions for this situation.
Otherwise we will have to create contexts in universe.
If I create contexts in Universe, still I have to filter out the Nulls from the report. Is it how it works?
If yes, then this is same as creating two separate data providers.
and only help contexts provide is to automatically create two separate queries.
Only? That is a big fat PLUS, because Business Objects avoids incorrectly multiplying your measures, and you are not forced to manually create separate data providers.
Contexts can be a huge plus regarding usability
Does that mean you have the Multiple SQL statements for each context button checked in your universes? Most of our universes do not have that button checked, and I have frequently built measures with the aggregate function set to None in order to get the numbers to not multiply. Are those two things connected?
I’m talking about the Properties tab when you build an object. It says:
Choose how this measure will be projected when aggregated
Then you pick a function and I have had to pick None to get the measure to stop multiplying when I am using tables that are at different levels of aggregation in a query.
Most of our universes have contexts and most (maybe all) of our universes do not have the Multiple SQL statements for each context button checked. This causes us to manually put in multiple data providers to get around the Incompatible Objects problem.
Do you always check that button? Why?
P.S. Andreas: Did you just become a moderator? Congratulations!
Well, you all might have your reasons for this, but I do check it (as default), because I want Business Objects to automatically generate multiple SQL statements instead of the end-user having to manually create separate data providers.