Forum Discussion
Running Total by Currency
- 4 years ago
The reason that you are seeing repeating Cumulative sales amount is because the measure relies on the rank of the sales amount. If the sales amount per order is the same, then you get the same rank,
There is a hack to solve this (in a random sort of way, since you need to break the rank for equal sales values. The way to do this is:
Create a new column in the table which adds a minute amount to each sales value per order, such as :
You can now use this column to establish the rank by order number, as in:
Rank (Random) Sales = IF ( NOT ( ISBLANK ( [Sum Random sales] ) ), RANKX ( ALL ( 'Summary Table'[SalesOrderNumber] ), [Sum Random sales], , DESC, DENSE ) )Now that you have a new rank by order number, you can calculate the cumulative for the original sales amount based on this rank using:
Running total Sales Amount (random) = VAR RNK = [Rank (Random) Sales] RETURN IF ( ISINSCOPE ( 'Summary Table'[SalesOrderNumber] ), CALCULATE ( [Summary Sales], FILTER ( ALLSELECTED ( 'Summary Table'[SalesOrderNumber] ), [Rank (Random) Sales] <= RNK ) ) )And you will get
Attached is the new sample file
Thanks Paul!
Here after is the link to access the pbix file: https://1drv.ms/u/s!AtrphPjJln_zisEB-dDvCb825JBjPg?e=9LtB3Y
I created a measure "Sale Amount RT by Currency" in FactInternetSales which should to a running total by currency and Sales Order Nb.
I don't know what I miss but it does not work.
Thanks for the file.
First of all, a heads up on the onus that iteration measures have on processing times for measures. I created the RANK measure and running total for your model, but the processing time for the model makes it unworkable. So I created a summary table within the model (Summary Table) to illustrate the measures.
This is the structure you need:
Summary Sales = SUM('Summary Table'[Sales])Rank Sales = IF(NOT(ISBLANK([Summary Sales])), RANKX(ALL('Summary Table'[SalesOrderNumber]), [Summary Sales], , DESC,Dense))Running total Sales Amount =
VAR RNK = [Rank Sales]
RETURN
IF (
ISINSCOPE ( 'Summary Table'[SalesOrderNumber] ),
CALCULATE (
[Summary Sales],
FILTER (
ALLSELECTED ( 'Summary Table'[SalesOrderNumber] ),
[Rank Sales] <= RNK
)
)
)
and you get
I've attached the sampe PBIX
- Sylvain744 years agoHelper III
Thank you very much for your help Paul. I need time to understand the differents steps you went throw..However when I look at the results in the print-screen, it seems that the sales amount are not cumulating but repeating...I was expecting to see that for each currency change, the Sales AMount starts from 0 then summing up when running throw all the sales orders contained in the currency.
Thanks again.
- PaulDBrown4 years agoCommunity Champion
The reason that you are seeing repeating Cumulative sales amount is because the measure relies on the rank of the sales amount. If the sales amount per order is the same, then you get the same rank,
There is a hack to solve this (in a random sort of way, since you need to break the rank for equal sales values. The way to do this is:
Create a new column in the table which adds a minute amount to each sales value per order, such as :
You can now use this column to establish the rank by order number, as in:
Rank (Random) Sales = IF ( NOT ( ISBLANK ( [Sum Random sales] ) ), RANKX ( ALL ( 'Summary Table'[SalesOrderNumber] ), [Sum Random sales], , DESC, DENSE ) )Now that you have a new rank by order number, you can calculate the cumulative for the original sales amount based on this rank using:
Running total Sales Amount (random) = VAR RNK = [Rank (Random) Sales] RETURN IF ( ISINSCOPE ( 'Summary Table'[SalesOrderNumber] ), CALCULATE ( [Summary Sales], FILTER ( ALLSELECTED ( 'Summary Table'[SalesOrderNumber] ), [Rank (Random) Sales] <= RNK ) ) )And you will get
Attached is the new sample file
- Sylvain744 years agoHelper III
Hello Paul,
First of all, sorry for my late answer, I had quite a heavy workload end of last week and did not have time so far to revert.
Your explanation is quite clear! I will study your 2nd pbix file to understand it in details.
Thanks again.