Order of Operations in Google Sheets - google-sheets

Has the order of operations changed in Google sheets?
If I enter in a cell
=1-1-1^2
I obtain -1
But if I enter
=-1^2
I obtain 1
If remember correctly, when I started using Google Sheets a few years ago, both expressions gave the same result -1. I was pleased that Google sheets had not adopted the irritating and deprecated Excel feature of giving the minus sign priority in the order of operations if it appeared by itself. But now I see that Google Sheets adopted the same rule as Excel. If I'm right, and Google somewhere down the road has decided to convert to the deprecated Excel habit, when was the order of operations altered?

logic of:
=1-1-1^2
is:
=1-1-(1^2)
if you expect the result to be 1 then you should write it as:
=1-1+(-1^2)
raising on the power is the top priority (as it should) over the minus sign (unless you use parenthesis) which are able to overwrite this priority and treat the minus as part of 1
pretty much the same as the windows calculator:
or google:
Has the order of operations changed in Google sheets?
no, it hasn't
when was the order of operations altered?
it wasn't. if you by any chance experienced different behavior then it was only fixed to reflect the current propper state

Related

How to design a system in Google Sheets that allows for people who don't speak the same language to know they're typing the same thing

I admit this is a strange request. Essentially myself and another person who speaks Mandarin need to work on scheduling asynchronously through a spreadsheet. If either of us enters something in, in our respective sections, it should update the other person's section to match. So If I changed Order 1 on Day 1 from Apple to Butter, it should look at the translated text for Butter in Chinese and update the dropdown list entry for Order 1 on Day 1 from Apple to Butter
Unfortunately it doesn't seem like there's anyway to add formulas to dropdown lists. Any advice here?
I created a super simplified spreadsheet of what I'm looking for Spreadsheet
there is a GOOGLETRANSLATE formula:
also, you have DETECTLANGUAGE that outputs the language code:
both of them (DETECTLANGUAGE is able to work with vertical arrays only) are not supported under ARRAYFORMULA so you will need to drag them around. also, it's worth mentioning that formulae are always 1-directional so you can have a dropdown to be translated but that translated output can't be used directly as the input for back-translation creating a paradox. with a scripted solution, you may have more flexibility tho.

Google Sheets: API To Get Crypto Prices and History?

As GOOGLEFINANCE() seems very limited in the cryptocurrencies it supports, are there any (free?) APIs that I can use to get data from?
Although I use GF() for ETH and BTC, I'm specifically looking for Price and Historical Closing Prices on ADA (Cardano).
I've searched the forum for suggestions, there aren't many and most are old. Binance's API seemed OK, but it gives prices in USDT instead of USD.
If anyone is interested, I found an API that offers a free key, although limited in the number of daily calls you can make: CoinAPI.
It seems very powerful, with quotes available in most currencies. So far, I've managed to get a current price:
Formulas shown in brown.
(1) shows the raw data returned, a two rows delimited by semi-colons.
(2) wraps a QUERY() around IMPORTDATA(), using offset 1 plus param 0, to not return the header row, then wraps all that in SPLIT() to separate the delimited text into columns.
(3) wraps (2) with INDEX() so I can get just the Price in the 4th col.
As this value will not automatically update like GOOGLEFINANCE(), I think I'll need to set a Trigger to do that.
I've also retrieved historical data, but I've yet to figure out how to split multiple rows of delimited text from the IMPORTDATA() function.
[Edit] See the solution to splitting multiple rows by #player0 at https://stackoverflow.com/a/69055990/190925.

Calculating average for more than one month of data

