5 Replies Latest reply: Oct 17, 2014 6:43 AM by yuntao peng

Caculation of Total

Hello everyone, I am encountering a calculation problem:

Here is a simplified table:

 item value Source 1 90 B 1 100 A 2 50 B 3 60 C

The calculation rule is as follows:

for an Item that can be found in the source A(<>0), we should take the value from source A, otherwise we take the value from Source B.

If we find values from both source A(<>0) and B(<>0), we still take the value from source A.

The same logic applies where there are more sources.

How can we get the right total by using a formula? In the above example, the total should be 100+50+60=210?

Here's the formula I used but I don't get the right answer.

=if(sum({\$<Source={'A'}>}[value])<>0,

sum({\$<Source{'A'}>}[value]),

if(sum({\$<Source={'B'}>}[value])<>0,

sum({\$<Source={'B'}>}[value]),

if(sum({\$<Source={'C'}>}[value])<>0,

sum({\$<Source={'C'}>}[value])

)))

Thanks for your help!

• Re: Caculation of Total

expression is

sum(aggr(subfield(Concat(value, '@', Source), '@', 1), item))

• Re: Caculation of Total

Hi,

one solution could be:

hope this helps

regards

Marco

• Re: Caculation of Total

Hi Marco,

It's great! However, I think I simplified too much my model here and I still can't figure out what I should do in my real life application, which is even more tricky:

-If the value is found in A, then we take this value

-If the values are found in B or C, we take the sum of them

 item value Source 1 90 B 1 100 A 2 50 B 2 40 C 3 60 C

So the result I would expect in my real life application is:

100+(50+40)+60=250

What would you advise?

Thanks a lot!

• Re: Caculation of Total

Hi,

Try like this in script

Data:

*,

If(Item <> Previous(Item), 1, 0) AS Flag;

Item,

Value,

Source

FROM DataSource

ORDER BY Item, Source;

Now use this expression

=Sum({<Flag={1}>} Value)

Hope this helps you.

Regards,

jagan.

• Re: Caculation of Total

Hi

Try this

sum({\$<Source={"=Sum([value]))<>0"}>}[value])