I am working on creating a pivot table for the data I have. The data looks something like below:
ID Policy_July Policy_June Policy_May Policy_April Label
13 High Med High High High Good
2 Low Low Low Low Low Good
3 Low Low Low Low Low Good
4 High Med High High High Good
5 High Low High High High Good
6 Low Low Low Low Low Bad
7 High Med High High High Bad
8 High Low High High High Bad
I am comparing results from July with other months. Is there a way I can add a filter for row to enable me to change "Policy_June" to "Policy_March"? Basically, instead of having a filter for column, can I have filter for row in pivot table? If so, can you please guide me on how can I do it?
Again, what I am looking for is to have a filter button above the pivot table that would enable me to change "Policy_June" to "Policy_April".
Secondly, is there a way I can have "Grand Total" as a column (like I have at the bottom of pivot table)? I am trying to sum the value of "Bad" and "Good" for "High" and show the result in the column in yellow.
Let me know if you need any additional clarification.
You can normalize your data by giving it a layout similar to this:
ID PolicyMonth Status Label
13 July High Good
13 June Med Good
13 May High Good
...
and create a Pivot with ID in vertical (Row Labels) and Status in horizontal (Column Labels) direction. You then can filter Row and Column Labels for a single (or multiple) values.
Not sure though how you would like to process the crosspoint data (Status, Label) as you only can sum/count/average/min/max by default ... this possibly may require conversion of Low/Med/High into numbers (0,1,2) and an average for the row total.
Edit
Further to your comments I understand you want to analyze a Delta ...
columns A..G contain original data
columns H..L contain a numeric representation according to formula
H5: =IF(B5="High",2,IF(B5="Med",1,0))
cells C1 and C2 contain the month names to be compared ... they are identical to headers in H4..L4; change as you like ... data validation using a list of values and in-cell drop-down is thinkable
column M - big trick - is calculated using INDEX and MATCH functions, i.e.
M4: =INDEX(H5:L5,1,MATCH($C$1,$H$4:$L$4,0))-INDEX(H5:L5,1,MATCH($C$2,$H$4:$L$4,0))
Pivot table is created with Diff as Row Label and count(ID) as data, displaying the ones that stayed flat (0), jumped up or down by 1 or 2 levels ... this of course can be filtered to supress or highlight the ones staying equal.
Result in Diff could be further processed into a DiffText using nested IF's and displayed in pivot rows instead of Diff
in screenshot: 3 ID's stayed unchanged, 3 ID's improved by 1 level, 2 ID's improved by 2 levels
Pivot table can drill down to the ID level to show WHO were the good/bad guys if you add ID to the row labels
Hope this comes closer than my 1st attempt.
open image in new tab to get larger size
Related
After looking at a few similarish questions I figured I needed something more specific so asking here. I will start by explaining the situation:
The Setup
I have a Store which sells Cakes, Cookies and Wine. I have the weekly sales data of each product sorta like this:
Product ID
Product Name
Quantity
Value
Week Ending
1
Ginderbread
2
£4
13/01/22
2
Chocolate chip
5
£25
13/01/22
3
Red Wine Bottle
1
£10
13/01/22
4
Sponge Cake
3
£9
13/01/22
Currently every week's data is stored within the same table, with me using a Week filter to show only the week i'm interested in.
Using this Data I created PivotTables that shows the sales of each category, with the ability to drill down to show the specific products. Table looks something like this:
Category
Quantity
Value
Cakes
2
£4
Cookies
7
£29
Wine
1
£10
The issue
I now want to stick in a new calculated column that shows the Value as a %. E.g The total value for the previous table was £43, so Cookies is about 67%. If I drill down, it would show the Chocolate Chip record as 80% and Gingerbread as 20%
I imagine doing this would be easier if each individual week's data was on a different table, but I got a lot of weeks and I also want to do tables showing the sales for over a period of time. Plus I don't know of a way to merge the "value" and "quantity" columns, etc instead of having 1 for each week being shown.
any advice would be appreciated
Create an extra column in the source table (prior to filtering) entitled "perc" calculated as the corresponding value for each row divdied by the total value across all rows (se pic. / eqn. for first row below) --
=E2/$E$6
No calculated fields required - just include perc as the mesaure of interest in your pivot table, with value setting as 'sum':
The reason why this worked is because of the common denominator - which allows one to sum ratios on a 1:1 basis.
Devising a calculated field using the standard 'fields, items & sets' functionality for ordinary pivot tables would not be feasible / possible as far as I am aware. You would need to move into the realm of power pivots and data models - which is not too complicated (readily accesible directly from the field list per below) - however, I see this as unnecessary complication for the task at hand.
Side notes:
Using table names in your functions is sometimes more convenient when entering, albeit may appear tricky at first when reviewing - first eqn above becomes:
=[#Value]/Table1[[#Totals],[Value]]
I have a Google Sheet (Excel formulas apply) containing 2000 transactions that are structured like below:
Link to Google Sheet with example calcs here.
I need to calculate the Profit (ie. FIFO Capital Gains) for every sell order and place this amount in the 5th column (as pictured). This can be achieved with either traditional formulas or with a Google App Script. Preferably in Google Sheets.
I'm finding it difficult via formulas to match the sell order with the buy as you proceed down the table as some sell orders are split across multiple buy lines. If anyone could help with a formula or solution to tackle this problem it would be much appreciated. This is an updated question to the original here.
PRELIMINARY CONTEXT
Screenshot below refers:
Google sheets here
IMPORTANT UPDATE: re: 2000+ rows, see link in my last comment (for OneDrive template, s.t. expiry, and bottom of this proposal for screenshot of error "too large to import")
fyi: (Office 365 - Excel - fns. such as 'filter' etc., so #Name! will be ubiquitous upon opening this link; however, sharing this should serve as a convenient means to replicate above screenshot in the correct version of Excel)
REQUIREMENTS
Office 365
Adequate space to the right or ability to utilise extra sheet for calcs as req.
APPROACH
High-level | Take-aways
• Relies on 2 additional tables: Qty 'depletion' table (here - G:P) and corresp. Profit Vectors (here - R:Z)
• Compressed representations (2x2 tables, per Summary Tables, here: rows 19:32) could be explored to simplify matters (albeit these are still Work in Progress ['WiP'])
• VB could be attractive alternative too
Low-level | Procedural
Single-cell function could not be found without exceptional complication (however, suspect it could be possible e.g. using FilterXML?)
Qty label transposes filtered negative quantities (grey shaded, G3: J3)
These values are depleted in turn (from left to right, i.e. dependency on having data sorted in ascending order by date (in this depiction, data first sorted by 'fruit' as these are assumed to be independent in the context of the profit calc.)
For example, -5 quantity (G3) offset by +10 (B3) to yield +5 which, in turn contributes towards the -35 qty (H3) to yield -30. No further contribution can be made (left to right); next row (5): +20 avail (given), no offset against -5 (G3, already 'reimbursed', so 20 offset against -30 (H4) to yield -10, and so forth.
Worksheet set up to accommodate longer list of fruit / profits
Result table of residual 'quantities' (~ G:J) applied to price differential to yield 'profit vectors' (R:U) which are summed against corresponding negative quantities to produce Profit score (yellow shaded cells)
FUNCTIONS
Salient functions (all of which should be available within Google Sheet, but for completeness):
1) Profit calc. (E4, drag down):
=IF(B4<0,SUM(INDEX($R$4:$AA$13,0,MATCH(A4&C4,$R$2:$AA$2&$R$3:$AA$3,0))),"")
This can be dragged down / to right as far as desired (in this case, goes to: Z13)
2) Qty table - contents (G4)
=IF($A4=G$2,IF(G$3<>"",IF(G$2=E$1,IF($B4<0,IF(G3<0,G3,0), IF(E4<0,0,E4)+IF(G3<0,G3,0)), IF(G$3<>"", IF($B4<0,IF(G3<0,G3,0),$B4 + IF(G3<0,G3,0))))),G3)
3) Qty table - headers (G2, G3 resp.)
=MID(TRANSPOSE(FILTER(A4:A13&B4:B13,B4:B13<0)),1,SEARCH("-",TRANSPOSE(FILTER(A4:A13&B4:B13,B4:B13<0)))-1)
=-1*MID(TRANSPOSE(FILTER(A4:A13&B4:B13,B4:B13<0)),SEARCH("-",TRANSPOSE(FILTER(A4:A13&B4:B13,B4:B13<0)))+1,LEN(TRANSPOSE(FILTER(A4:A13&B4:B13,B4:B13<0))))
Drag to right as far as desired / able to (this case have been dragged to col. P)
4) Profit table - contents (R4, drag down/right)
=IF(R$2<>"",IF(G3>0,0,IF(G4>0,ABS(G3),G4-G3))*(R$3-$C4),"")
5) Profit table - headers (R2, R3 resp.):
=MID(TRANSPOSE(FILTER(A4:A13&"-"&$C$4:$C$13,B4:B13<0)),1,SEARCH("-",TRANSPOSE(FILTER(A4:A13&"-"&$C$4:$C$13,B4:B13<0)))-1)
=1*MID(TRANSPOSE(FILTER(A4:A13&"-"&$C$4:$C$13,B4:B13<0)),SEARCH("-",TRANSPOSE(FILTER(A4:A13&"-"&$C$4:$C$13,B4:B13<0)))+1,LEN(TRANSPOSE(FILTER(A4:A13&"-"&$C$4:$C$13,B4:B13<0))))
MISC
Alternate solutions derived & explored include triangular frameworks
(rows 17-32).
These tabulate the interaction between values assoc.
with positive and negative quantities positive/negative quantities
(and corres. dates)
Should be noted these are otherwise unnecessary (in terms of functions, previous 'section'
Continuing in the same vein as before....
6a) 1st summary table (Qty): row and col headers (A22 - drag down, C19 - drag right resp.):
=FILTER(D4:D13,1*IF($A$21="*",1,(A4:A13=$A$21))*(B4:B13<0))
=TRANSPOSE(FILTER(D4:D13,1*IF($A$21="*",1,IFERROR((A4:A13=$A$21),1))*(B4:B13>0)))
6b) 1st summary table (Qty): running total (c19, drag down / right as req., in this case: to P19)
=SUM($C21:C21,$B22#)
6c) 1st summary table (Qty): content (c22, drag down or tonight as req.)
=IF(OR(C$20="",$A22=""),"",IF($A22>C$20,MAX(0,C21+MIN(0,SUM($B22:B22))),C21))
7) 2nd summary table (Profits): C29, not draggable
=MIN(C$21,C$21+$B22)*($B29-C$28)
Note; other features of 2nd summary table (row / col headers) follow from 1st. Also, placing '*' in the fruit selection cell (A21) returns all (this is still WiP as mentioned previously).
SCREENSHOTS FOR LARGER UPLOAD:
I have some results data in around 10 columns (sample in CSV below) that I would like to run a formula or formulas per row to determine if the trend is
reasonably steady/predictable, or lumpy (no straight lines expected)
generally trending upwards or downwards over the period
changing trend towards the end (most recent 3 months) or continuing it's trend
As the sample shows below, some rows do not have all the data, but still need a determination of the general trend and consistency of the results.
A graph would display these easily enough, but I have thousands of rows to compare, so is not efficient or feasible.
I've tried a few formulas such as trend, growth, stddev, avedev, but I suspect I might have to use them in combination, which is currently beyond me. I feel like using the percentage difference between neighboring cells will help standardise the results to a degree, rather than the value of each cell. If the percentages are all positive then the trend is upward, but that's the best I've been able to come up with that I'm happy gives a clear answer.
I'm using google sheets, but might be able to convert an Excel formula.
Any suggestions?
May,Jun,Jul,Aug,Sep,Oct,Nov,Dec,Jan,Feb
11.65,11.79,11.96,12.26,12.71,12.6,12.71,13.6,14.1,14.7
0.57,0.65,0.33,0.89,1.03,0.74,1.35,0.81,2.13,2.15
1.85,1.88,1.84,1.92,2.07,2.24,2.56,2.74,2.85,2.92
,,,0.66,0.72,0.78,1.33,1.43,1.47,1.52
,,,,0.64,0.6,0.56,0.55,0.3,
,8.97,8.54,10.46,11.44,8.06,7.42,7.86,7.66,7.1
2.67,1.53,1.84,2.43,2.94,3.43,4.04,7.46,6.25,9.09
Row 1 - Smooth growth
Row 2 - Lumpy growth
Row 3 - Growth
Row 4 - Growth
Row 5 - Declining
Row 6 - Lumpy. Past 3m decline.
Row 7 - Growth. Past 3m lumpy
Can I define different aggregation methods for subtotals in different dimension in an Excel pivot table?
The following example shows a result I'm trying to obtain. The metric to aggregate is, let's say, lines of code of a software project. The 2 dimensions in question are Date and Organization. In source data, Organization is broken down into 2 columns, Department and Project, while Date is a single column and Excel makes up the Months/Years summaries automatically when making the ODBC data connection.
A metric such as this one should be aggregated differently along the different dimensions. For the Organization dimension, the subtotal for all projects of the department is the SUM, but in the date dimension, the subtotal for all months of the year is the MAX of any given month (or perhaps AVG, or last etc. but certainly not SUM).
I've tried to define the different aggregation methods in Excel in the field settings, but it always selects one or the other method for both dimensions. Is there a way to do it, preferably using standard Pivot Table mechanisms or at worst a UDF in Excel?
What I would do to tackle this problem is to add both aggregation functions: sum and max , then hide ( or shrink a lot ) those columns you do not want to display.
in the above example I shrink columns B,D,F and I because of they has values that are out of scope for your requirements.
The "Total Max of Loc" displays a value consistent with the function expressed throughout the entire column: that is "the maximum number of lines of code reached by each project in each department; this could lead to misunderstandings when we observe the values of the subtotals and grand total; i.e: The "Grand Total - Total Max of Loc" is not the "Total Max of Sum of Loc": in the example, it shows 18 which represents the absolute maximum value of Loc in a Project in each Department; In the same way the Total Max of Loc for Department 2 is 18 and form Department 1 is 12
When requested a different behavior as expressed in comment to this answer, I think we are entering into the strong customizations space and some solution could be found by writing custom macro and by leveraging the getpivotdata function or, if it can be acceptable for your case, simply by the addition of a new column with the max()formula and possibly hiding the column "Total Max of Loc"
I made a little test machine that accidentally created a 'big' data set:
6 columns with +/- 550.000 rows.
The end result I am looking for is a graph with 6 lines, horizontal axis 1 - 550.000 measurements and vertically the values in the rows. (capped at 200 or so). Data is a resistance measurement that should be between 0 - 30 or very big (borken), the software writes 'inf' in these cases.
My skill is limited to excel, so what have I done until now:
Imported in Excel. The measurements are valuable between 0 - 30 and inf is not good for a graph, so I did: if(cell>200){200}else{keep cell value}.
Now making a graph is a timely exercise and excel does not like this, result is not good.
So I would like to take the average value of 60 measurements to reduce the rows to below 10.000. So =AVERAGE(H1:H60)
But I cannot get this to work.
Questions:
How do I reduce this data set and get a good graph.
Should I switch
to other software that is more applicable?
FYI: I already changed the software of the testing device to take the average value of a bunch of measurements the next time... But I cannot repeat this test.
Download link of data set comma separated file 17MB
I think you are on the right track, however my guess is that you only want to get an average every 60 rows and are unsure how to do this.
Using MOD(Number, Divisor) inside an if statement will let you specify that the average should be calculated only once in every x number of cells.
Assuming you'll have one row above your data table for headers, you are looking for something along the lines of:
=IF(MOD(ROW(A61),60) = 1,AVERAGE(H2:H61),"")
Once you have this you can filter your average column to non-blank values and use this to create your graph.