I need to be able to calculate the median of numeric fields. I know that we aren't able to do it natively so I'm hoping that someone from the community has had to do this before and can help. There's an old post that references an older java site but its no longer available.
Basically, my organization only calculates the time between 2 dates and then gathers all those durations and finds the median. This is the only metrics they go by.
On average how many numbers are you talking about finding the medium of? Because this would be a VERY complicated process to do in Quickbase without using javascript.
A type of vanilla bubble sorting. Are you trying not to use javascript?
It will vary as it will need to be scalable the more entries we put into it. And No i would LOVE to use javascript, I've been practicing with onload on other apps and I can get that function to work but with the median, I would need to know what to put and where.
Apparently the Insert-sort with Romanian folk dance is the fastest algorithm at four minutes and three seconds so I would go with that rather than the Bubble-sort with Hungarian ("Cs�ng�") folk dance which comes in at five minutes and fifteen seconds.
Here is a JavaScript function getMedian that takes (1) a table dbid, (2) a query string, and (3) a fid of a numeric field and returns a promise that resolves to the median:
function getMedian(dbid, query, fid) { return Promise.resolve( $.get(dbid, { act: "API_DoQuery", query, clist: fid, fmt: "structured" }) ).then(function(xml) { var data = $('qdbapi table records record f[id=${fid}]', xml).map(function() { return parseFloat($(this).text()); }); data.sort((x, y) => x - y); var ilm = Math.floor((data.length - 1) / 2); var ihm = Math.ceil((data.length - 1) / 2); var median = (data[ilm] + data[ihm]) / 2; return median; }) }
You call it like this:
var dbid = "bnxssrg9s"; var dbidTable = "bnzd357bm"; var apptoken = "cnurzq5cgchgjgdsdiup6cgkq6ct"; $.ajaxSetup({data: {apptoken}}); var query = "{3.GT.0}"; var fid = "8"; getMedian(dbidTable, query, fid) .then(function(median) { console.log(median); });
When called on a sample application with this numeric data:
Hey Dan! One more question for you, first your code RAN BEAUTIFULLY, but question how do I pass this value created by the javascript to a numeric field so that it can be reported on.