Variance between the same objects in different columns - excel

I've got a pivot table that contains Countries in Rows and few different types of revenue in columns, grouped by Scenarios. I've got 5 types of scenarios, and I need to show 2 of them at once for comparison.
It looks like this:
ScenarioX ScenarioY
Revenue1, Revenue2, Revenue1, Revenue2
Country1
Country2
The problem appears when I want to add a variance columns, that would calculate the difference between Revenue1(ScenarioX) and Revenue1(ScenarioY) etc.
I know how to use calculated fields, but this case is much harder, is it even possible?
I have tried to add a standard table right next to the pivot table, that takes the values directly from the pivot and calculates them. It works, but in this case i will need to hide and expand the table basic on the revenue type filter, which crashes the table.
ScenarioX ScenarioY Variance
Revenue1, Revenue2, Revenue1, Revenue2, Variance 1, Variance2
Country1 Rev1X-Rev1Y, Rev2X-Rev2Y
Country2 Rev1X-Rev1Y, Rev2X-Rev2Y
What I need exactly is a hint, how to add the calculated fields, or other methods (through vba maybe?) to make the table look like above?

Ok found the solution finally, posting here, maybe it will help someone:
Duplicate the field in the pivot table "VALUES" area
[optionally - change it's name to "Variance"]
Right click on the new field -> Value Field Setting -> Show Values As tab
In the Combo Box change the field to "Difference From"
In the Base Field in my case I had to select "Scenario", in Base Item - the scenario that
will be substracted from the main one.

Related

How to add multiple measures into a pivot table?

I'm quite new to using pivot tables and data models, so I don't even know if what I want to do is possible. I have a pivot table (PivotTable1) and its source (Table 25) and I would like to add a hundred or so measures which are listed in the TableCombinations.
For example, I entered the two first measure in orange, but they are not linked to TableCombination and entering them all one by one would be quite long. Each measure is for a distinct Sum wfn column that sums all other rows multiplied by a coefficient. The TableCombinations table simply states the coefficient to be used for each column. For the first three rows, these are my measure formulas :
sum wf1=1.4*Table25[Sum of wD]+0*Table25[Sum of wL]+0*Table25[Sum of wS]+0*Table25[Sum of wW]+0*Table25[Sum of wWSOUL]
sum wf2=1.25*Table25[Sum of wD]+1.5*Table25[Sum of wL]+1*Table25[Sum of wS]+0*Table25[Sum of wW]+0*Table25[Sum of wWSOUL]
sum wf3=1.25*Table25[Sum of wD]+1.5*Table25[Sum of wL]+0*Table25[Sum of wS]+0.4*Table25[Sum of wW]+0*Table25[Sum of wWSOUL]
...
Two questions :
Is there a way to link the tables so that any change made to TableCombination would then be updated in the pivot table measures?
Is there a way to generate all the of the measures without typing them in one by one.
You should be able to use just one DAX measure to do this, using the CROSSJOIN function.
Don't set up a relationship between the Tables, and drag # to the Columns area of the PivotTable. Then create this Measure:
=SUMx(CROSSJOIN(Table1,Table2),Table1[wD]*Table2[wD]+Table1[wL]*Table2[wL]+Table1[wS]*Table2[wS]+Table1[wW]*Table2[wW]+Table1[wWSOUL]*Table2[wWSOUL])
That should give you the exact answer you need.
Here's how it looks using some sample data:
...and here's the sample data I'm using:
You could certainly use VBA to add measures, and to update them when the Table changes. I might have a crack at writing up an answer along that approach shortly. But here's another way to achieve what you want.
I've previously written some code to slave a Table to a PivotTable, so that any change in the PivotTable's dimensions or placement will be reflected in the shadowing Table's dimensions and placement. This effectively gives us a way to add a calculated field to a PivotTable that can refer to something outside of that PivotTable. If the PivotTable grows, the Calculated Table will grow. If the PivotTable shrinks, the Calculated Table will shrink, and any redundant formulas in it will be deleted.
You can easily use this approach to perform your calculations in a 2nd table alongside your PivotTable, and each column x in that 2nd table could easily reference row x in your 'parameters' table.
See Select Newest Record and Create New Table of Unique Values in Excel

DAX - Display the top 1 count in a calculated column

I have a [Company] column, I have a [Billing day] column in a powerpivot sheet.
A Company can have several different Billing days.
I want to show in a Pivot table, next to the company name, the Billing day with the highest number of occurences.
The tricky part is that the number must appear in a [Calculated Column] that will not be put as a Measure in my Pivot table, but as a Column.
I have reviewed such posts as:
this one or this one.
I have learned much but I am still unable to get the correct values.
Any idea ?
Many thanks
This may not be the best way to get you what I understand you are asking for, but it is a way. I believe it achieves what you want regarding the calculated column.
If I start with this table as Table1:
Then I add a column using this code: MaxByDate = COUNTX(FILTER(FILTER(Table1,Table1[Company]=EARLIER(Table1[Company])),Table1[Billing Day]=EARLIER(Table1[Billing Day])),Table1[Billing Day])
And I add another column using this code: MaxOverall = MAXX(FILTER(Table1,Table1[Company]=EARLIER(Table1[Company])),COUNTX(FILTER(FILTER(Table1,Table1[Company]=EARLIER(Table1[Company])),Table1[Billing Day]=EARLIER(Table1[Billing Day])),Table1[Billing Day]))
Then I add one last column using this code: DateOfMaxOverall = FORMAT(SUMX(FILTER(FILTER(Table1,[Company]=EARLIER([Company])),[MaxByDate]=[MaxOverall]),[Billing Day])/COUNTX(FILTER(FILTER(Table1,[Company]=EARLIER([Company])),[MaxByDate]=[MaxOverall]),[Billing Day]),"m/d/yyyy")
I get this table:
Then if I choose to create a Flattened PivotTable from it (Home tab / PivotTable dropdown arrow button / Flattened PivotTable), and set things up like this:
...and turn off the subtotals and grand totals, I get this:
Which is, I believe, what you requested.
But I think a simpler approach might be this:
Start with the first table (Table1):
And, using that table as is, create a Flattened PivotTable directly. Then set the PivotTable up like this:
...and turn off the subtotals and grand totals, to get this:
...Which you can then filter for the max occurring day for each company:
...to get this:

Pivot table sorting by text string

It seems so silly, but I am trying to set up my pivot table, and it doesnt seem to be my strongest side.
The following picture demonstrates what I am after:
... so basically in the data there is a currency string, however it seems as if I cant get this string to be represented in the matix - only in either the row labels or columns labels, which makes the table very unstructured. Is there a way to match the security (row label) with its denominated currency ?
this part of my source table:
... where CCY is the currency column I would like within the pivot table and not as a pivot row or column label.
/ Phillip
Make the pivot as a classic pivot, you will see how the above person sees it.
Classic pivot is your answer of putting in text strings inside pivot. It somehow aligns better.
Right click on pivot --> Pivot table option --> Display --> Check the box which says "Classic Pivot table layout".
Take a backup of the excel copy before you switch to classic pivot. Some say it's irreversible
Include the currency-field in the Pivot table, like this:
This is exactly what I am after #MatsLind however this is what I receive when doing this:
so my question is why is our results different ?
Please let me know if I am totally off, but end goal should preferably be the following image:
.. however with this sorting (1.Security , 2.CCY) I am not allowed to sort the value within the pivot table. If I make the follwing sorting (1.CCY, 2.Security):
then I am allowed to sort the data within the pivot table, but I would prefer the former layout.
Can't add comments due to lack of reputation but this ain't an answer exactly.. Maybe..
From what I see in the below image, it looks like you have the row CCY on top and then security. If you want it like the top image, change the hierarchy.
Go to field list and under rows, drag and place the Security on top of CCY, youre pivot will look like above picture.
But you're speaking of sorting, it looks like the above picture has been sorted with the grand total column.. I didn't follow you completely on the sorting peice..
Edit: I understood the problem now, what values exactly are you trying to sort?

Creating "Categories" to show on a PivotTable

I have a student database, and I'm trying to show different metrics based on a student's score range in a PivotTable. Specifically (this is a simplified example, so don't worry about the content) I want to show this in my pivot:
StudentGPACat | Avg Post-Grad Salary
3-3.2 | 64,323
3.2-3.4 | 71,225
3.4-3.6 | etc
3.6-3.8 | etc
3.8-4.0 | etc
So I want the rows in my pivot table to show the range the student's average score falls in.
In order to generate that metric, right now, I did 2 things:
(1) Added a new column in my master table in PowerPivot called [avgGrade] that shows the value of the [TableAvgGrade] calculated field from the "Grades" table for each student (i.e., each row in the master table)
=CALCULATE([TableAvgGrade],
FILTER(Grades,Grades[studentID]=Master[studentID]))
(2) Created a new column [StudentGPACat] in PowerPivot and the formula goes:
=If([avgGrade]<3,"3",
If([avgGrade]<3.2,"3-3.2",
If([avgGrade]<3.4,"3.2-3.4",
If([avgGrade]<3.6,"3.4-3.6",
If([avgGrade]<3.8,"3.6-3.8","3.8-4.0")))))
This feels bulky and computationally expensive. Is there an easier way to create these ranges to use as rows in my PivotTable?
EDIT: made some edits to clarify my question
EDIT2: type
What you've done is the appropriate pattern for creating this sort of column. If you're concerned about the gnarly nested IF()s, you can replace with a SWITCH(), which is just syntactic sugar for nested IF()s, but what you've posted is all you need.
In a PivotTable (I don't know with PowerPivot), if you use a numeric value as a Row Label, you can Right click the field, choose Group, define the Starting at value, Ending at value and By step, and you will get an equivalent result quite easily.

Efficient method to put several items into value field

I need to create several pivot table once and week, and I wonder if there is any efficient method to drag several item into value field. (I tried to left click on the item I need, but it will automatically go to "row" field.)
And also, is there any efficient method to set up "value field setting"?
I want to summarize value field by "sum", but it will automaticall become "count". If i have 20 items in "value field", I need to click value field setting for 20 times...
Given that you have used the PowerPivot tag then I will assume that you are talking about a PowerPivot PivtotTable not a standard Pivot.
The first thing to do is explicitly create measures (called Calculated fields in 2013) for each calculation you wish to make - not only does this mean you can choose to sum not count but also that you can specify the format you want and once it has compiled, the measure will be added more quickly that just dragging the column into the box.
The easiest way to create a measure is to right click on the table and then in the dialogue box add a formula such as:
=SUM('mytable'[mycolumn])
In the same dialogue you can name the measure and choose the number format.
Once you have the measures you need, you can create a 'set' which is simply a collection of measures/dimensions. The easiest way to do this is create the Pivot you want then go to:
PivotTable Tools>Options>Fields, Items & Sets>Create Set based on....
From there you can name the set and make alterations. Then in future you will see that set in the field list and be able to add it to you pivots with a single click.
Jacob

Resources