Referencing data table by criteria - excel

I'm trying to use a similar formula as in Using QUARTILE in an Excel pivot table to summarise data by sub-populations into Excel 2013.
The syntax is: =MAX(IF(Model[MHH]=10112,Model[Ta],""))
It is supposed to get the maximum value of all the Ta (outdoor temperatures) at the first hour of the day in january only. The data table is called "Model" and contains the hourly values of three years, with [M] for Month, [HH] for hour. I would like to do the same with the PERCENTILE function, so a DMAX function will not work.
I calculated the Month value and the Hour value together to get a value for the "month-hour" to make it possible to refer to one criterium, a combination of month and hour, in the following format:1MMHH to make it possible for the value to be a number.
However if I execute the formula, it returns #VALUE.
If I evaluate the formula it give this error at Model(MHH), while if I just use the formula =MAX(Model(MHH)) it does give the maximum of all the values.

Related

Excel - Get hourly averages for data spanning 1 year (8760 data points)

I have an excel document with values for every hour for every day of a year.
In total there are 365*24=8760 values.
I would like to get the average value at every hour, (etc at 00:00, 01:00, 02:00..)
I was thinking maybe to sum every 24th value and then divide it by 365 but I don't know how to sum every 24th value.
Does anyone know how to do that?
Thanks for any help!
The clearer way of doing it is using a column to get the hour of each data point and adding a AVERAGEIF formula to calculate the average of every hour.
I am assuming your date/time is on A2:A8761 and the values on B2:B8761.
On C2, add the formula =HOUR(A2) and drag it down to find the hour of every data observation (for newer excel versions you can also
do =HOUR(A2:A8761) and the formula will automatically spill down). The results are numbers from 0 to 23.
Building the summary table:
Add a column listing the numbers 0 to 23 to represent the 24 hours. I did it on column E2:E25. Note that those are numbers, not date/time.
On F2, add the formula =AVERAGEIF($C$2:$C$8761,E2,$B$2:$B$8761) to calculate the average of the hours listed on column E. Then, drag it down. Finally, you will have the values you need on F2:F25.
Find bellow my result.
Please let me know if you have any question so I can improve the answer.

Calculating total monthly precipitation values using SUMIF function to specify date window

I've got an excel sheet with dates in one column (daily) and total precipitation values for that date in another column from 01/01/2000 to 31/12/2021.
I want to calculate the total monthly precipitation values from 2000 to 2021.
The formula I have been using after some research online was (which I was planning on iterating over the months):
=SUMIFS(B2:B8036,C2:C8036,"<="&DATE(2003,9,1),C2:C8036,">="&DATE(2003,9,30))
The values I want to sum (precipitation) are in the B column, the dates are in the C column. However, I get a zero value returned in the cell when I run the formula, even though the actual value should be 131.94.
I'm not sure what mistake I made in my formula.
My operators were wrong, changing it to
=SUMIFS(B2:B8036,C2:C8036,">="&DATE(2003,9,1),C2:C8036,"<="&DATE(2003,9,30))
solved my problem.

Excel - Take Average of Monthly Data

