从 Jira Cloud 为 Google 工作表解析状态字段中的天数

Parse Days in Status field from Jira Cloud for Google Sheets

我正在使用Jira Cloud for Sheets Adds on in order to get Days in Status field from Jira, it seems to have the following syntax, from this post

<STATUS_ID>_*:*_<NUMBER_OF_TIMES_ISSUE_WAS_IN_THIS_STATUS>_*:*_<SECONDS>_*|

这是一个例子:

10060_*:*_1_*:*_1121033406_*|*_3_*:*_1_*:*_7409_*|*_10000_*:*_1_*:*_270003163_*|*_10088_*:*_1_*:*_2595005_*|*_10087_*:*_1_*:*_1126144_*|*_10001_*:*_1_*:*_0

我正在尝试提取问题是 In QA 状态的次数以及给定状态的持续时间。我正在处理解析此模式以获取此信息并使用 ARRAYFORMULA return 它。 Days in Status字段信息仅在问题完成时提供(处于Done状态),否则不提供任何信息。如果问题处于 Done 状态,但未转换为给定状态,则不会在 Days in Status 字符串中提供此信息。

我正在尝试使用 REGEXEXTRACT 函数来匹配模式,例如:

=REGEXEXTRACT(C2, "(10060)_\*:\*_\d+_\*:\*_\d+_\*|")

它 return 是一个空值,我期望 10068。我注意到当我使用 REGEXMATCH 函数时它 returns TRUE:

=REGEXMATCH(C2, "(10060)_\*:\*_\d+_\*:\*_\d+_\*|")

所以语法不清楚。 Google作为正则表达式的参考参考如下documentation. It seems to be an issue with the vertical bar |, per this documentation it is a special character that should be represented like this \v, but this doesn't work. The REGEXMATCH returns FALSE. I am trying to use some online RegEx tester, that implements Google Sheets syntax (RE2), I found ReGo,不知是否有效

我正在尝试使用 SPLIT这样的功能:

=query(SPLIT(C2, "_*:*_"), "SELECT Col1")

但是从 Days in Status 字段字符串中获取我需要的所有值似乎是一种更复杂的方法,但它很好地将所有值与之前的模式分开。在本例中,我得到了第一个状态 ID。 SPLIT编辑的 return 列数会有所不同,因为它取决于问题为了达到 DONE 状态而转换的状态数。

考虑到我遇到的所有问题,这似乎是一项复杂的任务,但也许你们中的一些人以前处理过这个问题并且可能会提出一些想法。它需要正确解析信息,然后在从Status列申请给定状态时使用ARRAYFORMULA函数提取特定列的信息。

这是一个包含输入信息的 google 电子表格示例。我想为 Times In QAC 列)和 Duration in QAD 列)的以下列填充信息,信息在几秒钟内提供,我需要几天但这是一项次要任务)对于 In QA 状态,则同样适用于其余其他状态。我添加了用于将 Status ID 映射到我的 Status 的选项卡 Settings,我需要使用查找函数来匹配 Jira Issues 选项卡中的 Status 列.我想要一个解决方案,不添加辅助列,可能需要一些脚本。

https://docs.google.com/spreadsheets/d/1ys6oiel1aJkQR9nfxWJsmEyd7XiNkVB-omcNL0ohckY/edit?usp=sharing

尝试:

=INDEX(IFERROR(1/(1/QUERY(1*IFNA(REGEXEXTRACT(C2:C, "10087.{5}(\d+).{5}(\d+)")), 
 "select Col1,Col2/86400 label Col2/86400''"))))


...所以在我们执行 REGEXEXTRACT 之后,一些行(无法从中提取)将输出为 #N/A 错误,因此我们将其包装到 IFNA 中以删除这些错误。然后我们将它乘以 *1 以将所有内容转换为数字(正则表达式有效且输出始终仅纯文本格式)。然后我们使用 QUERY 一次性将第 2 列转换为正确的秒数。此时每一行都有一些值,所以为了去掉我们不需要的行的零(比如第 2、3、5、8、9 等行)并保持输出数字,我们使用 IFERROR(1/(1/ 换行.最后,我们使用 INDEXARRAYFORMULA 来处理我们的数组。