Trying to add an additional condition to average time within another sheet.
This formula works currently to pull the average time within a range
'''=ARRAYFORMULA(AVERAGE(VALUE(TEXT("00"&Interaction_Data!R3:R,"hh:mm:ss"))))'''
I need to add an if condition to only average the rows that also contain "Partner 1" within the range C3:C of the "Interaction_Data" sheet
I have tried this following formula as I thought this would do it but it returns error #N/A
'''=ArrayFormula(if(AVERAGE(VALUE(TEXT("00"&Interaction_Data!R3:R,"hh:mm:ss")),Interaction_Data!C3:C,"partner 1")))'''
I feel like I have tried all other positions for the If statement, range and criteria but I have obviously missed the one that will work.
Any help will be awesome please
AVERAGEIF does not work with ARRAYFORMULA. Use QUERY instead.
=ARRAYFORMULA(QUERY(
{VALUE(TEXT("00"&Interaction_Data!R3:R,"hh:mm:ss")),Interaction_Data!C3:C},
"select avg(Col1) where Col2='partner 1' label avg(Col1) ''"))
Related
I'm copying a range of data (one column only) using QUERY(), however, I am trying to find a way to insert blank rows whenever a certain value is shown.
here, I'm trying to insert 2 blank rows whenever the value b1 shows. I've been trying to accomplish this with some query() and arrayformula() formula but I'm not getting close. We're trying to complete this using formula only (no scripts)
Here's the sample sheet
My solution is:
=query(flatten(ArrayFormula(split(transpose("b1 & & "&split(ArrayFormula(textjoin("&",1,A5:A)),"b1",0,1)),"&",1,0))),"select Col1 where Col1 is not null offset 2")
This is not perfect as there are spaces instead of blank rows. But I hope it might help you.
I have a quite complext formula (i mean that is complex to me) that Tom Sharpe helped me building to aggregate values and ordering them by months in a row(you can find the details in the original post but i think you'll only need the final formula which is:
=ArrayFormula(mmult(sequence(1,counta(A2:A),1,0), if((C2:index(C:C,counta(C:C))<=eomonth(G2,sequence(1,datedif(G2,H2,"M")+1,0)))* (D2:index(D:D,counta(D:D))>=eomonth(G2,sequence(1,datedif(G2,H2,"M")+1,0))),E2:index(E:E,counta(E:E)),0)))
and here is the result -> [J1:U1]
Now, what i would need to do as the final step is to be able to group data by a certain label (John or Jane in the example) on separate rows, but mantaining the order/aggregate by month on the row. On the example, this would mean having one row with only 'John' data and below, one with 'Jane' values.
I am struggling to understand how to adapt the formula to do so.
I have tried:
Using another array to first return a list of these labels with query(unique()) or something like that, but then i struggle looping in it with the other formula.
A bit more simplistic but it could work after all: on the 1st row (the cell next to where the data will be returned) writing 'John', on row 2 'Jane' and then using filter() to only pull data that matches. The 'John, Jane' value is for the example but the real labels won't be that many, the list of labels don't need to be dynamic.
The thing with these solutions is that they work when used separately, but i can't figure out how to nest this in the first arrayformula() that Tom helped me with...As i am just beginning with the google sheets queries.
I don't really need necessarily the complete formula/code but maybe just directions or tips to visualize the way i could solve this.
Thanks to all who might contribute
With hindsight I might have done better to go down the route of using a query to calculate the sums on my previous answer rather than Mmult.
This uses the same method as before to create a 2d array of amounts vs dates (going across) and individuals (going down). Then it uses Textjoin to generate a query to group by name with the required number of columns.
=ArrayFormula(query({A2:A,if((C2:C<=eomonth(G2,sequence(1,datedif(G2,H2,"M")+1,0)))* (D2:D>=eomonth(G2,sequence(1,datedif(G2,H2,"M")+1,0))),E2:E,0)},
"select Col1,sum(Col"&textjoin("),sum(Col",,sequence(1,datedif(G2,H2,"M")+1,2))&") where Col1 is not null group by Col1"))
This is the generated query
select Col1,sum(Col2),sum(Col3),sum(Col4),sum(Col5),sum(Col6),sum(Col7),sum(Col8),sum(Col9),sum(Col10),sum(Col11),sum(Col12),sum(Col13) where Col1 is not null group by Col1
Ideally there should be an extra section saying label sum(Col2) '' etc. to suppress the 'Sum' headers.
=ArrayFormula(query({A2:A,if((C2:C<=eomonth(G2,sequence(1,datedif(G2,H2,"M")+1,0)))* (D2:D>=eomonth(G2,sequence(1,datedif(G2,H2,"M")+1,0))),E2:E,0)},
"select Col1,sum(Col"&textjoin("),sum(Col",,sequence(1,datedif(G2,H2,"M")+1,2))&") where Col1 is not null group by Col1 label sum(Col" & textjoin(") '', sum(Col",,sequence(1,datedif(G2,H2,"M")+1,2)) & ") ''"))
I am encountering a capacity issue with one of my spreadsheets but certain information in the sheet still needs to be available to cross-reference. The original spreadsheet contains this formula:
=sumif(A:A,A2,N:N)=O2
I tried to do a direct transfer to the new spreadsheet by adding importranges like this:
=SUMIF(IMPORTRANGE("URL","Sheet1!A2:A"),IMPORTRANGE("URL","Sheet1!A2"),IMPORTRANGE("URL","Sheet1!N2:N")=IMPORTRANGE("URL","Sheet1!O2")
The equation keeps putting out an error saying "argument must be a range". Then I tried to write it out as a query like this:
=QUERY(AND(IMPORTRANGE("URL","Sheet1!A:A"),IMPORTRANGE("URL","Sheet1!N:N"),"SELECT SUM(CASE WHEN Col1=A2 THEN Col14)=O2"))
But the equation is showing FALSE as the result when it should say TRUE. I have attached an example spreadsheet so that these equations make more sense.
I also need the equation to take into account any new information that is placed on the new spreadsheet while also comparing it with the old info. I tried doing this to start with but then slowly realized the initial equation itself doesn't work.
=SUMIF(IMPORTRANGE("URL","Sheet1!A2:A"),IMPORTRANGE("URL","Sheet1!A2"),IMPORTRANGE("URL","Sheet1!N2:N"))=IMPORTRANGE("URL","Sheet1!O2")+SUMIF(A:A,A2,N:N)=O2
Any help is appreciated.
https://docs.google.com/spreadsheets/d/1q1cWh58p23dcQulQ4rz6v4iiDywEFHvcrvASao61xxo/edit#gid=0
use this formula instead of SUMIF:
=ARRAYFORMULA(IF(LEN(
IMPORTRANGE("1q1cWh58p23dcQulQ4rz6v4iiDywEFHvcrvASao61xxo","Sheet1!C2:C")),
IF(IFERROR(VLOOKUP(
IMPORTRANGE("1q1cWh58p23dcQulQ4rz6v4iiDywEFHvcrvASao61xxo","Sheet1!C2:C"),
QUERY(IMPORTRANGE("1q1cWh58p23dcQulQ4rz6v4iiDywEFHvcrvASao61xxo","Sheet1!A2:N"),
"select Col3,sum(Col14) where Col1 is not null group by Col3 label sum(Col14)''"),2,0))=
IMPORTRANGE("1q1cWh58p23dcQulQ4rz6v4iiDywEFHvcrvASao61xxo","Sheet1!O2:O"), TRUE, FALSE),))
I can't quite wrap my head around how to do the following: I have two sheets, with some results that reflect some counts. I want to calculate a percentage of the counts between the two sheets. The issue is that the data is dynamic, and the second sheet does not always have matching results... And the results are LARGE.
Here's a sample sheet:
https://docs.google.com/spreadsheets/d/1b3ap33kW7ErwF3PcwGPvtv_I3tR0TNdyuurJdHY1Fjk/edit?usp=sharing
I do know that for just a basic array formula percentage I can use this:
=arrayformula(iferror(A2:A/B2:B))
This work as long as the columns always match but in this case, they won't.
As seen on the sample sheet linked, I was able to achieve the results in the second tab by getting the "unique" from the first tab, but that shows users that did NOT have "reworked" tickets. I want to clean it up so that the only percentages shown are for assignees that do have reworked tickets.
I'm not sure how to tell it to only calculate if there's a "match" from '90 day resolved reworked'!B2 and '90 day resolved'!B2
Any insight would be greatly appreciated...
for a count, you can use QUERY formula:
=QUERY(A2:A, "select A,count(A) where A is not null group by A label count(A)''", 0)
to align things you can use VLOOKUP formula:
=ARRAYFORMULA(IFERROR(VLOOKUP(C:C, F:G, {1,2}, 0)))
if you want to calculate straight the percentage without QUERY midstep do:
=ARRAYFORMULA({UNIQUE(FILTER(A2:A,A2:A<>"")),
TEXT(QUERY(A2:A, "select count(A) where A is not null group by A label count(A)''")/
IFERROR(VLOOKUP(UNIQUE(FILTER(A2:A,A2:A<>"")),
QUERY('90 day resolved'!A2:A, "select A, count(A) group by A", 0), 2, 0)),"#.00%")})
demo spreadsheet
Testing Sheet:
Wondering if there is a witty way to add a Total to the last row +1 of
a Query result.
See Sheet 'Lookup' for a static example of what I am asking for.
I don't know if there is a way to have a hidden column that calculates
transposed only under the last row of a query, or if there is a smart
way to work Query for this answer.
All great answers. Each on very useful in its use case.
Макс Махров gets the answer with using a query statement.
Now I was not keen on having an extra sheet to hold the totals so I added a row at the top which I can simply hide and used this formula:
query({Orders!A:E;A1:E1},"select Col1, Col3, Col4 where Col2 = '"&C3&"' order by Col4",1)
Only problem I have is trying to figure out how to add TEXT to the bottom row, it seems to only want numerical input.
How do I fix this? What am I glitching?
Thanks !
Mars
The trick is to make second query and count totals for selected product.
Plan of actions:
add new sheet with query on it, something like this: =QUERY(Orders!A:E,"select B, 0, sum(D) where B like '"&Lookup!C2&"' Group by B",0)
Prepare arrayformula which combines data in Lookup sheet: = ArrayFormula({Importrange(1),Importrange(2)}) Note that number of columns must retain the same.
Edit query so it takes Col1, Col2, Col3... instead of A, B, C...
Make word 'total' visible instead of zero. Set number format: 0;0;total Set it for range B9:B on Lookup sheet
Make Conditional Formatting with formula =and($B4 =0,isnumber($B4)) for range A4:C on Lookup sheet.
That's seems have to complete the task.
Hope it Helps!
Your Example
Working example.
Here is one way:
Put TOTAL way down in row 1000
Select the range A3:C999. Select data > filter to create filters
Select C3, set the filter to hide all blanks
A second way is to limit the query result to show only the top 8 results:
Change your query to =query(Orders!A:E, "select A, C, D where B = '"&C2&"' order by D desc limit 8",1) It will reverse-order column D (largest first), and set row limit to 8.
Change the formula of your TOTAL to =sumif(Orders!B:B,C2,Orders!D:D)
Try this formula in the column adjacent to your query:
=ArrayFormula({$C$4:offset($C$4,count($C$4:$C),0,1,1);sum($C$4:offset($C$4,count($C$4:$C),0,1,1))})
It duplicates your column of values (I haven't figured out a way around that yet) and then adds a total to the bottom of that column, and changes dynamically with the range from your query.
Here's a working version.
Interesting challenge! It got the old grey matter turning... ;)
Thanks,
Ben