I have a historical data set for commodity pricing. Throughout the data set, the data starts inputting prices on specific days, rather than the average of the entire month. In order to keep the flow of having only the average pricing for the months.
In the best case scenario, I would use an Averageif function, however, the data for each month doesn't display a consistent amount of days.
How can I automate this the process: If the month is the same as the previous row and different than the next row, calculate the average of the ^ rows until you hit the next month.
Here's a simple display of what I mean:
]1
You can use a pivot table to get the output you want. It will also be neatly organized instead of having your averages mixed in with a mostly blank column. Photo below shows the set-up/output of a pivot table generated with random data.
For a solution without pivot tables, you can use the following formula :
=AVERAGEIFS($B$1:$B$30;$A$1:$A$30;">="&(A1-DAY(A1)+1);$A$1:$A$30;"<="&EOMONTH(A1;0))
The above example is from cell C1, and can be copied down the entire list. The dates are in $A$1:$A$30 and the values in $B$1:$B$30. The first conditions test on the first day of the month (calculated as A1-DAY(A1)+1),and the second condition as last day of the month (calculated as EOMONTH(A1;0)
This will obviously put the average value of the month on each row, but will also work if your data is not sorted on date. If this is the case, and you only want to display one number per month in the column (as in your own example), you can add an additional IF statement wrapped around the formula:
=IF(EOMONTH(A2;0)=EOMONTH(A1;0);"";AVERAGEIFS($B$1:$B$30;$A$1:$A$30;">="&(A1-DAY(A1)+1);$A$1:$A$30;"<="&EOMONTH(A1;0)))
So it will display empty in all cells, except where the month changes.

Getting average of data with multiple entries for a single date using pivot table in Excel

I have tried this, but I am unsuccessful. I have the data dump in an excel sheet (Excel 2010). The first column has month. The second has the dates. The third column has numerical data. I have applied filters on each column to get the data on the Pivot Table. There are entries for each date. There are sometimes multiple entries for a single date. Now, when I run the Pivot, I get the proper sum, but when I select average, the average is accurate only for the single entries associated with a date. I need to calculate average of multiple data entries for a single date. Here is an example:
November 11/1/13 30
November 11/2/13 25
November 11/3/13 20
November 11/3/13 25
Now, when I run the Pivot table and select to average the data, it calculates the average as (30+25+20+25)/4 = 20 (since there are 4 entries, so the sum gets divided by 4).
This is not desirable.
I require the calculation to be made as taking the 3rd and 4th entry as one for the date 11/3/13. So, the required output is (30+25+(20+25))/3 = 33.33.
I hope the example gives an clear idea of the requirement. I need a solution for this. How do we modify the Pivot so that the average is calculated not based on just the number of entries, but the average is calculated for the number of days.
Create the pivot table described by Ron (with Sum only, not Average), then copy & paste special (values) this pivot table, then pivot that for averages.
Put your dates in the "Row Labels" area. It will Sum and Average by Date
Edit: To get the average of the sum of the daily values, you can either enter an Average formula someplace for the Pivot Table Sum Column, or you could use the following array-entered formula:
=SUM(Values)/SUM(1/COUNTIF(Dates,Dates))
Where Dates is the range where you have your list of Dates (on the original data sheet) and Values is the range where you have your original list of Values.
To array-enter a formula, after entering
the formula into the cell or formula bar, hold down
while hitting . If you did this
correctly, Excel will place braces {...} around the formula.
SUM(1/COUNTIF(Dates,Dates)) will return a count of the Unique dates, so it will return 3 for the dates in question in your example.
This proposed solution uses a working column named: Value (U)
Assuming that your data is located at [B4:B8].
Add a working column at [E4:E8]
Enter this formula at [E5:E8]:
= IF( COUNTIF($C$5:$C5,$C5) > 1, 0,
SUMIF($C$5:$C$8,$C5,$D$5:$D$8) )
Then use the working column Value (U) to sum and average the values, also add Value (U) as Page Field to filter out the Value (U)=0.

Count based on calculation with no absolute range using excel

I have an Excel sheet connected to a txt file, with automatic refresh. I manage to get the data into the sheet. Below is an example of two rows:
1367945797 0,000 MainThread ---
1367945798 0,709 MainThread 200
The first column contains a unix timestamp, which Excel doesn't understand as a date/time info. I know I can convert the timestamp using the following formula:
=(((A1/60)/60)/24)+DATE(1970;1;1)
The second column contains a response time in ms.
The goal:
I want to count the number of rows where the time is:
Hour(formula_above) equals 16
, and calculate the average response time this hour
I'm trying to create a graph that shows the average response time for every hour in a day (1-24 hours).
It's important to note that I don't have an absolute range as new data is coming into the my data sheet.
I tried to use CountIF() but it doesn't look like it can calculate, and use the calculated value as if statement.
Any other ways of dealing with this issue?
Is there a simple function which itterates through the range (e.g: Sheet1!A:A) and gives me the value in each iteration, where I can return a value/boolean per iteration, and use countif or other formulas to do some magic stuff?
If your original timestamp is in column A you can use this array formula to average column B based on Hour 16 of column A
=AVERAGE(IF(HOUR(A:A/86400)=16;B:B))
confirmed with CTRL+SHIFT+ENTER
or you can pull the hour out using a helper column, e.g. in C2 copied down
=HOUR(A2/86400)
Then you can use AVERAGEIF like this
=AVERAGEIF(C:C;16;B:B)

Resources