I am writing some formulas that will make up a dashboard that allows for a dynamic look-up of change in waiting times for admission into a hospital. In this case, what I want to do is create a lookback period of 1 month, 3 months, 6 months, and 1 year to see how waiting times have changed during this time at a few locations. It's a bit of a complex issue, but the stripped down data and my example code can be found here (fully shared for editing).
I have successfully gotten the correct formulas for finding 1 month worth of change, but how to apprroach more than 1 month's worth of data eludes me and this is especially problamatic because the date formatting is not standard excel/google sheets data format. As this data will be continously fed into the spreadsheet, I don't think I have the option to modify it either so I think the only option is to come up with some pretty funky formulas that treat months as text. Alternatively, I guess I can also try to make a formula that reformats the text into valid google sheets dates and then use that to make calculations but then while I could probably write that formula, I'd still not know how to get multiple months worth of data processed. Can anyone help take a look at the sheet? (feel free to copy/edit the file if necessary).
try like this:
=QUERY({INDEX(SPLIT(Data!A3:A, "T"),,1), Data!B3:C},
"select avg(Col3)
where Col1 >= "&DATEVALUE(EOMONTH(TODAY(), -4)+1)&"
group by Col2
label avg(Col3)''")
spreadsheet demo

using sum and countifs to get a percentage of 'yes'es across multiple columns by month and team - is there a simpler way?

I've been asked to create a summary for some google form responses, and though I have a working solution, I can't help but feel there must be a more elegant one.
The form collects data related to case checking - every month each team (there's 100+ teams) has to check a certain number of cases based on how many staff are in their team, and enter the results for each case they've checked in the google form. The team that have set this up want me to summarise the data by team, month, and section of the form (preliminary questions, case recording, outcomes, etc). There are 8 sections on the live form, ranging from 1-13 questions, all with Yes/No/NA/blank answers.
(honestly, it's not how I'd have approached setting all this up, but that is out of my hands!)
So they're essentially looking for a live monthly summary with team names down the side, section names along the top, and a %age completed that will keep up with entries as they come in (where we can also use importrange and query to pull the relevant bits into other google sheet summaries, as and when needed).
What I've currently got is this:
=iferror(sum(countifs('Form Responses'!$B:$B,$A3,'Form
Responses'!$F:$F,"Yes",'Form Responses'!$E:$E,">="&$B$1,'Form
Responses'!$E:$E,"<"&edate($B$1,1)),countifs('Form
Responses'!$B:$B,$A3,'Form Responses'!$G:$G,"Yes",'Form
Responses'!$E:$E,">="&$B$1,'Form
Responses'!$E:$E,"<"&edate($B$1,1)),countifs('Form
Responses'!$B:$B,$A3,'Form Responses'!$H:$H,"Yes",'Form
Responses'!$E:$E,">="&$B$1,'Form
Responses'!$E:$E,"<"&edate($B$1,1)),countifs('Form
Responses'!$B:$B,$A3,'Form Responses'!$I:$I,"Yes",'Form
Responses'!$E:$E,">="&$B$1,'Form
Responses'!$E:$E,"<"&edate($B$1,1)),countifs('Form
Responses'!$B:$B,$A3,'Form Responses'!$J:$J,"Yes",'Form
Responses'!$E:$E,">="&$B$1,'Form
Responses'!$E:$E,"<"&edate($B$1,1)),countifs('Form
Responses'!$B:$B,$A3,'Form Responses'!$K:$K,"Yes",'Form
Responses'!$E:$E,">="&$B$1,'Form
Responses'!$E:$E,"<"&edate($B$1,1)))/(countifs('Form
Responses'!$B:$B,$A3,'Form Responses'!$E:$E,">="&$B$1,'Form
Responses'!$E:$E,"<"&edate($B$1,1))*6),0)
It works, but it feels like a bit of a brute-force-and-ignorance solution. I've tried countifs & array, I've looked a pivot but I can't get the section groups, I've had a play with query but I can't figure out how to ask it to count all Yeses in multiple columns at once.
Is there a more elegant solution, or do I have to resign myself to setting up the next financial year's summaries like this?
Edit:
You can use plain array boolean multiplication to achieve the count, as trues are converted to 1s and false are converted to 0s:
=TO_PERCENT(ARRAYFORMULA(
SUM((f!F1:K="Yes")*(f!E1:E>=B1)*(f!E1:E<EDATE(B1,1))*(f!B:B=A3))/
SUM(6*(f!E1:E>=B1)*(f!E1:E<EDATE(B1,1))*(f!B:B=A3))
)
)
Renamed Form Responses to f
Numerator: SUM of
Question filter (f!F:K =Yes) and
Month filter (f!E:E is within month of B1) and
Team filter(B:B = A3)
Denominator: 6 times the SUM of
Month filter (f!E:E is within month of B1) and
Team filter(B:B = A3)
On this sample sheet that you provided you'll notice two new tabs. MK.Retab and MK.Summary.
On MK.Retab is a single formula in A2 that "re-tabulates" all of your survey data into a format that is much easier to analyze going forward. That tab can be "hidden" on your real project. It will continue to build the 6 column dataset forever. It would be a sort of "back end" sheet, only used to supply data to any further downstream analysis.
On MK.Summary is a single formula in cell A1 that Query's that dataset from MK.Retab and shows the percentage of Yes's by month by section by team in a format similar to what you proposed. I coded it to display the most recent month at the left, immediately to the right of the team names, and to push historical data off to the right. Even though people are often used to seeing time go from left to right, I find that the opposite method nice because it keeps you from having to scroll sideways to see the most recent data. It is very simple to change should you want to by getting rid of the "desc" that you find in the "order by" clause of the query string.
I find this kind of two step solution to problems like your useful, because while the summary migth not be exactly what you want, it's always easier to build formulas and analyses off of the data as laid out in the MK.Retab sheet.
As for the formula in MK.Retab, it is based on a method that I came up with a while back that constructs a large vlookup where the [search key] is actually a sequence of decimal numbers that is built by counting the number of rows in your real data set and multiplying by the number of columns of data that need to be repeated for each row. I built a demo some time ago that I'm happy to share with folks if you want to understand better how it works.
You said that your goal was to understand the formulas so that you could modify them going forward as needed. I'm not sure how easy that will be to do, but I can try my best to answer any questions you might have about the method or the solution generally.
What I can tell you is that some of the formulas are more complicated than they need to be because you just used Q1 Q2 Q3 etc instead of the actual questions. if you had a list of the questions asked somewhere (on some other tab, say), and what you wanted to call/name their corresponding "sections", it would make the formula significantly less complicated. As it stands, I had to use the appearance of the word "Comments", in row 1 to distinguish between where one section ended and another section began. The upside to that decision though, is that the formula I wrote is infinitely expandable to the right. That is, if you were to add another 100 columns worth of questions and answers to the sample set here, the formula would be able to handle that and break it out, so long as there was the word "Comments" between each section.
Hope all this helps.

Does Google Sheets have "Volatile" Functions like Excel?

In Excel, Vlookup and Indirect are notorious examples of Volatile Functions in which there is an unnecessary amount of recalculations every-time you edit a cell (even if it does not change the output). Is there a list of volatile functions in Google Sheets and is there any documentation warning about its use or is this not the same type of problem?
Update: Vlookup is not officially volatile in the latest version of excel but it did used to cause (haven't checked recently) recalculations when editing cells that could never change the output due to poor optimization.
Part of this question asked if there is any documentation listing which sheets formulas are volatile. I couldn't find any list from Google. (There are lots of 3rd party sites such as Ben Collins which provide a list, but no source is given). The only Google Documentation I could locate to confirm functions' volatility was to review the full list of Google Sheet's formulas. Unfortunately to fully check a formula, one has to click within the detail of each individual formula and check in the notes:
I cross-checked the Excel formulas that Microsoft lists as volatile and it appears Player() list is correct (no surprise). What's interesting (to me) is that Offset and Indirect are NOT listed as volatile in google sheets. This can allow for some more flexibility with array functions and other references.
Side Note on OP Comments Regarding Vlookup
OP asserts that vlookup is a volatile function. This is not correct, as was shown in the Microsoft link. VLookup does calculate less efficiently compared to index/match and xLookup but a change in a cell outside of the vlookup range will not trigger a recalculation.
yes, Google Sheet does have volatile functions:
NOW
TODAY
RAND
RANDBETWEEN
RANDARRAY
COINFLIP
WHATTHEFOXSAY
and the only issue with them is that they are hard to be frozen
update
with the latest pack of new functions, all volatile functions can be frozen:
=LAMBDA(x,x)(RAND())
=LAMBDA(x,x)(NOW())

Resources