I've got a requirement to report on jira status information - and I'm not sure how to approach it.
Each issue has a status, and this status can change to any number of values.
What I want to be able to determine is how many issues where at any particular status at any particular time.
Previously, we had a system that polled for changes, and when one was detected, it recalculated totals. This is obviously very old-hat and inefficient.
Another approach is to intercept when a status changes, get the before value. post a -1 to the before key. Then post a +1 to the new key
If you then read over the data starting at the beginning and added up the + and -, you can get a count at any point in time. This is also obviously very old-hat and inefficient.
I was thinking that perhaps grafana / influx could handle this - however, I just can't seem to get it to work.
It must be something to do with aggregates or accumulations .
Has anyone done something similar and is willing to share ?
Edit: gentle bump : has anyone got some clues ?
Related
I am designing airtable.
I met some issue.
I need to column total sum like excel.
For example:
Column1 Sum(Column1)
1 1
2 3
4 7
6 13
Like this. What is solution?
Thank you.
Airtable is not a spreadsheet but a relational database, the behavior you're looking for isn't straightforward to reproduce because it's not meant to work like rows matter and aren't anything but a temporary sort - they don't, so they're not.
I know you were probably hoping for a better answer than another question, but I simply have to ask - why do you need to do this inside Airtable? Why not just use one of dozens readily available and entirely free spreadsheet/table solutions?
Generally speaking and especially if you don't need to manipulate that data afterward (a big if), Airtable already does the calculation you want on the fly and has it stored as part of its metadata.
The row-by-row addition would be doable using a combination of one autonumber field, a linked record (to another table actually polling for values) and a rollup returning data. I've done this back in the day once or twiCe and it was always an overengineered mess, even if I only had to deal with small integers like from your example.
There's Google Drive sync beta ongoing at Airtable right now. Just get that and do the calculations you need elsewhere?
The alternative is the Scripting app, but that might prove crippling in terms of how it could affect your automations quota. And recalculating fields by "hand" is... not sophisticated, to put it mildly.
But hey, don't take my word for it; Curiosity and nostalgia got the better of me so I gave this futile effort another go on your behalf, here's my best take at such an overengineered mess of a field-wide sum function that's wildly annoying to use but at least doesn't take all day to update records, even if presented with hundreds or thousands of inputs.
So, yeah... right tool for the job and all that: this ain't it, chief, but be my guest. You can clone the base from the Universe and everything will be ready for testing, just keep creating new fields or deleting the exiting few ones, then hit the "Run Script" button of the only app hooked into the base to see it recalculate the sum.
Dumping the code here as we, if anyone wants to set up a new testing environment manually:
let table = base.getTable('Table 1');
let query = await table.selectRecordsAsync()
let cellsToAdd = [];
let sum = 0;
const keepSumming = x => sum += x ;
query.records.forEach( x => cellsToAdd.push(
{
"id": x.id,
fields:{
"Column1":x.getCellValue('Column1'),
"Sum":keepSumming(x.getCellValue('Column1'))
}
}
));
//Airtable limits us to 50 table mutations per request, hence the splicing
while(cellsToAdd.length>0){
await table.updateRecordsAsync(
cellsToAdd.splice(0,50)
)
};
There appears to be a feature built-in to Airtable for this now. In the desktop app, at least, take a look down at the bottom of each column below all rows. There is a context menu for the column, in which Sum is one of several options.
I'm having some trouble trying to find a good and efficient algorithm for my use case.
Basically, I'm running a search into a database with ElasticSearch via Rails, and we have it set so that it can only return 25 results at a time (out of an approximate total of 5000), starting with the ID that you input (specified by a search_after parameter). I'm also inputting the ID of a certain search result, which I want the index of inside the overall database. The search has no way of knowing which page (of 25 results) it's actually on. We also have methods for finding the results immediately before and after it (which could probably also be modified to get results up to 25 before and after), regardless if it's on the first "page" (i.e. has an index of say, 26) or not.
Thus, it's fairly easy for the first 25 since you can simply do a search_after with the very first item in the overall database, but after that, I don't really know how to proceed.
I'd thought about simply upping the number of results to 26, then using modular arithmetic to check if it's the (n%25==1)th result, then changing the search_after to become the (n-1)th result, but I realized it wouldn't work if you directly click on any result after the first one to appear on the page. I also thought maybe I could use the aforementioned method to get the immediately previous search result and do a search_after on that, but then I quickly realized it would just return a 1 every time. Finally, I thought of simply stepping up the search_after until it finds the ID as the last result of the 25, and then using arithmetic to figure out what index it is, but obviously that's incredibly computationally intensive.
Let me know if any clarifications are needed, because I know it's a kind of odd question. Thank you.
My scripting skills are not the greatest but I can not figure out how to accomplish what I need to with just functions inside of Google Sheets.
My sheet looks something like this: https://docs.google.com/spreadsheets/d/1R6YJIR37wtOt8ZknSdMQPFFp0Llf_LHpmGCV32iQY00/edit#gid=1213399830
I have form responses being brought into the second tab via the Indirect function and are then modified with a ArrayFormula function to convert everything to the correct unit of measure and the summed to keep everything on the same row. All of this could be altered if needed.
I then have a column that is totaling inputs in other columns to give me my on hand inventory. We'll call this TotalsColumn.
What I am attempting to achieve is to make a script that checks the form responses, then either with:
OnEdit (which if I understand correctly does not work for information being ported in) and then alter the corresponding cell in the TotalsColumn.
or if not possible, then
With a time based trigger checking the ported information to see if there is a new entry if I don't sum it with a last function or something, or if the information remains summed (which seems easier to me) then to check if the sum is greater than it was last time it was checked and alter TotalsColumn.
The alter to the TotalsColumn, regardless of which method used, will always be a static number and I am pretty sure I'll need to make a script for each of my different inventory items but that's fine if I can just figure out a way of making this happen.
Thank for your time and any information you can provide.
Please feel free to point me to another thread where I can start to piece together a solution, I just could not find anything that related closely enough to my question or find a good jumping off point.
What happens in this situation?
I wish to store time series data with versioning. By versioning, I mean that I might have a metric energy_mwh with tag meter_id=123 and a fieldset something like this time=2016-01-01 10:00, mwh=20.50, read-time=2016-01-01 20:15 and if I re-read the meter at a later time I want to keep both the new and old version of the meter reading. Later when I query the data I will be mostly just interested in the mwh value with the highest read-time for any given time. If I query over a range of times the read-time is going to vary.
I am thinking of using InfluxDB or some other time series database with a similar data model.
Is there a right way of doing this? I believe that I must keep read-time as a tag - not a field or I will lose the older version of the data. I guess that is answer - but it doesn't feel right to me to have what I see as a piece of data: read-time sitting in an identifier - specifically a tag. Am I on the right track?
We used JIRA on-demand to manage an Agile project. Sometimes a story may be preliminarily sized in story points, but is then re-sized before commitment. I would like a query which shows the history of each story's status and point value.
For example:
Story 99 history:
1/1/2014 -- Status = Open; Points = Null
1/15/2014 -- Status = Reviewed; Points = 5
2/15/2014 -- Status = Committed; Points = 8
My goal (and maybe there is another way to do this) is to see how often we change our story sizes.
Thanks.
I thought I had a solution for you in using the "changed" JQL query (https://confluence.atlassian.com/display/JIRA/Advanced+Searching#AdvancedSearching-WAS), but unfortunately it looks like that is not supported currently in Jira. I received the following error from our hosted Jira instance:
History searches do not support the 'Story Points' field.
So as a user on demand query I don't think it is currently possible.
The only way I see of doing this would be to have a set day/time where you would run a query to get the current story points, export it as an excel file and then do it again after you review a set of stories and write some excel functions to show the change.
The larger question would be around your agile/scrum processes as to why estimated would change so frequently as to need tracking. If the team as a whole decides the points its ok if it doesn't match the reality once we start working on it. Or is this a case where it is updated on more than one occasion before its actually being worked on? If thats the case then I'd say that the story isn't well defined and need more information before it can be estimated?
Adding to Michael's answer, the daily monitoring for a given set of results to a query can be semi-automated using a JIRA filter subscription. You will still need to extract the issues from the results manually but at least in principle you can be sure not to miss any resizing that happens.