How can I stop excel from merging my SSRS report columns? - excel

I have an SSRS report that the end user is exporting to excel. When exported, this report seems to merge a couple columns and add a "blank" column within a column group in the report.
Here is the column group in SSRS:
Which for some reason becomes (Notice [2015 Expenditure] is merged into columns C and D in excel. Also column F [Expenditure] shouldn't even be there! it is not associated with a year, which the group is grouped by, and there are definitely no values in this "column":
For the extra column, I've considered that has to do with how I've set up the column group - but I can't really figure anything else out to change with it. It is a pretty basic grouping in SSRS.

You need to remove all report headers, footers, labels and images etc. from your report so that the ONLY data displayed is the grid/matrix and those column headings.
This will guarantee that your cells will be displayed correctly.
Once you have done that you can experiment with adding back the Report Headings and any other formatting step by step.
In my experience the less formatting the more chance you have of getting a usable spreadsheet.

I would just get the user to export to XML and then open in Excel.
Just to add onto what BIDeveloper has said, make sure the location of the grid/matrix is set to 0,0 coordinates in the properties window. This guarantees no columns to the left will appear.

Related

Find, Sum, and Remove Duplicates in 3 different subsets of data in a spreadsheet

I have a spreadsheet that contains truck load data. The spreadsheet contains each portion of the delivery cycle; Month-Year, Supplier(VDH_Columns) to Vendor Pickup(VPK_Columns) to Receiver(CUST_Columns) and Tons delivered(Tons). If the Vendor Pickup Columns are populated, the cycle goes VPK to CUST. If the Vendor Pickup Columns are not populated, the cycle goes VDH to CUST.
I want to maintain the spreadsheet exactly how it is and not make a CUST sheet, VPK Sheet, and VDH Sheet.
The ultimate goal is to have 1 Month_Year for each Receiver(CUST) and sum either the VDH or the VPK. Below is a piece of the spreadsheet(What it looks like now) and I manually created what I want it to look like.Spreadsheet Example
I tried a pivot table with a Month_Year filter but the problem is that I can't see once I try to add all the other columns it becomes so busy that I end up quitting. I've thought about Consolidate but I have no experience with that. I'm assuming VBA code would be able to accomplish it but I have no experience there either.
Thanks for any help
A Pivot Table is the way to do this. You need to drag all of your columns to the "Rows" field, and then drag the Tons column to Values. It should automatically use a SUM summarization:
Then, you would select a Tabular layout from the Design tab.
This will give you the desired output:
You can get rid of the (blank) values by using Conditional Formatting on the Pivot Table. Use custom number format ;;;

Do not show blank cells on excel graph

I have a problem solving something out in excel. I constantly have to manage financial informations from dozens of company as part of some startup acceleration programs.
In this context, as part of some analysis, I have to show, through graphs, the revenue information of the last twelve months of each company. However, some companies began operating 12 months ago, some other 8 months ago, and so on. Moreover, some companies report financial information each month, some others each quarter and so on.
However, if I select the same range of cells (same columns but different rows) for each company, the graphs will show the blank spaces when we don't have the monthly information of one company.
In this context, it is very inefficient to manually change the range of cells that each graph has to show for each company whenever we receive information from one company. Hence, I'm wondering if there is a way in which you could select a range of cells for a graph, but that the graph do not show the cells that are on blank, which could be some cells in the beginning or some cells at the end.
I'm attaching an image to explain more my problem, in which I point out with a red circle the blank cells that I don't want to have.
Directly copying #harrymc answer from here.
There are various methods for avoiding the zeroes, none of them are perfect.
Below are a couple of such methods.
Filtering the data set
Select the data range.
On the Data tab, click Filter in the Sort & Filter group,
to add a filter to all of the columns.
Click the drop-down arrow on the column's first row and uncheck 0.
Click OK to filter the column, which will filter the entire row.
Be sure to remove the filter when you're done.
Replace 0s with NA()
Select the data set
Click Find & Select in the Editing group on the Home tab and choose Replace,
or type Ctrl+H.
Enter 0 in Find what.
Enter =NA() in Replace
Click Options to display additional settings and
check Match entire cell contents.
Click Replace All.
Click Close and OK.
For more information see the article
How to suppress 0 values in an Excel chart.
My addition
One thing to note is that if these values are formulaic, then you can N/A them out via the formula bar. That would have the graph disregard the values.

Adding slicers for both the rows and columns in a Pivot chart

I work with this data:
link to screenshot
The goal is to create a (bar) chart where I can choose both which week (01, 02, etc.) and which column (sleep, exercise, etc.) it displays. While adding a slicer for Weeks solves a part of that problem, I cannot seem to find a way to add a slicer for the column categories. I can add a slicer for a particular column category, like Sleep, but that only gives me the option to choose from different numbers for each week inside the table.
Although I realize this could be fixed by simply removing unwanted/adding wanted fields inside the Pivot table, it's not particularly feasible because the end goal is to have a dashboard where one can easily make a selection of different criteria for data filtering. Below is a screenshot of what I'd like the end result to look like, excpept that there'd be an additional slicer that allows me choose which column data I wanted displayed.
Approximate example of desired end result

Generate summary gantt chart from detailed activities

I want to create a gantt chart summary that shows a person´s whole "busy" and "free" schedule by day and in a single row, from a detailed gantt chart with a list of activities of different people in multiple rows.
Basically go from this:
To this: (which I created Manually)
To be able to give a summary of people´s shifts free time between activities.
Right now I´m just using this formula to compare the start and end date in each row and produce a "1" if the condition is True, then I just condition formatted the whole Gantt cells.
=IF(AND(Q$8>=$N12,DAY($K12)<>DAY($J12)),1,IF(AND(Q$8>=$N12-0.00001,Q$8<$O12-0.00001),1,""))
I have no idea how to start. I was thinking of doing the nest things:
Create a table of the names of all the possible people to be added in the gantt chart.
Program the macro to create a new sheet with the same template.
Program a loop which starts iterating with each person´s name:
For each person´s name which exists in the gantt chart to be summarized, start creating new rows per each day they have activities scheduled (I can´t figure out yet how I´d iterate through this).
Within the each person´s loop, start iterating each row on the original sheet, evaluating each start and end date´s and pasting on the new sheet´s current person´s current day row a "1" if the condition was true in the corresponding hours.
Loop until all individual activities of each person are finished.
Continue with next person.
I´d like to know if this is the logical way to go and if you have any pointers or similar code to recycle, I am not proficient in VBA and Excel macros.
Not sure if I understand properly, but it looks like you got a set of multiple records where you store the times In and Out of each worker, several rows for each worker.
And based on that, you would like to resume data, one row per worker, highlighting start and end time of each worker, but all in a single row.
I made a fake dataset like this:
I added 2 extra columns (you can even hide them if you don't want to see them)
Field START TIME got this formula:=B2-INT(B2)
Field END TIME got this formula: =C2-INT(C2)
In Excel, Dates are integers values and times are decimal values. I used both formulas to get only the decimal part of each start and end.
All this data is a table object named T_WORKERTIMES. I made a table object so if you add new records, the Gant Chart will autoupdate.
Then I made a simple (kind of horrible) Gant Chart:
The formula I've used in H2 and drag is:
=COUNTIFS(T_WORKERTIMES[Worker];$G2;T_WORKERTIMES[start time];"<="&H$1;T_WORKERTIMES[end time];">="&H$1)
Actually, all my data is in same sheet:
I added 2 Conditional Formating Rules to highlight cells in green/white if the result of the formula is 1/0.
Also, working with times sometimes can be hard, because decimals. 0,677083333335759 means 16:15. But 0,6770833333333333 too, so in Gant Chart I rounded up headers to 6 decimals.
My formula in H1 is =ROUND(7/24;6)
My formula in J1 and drag to right is =ROUND(H1+1/24/4;6)
So now everything works fine. Please, notice in worker 1, there is no activites from 07:00 to 08:00. So I add a new row with that data and everything updates:
I've uploaded a sample yo Google Drive you can see the formulas and hope you can adapt this to your needs.
https://drive.google.com/file/d/1KOuCAYsmlY9gfNUCUhIrihXu-tJz-K7t/view?usp=sharing
Biggest issue here is the decimal part of times, to make sure they fit the Gant Chart. An easy solution would be substracting just 1 minute to start time column (calculated, you can hide it) and sum 1 minute to end time column (calculated, you can hide it).
Hope this can guide you in your project.
It looks like you are trying to extract unique records per person and day to get a person/day summary of time availability but also want it to be automated as you add more people and days.
I was able to do this with a combination of powerquery and a pivot table. When new persons/dates are added or changed the report will update but you will need to refresh using CTRL+ALT+F5
you want to highlight your entire report or an area as big as you think it will get. While highlighted you will then utilize named range feature under FORMULAS tab -> DEFINED NAMES ribbon -> DEFINED NAME dropdown. We could name it REPORTAREA or something like that.
Make sure you change the conditional format formula in report to show 0 instead of "" so this can work properly
2 go to DATA tab -> GET AND TRANSFORM ribbon -> From other sources -> Blank Query.
This will open the power query editor as a blank query
3 In the formula bar type =Excel.CurrentWorkbook() case sensitive is important
4 From there you will see CONTENT and NAME column.
In the NAME Column select the drop down and go to TEXT FILTERS -> Equals... Type in the name of your named range so the query does not pick up anything else on accident.
5 Remove the NAME column by right click selecting it and then remove.
6 you will notice the CONTENT column has two curved arrows pointing left and right instead of straight down like you are used to in excel. Click these arrows and make sure you uncheck the "use original column name as prefix" option box and ensure that the EXPAND option is selected. Then click okay.
7 At this point it looks alot like your report. Go to the HOME tab -> TRANSFORM ribbon -> Use first row as headers.
8.Select only the columns that are NOT THE 24 hr STYLE TIME LABELS of your report and then right click -> Unpivot other columns
9 At this point you can start removing some of the columns you dont want by right click and remove. Also double click and rename the columns as you wish. You can right click the top of the column and change types to what you want.
Dont worry about the 24HR style time zones not looking correct as this will be fixed later, this column should be changed to decimal type and not time zone type.
select a column that has the date information you need and right click -> Duplicate column -> change type to date.
11.At the top left part of the screen there is a CLOSE AND LOAD drop down where you will load to a new worksheet.
That will produce a green table. Select the table and press ALT+D+P to produce a pivot table linked to the green table you produced from the query.
You may need to close the Queries and Connections box that opened in order to see the pivot table options that will appear on you right.
Drag the 24hr style column to the columns area.
Drag the People to the Rows area and after Drag the Column you made in step 10 to the Rows area.
Drag the conditional format column to the Values area.
Your pivot table wont look exactly like what you want. while pivot table is selected go to DESIGN tab -> REPORT LAYOUT -> Tabular and also SUBTOTALS -> DO NOT SHOW SUBTOTALS while in the same tab.
13 Highlight all of the 24hr style time labels and format them and after highlight the inside of the pivot table where all the 1 and 0 will be and apply the conditional formatting you applied previously. Dont forget you changed the formula originally so your if statement does not end with "" but instead with 0.
If you would like i think it is easier to switch around the ROWS and COLUMNS area of the pivot table fields so that the report is easier to read. I have chosen to do so in the pictures. If you want to keep the report the way you are used to you can follow previous instructions.
I put the above comment down here as a complete answer.
I call those cells after "Finish date" column as "Chart cells". To extract a unique list of names, please refers to: here
If each name, you can use the followings formula and format for cells value >0 to show the bars.
=SUMIF([name range], "[each name]", [for each column of the chart cells])
If you further needs to filter by dates, you need to use sumifs() instead:
=SUMIFS([each column of chart cells], [name range], [unique name obtained from above], [Finish date range],"<=" & DATEVALUE("[target date]")+1,[start date range],"<=" & DATEVALUE("[target date]"))
This is the Excel formula solution, which is good if your table is not huge.

Is there an easy way to reformat a poorly-formatted tree to a two-column table?

I have a table representing a series of components and their subcomponents, and the subcomponents' respective subcomponents, and so on. It currently looks like a tree (one-to-many relations), but it could change at some point to resemble a graph (many-to-many relations) instead. Unfortunately, it was poorly formatted by its author, and looks something like this:
The above format is poor because there is a lot of data duplication and it is limited to a set number (4) of tiers. I would instead prefer if it looked something like this:
The above format is nice because there is very little data duplication, and it is not limited to a set number of tiers.
In case there is any confusion about what the tables represent, here is a graphical representation of the data:
It is simple enough to convert from the poor format to the nice format, but there are hundreds of root components, and manual data entry would be far too time-consuming and tedious.
I suspect this problem is unique and I am prepared to write some VBA code myself to parse the table into the nice format, but I thought I'd make sure that this wasn't a common problem with a pre-rolled solution before I rolled my own.
Is there a technical term to describe the poor formatting in the first table? Is there an easier way to reformat the data than to write a VBA macro?
This may be a complete aberration but it works for your sample (and at the moment I don’t have time to break it!)
Add an index (and a label for it) and reverse pivot (eg see An excel formula to find a row/column index in array).
Instead of drilling down on the Grand Totals intercept, drill down on each of the totals for the Tiers.
Reassemble the tables side by side, delete all columns except the Value ones and copy table to another area with Paste Special Values. Remove Duplicates on the range. Every time the value in the column immediately to the right does not change, delete and shift the values in the cells to the left. Reorder the columns right to left.
I copied each pair of adjacent columns in the Tier table (Tier 1 & Tier 2, Tier 2 & Tier 3, Tier 3 & Tier 4) and pasted them stacked vertically into a single pair of columns (Subcomponent & Component).
Next, I removed duplicates by selecting both of my new columns and clicking Remove Duplicates in the Data ribbon tab.
Next, I had to remove all rows which contained a blank cell in the Subcomponent column. To do this, I selected both columns again and filtered the data by clicking Filter in the Data ribbon tab. I selected (Blanks) in the Filter menu on the Subcomponent column and deleted all visible rows. I removed the filer by selecting (Select All) in the filter menu.
The resulting table contained many blank rows, so again I removed duplicates, and then manually shifted the data up one row to displace the one remaining blank row.
In the end, it took about a half hour, which is probably less time than it would have taken me to code a macro, and definitely less time than manual data entry.

Resources