在 klipfolio 中对来自 json 的多个日期进行分组
Grouping multiple dates from json in klipfolio
我有一个 JSON 格式的输入,格式如下:
[
{
"hash":"abcdefg",
"Stage 1 Status":"Complete",
"Stage 1 Completion":"2021-01-16T19:56:10+02:00",
"Stage 2 Status":"Complete",
"Stage 2 Completion":"2021-02-17T16:30:30+03:00",
"Stage 3 Status":"Complete",
"Stage 3 Completion":"2021-03-17T16:30:34+03:00"
},
{
"hash":"klmnop",
"Stage 1 Status":"Complete",
"Stage 1 Completion":"2021-01-16T19:56:10+02:00",
"Stage 2 Status":"Open",
"Stage 2 Completion":"2021-02-17T16:30:34+03:00"
},
{
"hash":"jklmn",
"Stage 1 Status":"Complete",
"Stage 1 Completion":"2021-01-16T19:56:10+02:00",
"Stage 2 Status":"Lost",
"Stage 2 Completion":"2021-07-17T16:30:30+03:00"
}
]
我想在 klifolio 中制作一个 klip,向我显示每个月的已完成阶段,如下面从上述数据导出的输出。
January
February
March
Stage1
3
0
0
Stage2
0
1
0
Stage3
0
0
1
数据是三年的,我需要在单独的 table 中显示年份计数。
klipfolio 的新手,所以到目前为止我已经为 table 列标题和行标签构建了数组,但我在查询时遇到困难。
要在 Klipfolio 中完成此操作,您需要首先将 JSON 数据组织成柱状结构,以便您可以对其执行查询。为此,您需要一组状态、完成和阶段名称的数据。
默认kf:namesreturns数据按字母顺序排列,FALSE参数return数据按JSON结构从上到下排列.
LEFT() 将 return 最左边的 7 个字符,这只会 return “Stage 1” 而不是“Stage 1 Status”
到 return 日期,需要通配符选择器以及 contains() 函数 return 名称为 contains 的字段的任何值完成。
@/*[contains(name(),'Completion')]
最后,要 return 状态,您需要执行与上述相同的操作,但搜索包含“status”的字段名称。
@/*[contains(name(),'Status')]
从这里您应该可以查询 3 个数据数组。 return 包含 JSON 结构中所有字段名称的第一个查询首先需要过滤为 return 与日期和状态数组相同数量的项目。您可以仅将 SELECT() 用于具有 'Completion' 或 'Status' 的 return 字段,因为我们知道这些字段与值之间存在一对一的关系。
SELECT(LEFT(@kf:names(/,FALSE),7),CONTAINS(@kf:names(/,FALSE),"Status"))
这将 return 7 个项目匹配日期和状态的 7 个项目。
现在数据的形状是正确的,LOOKUP() can be used in each column to align the count of completed records per stage, by using the SELECT(), AND(), GROUP() and COUNTDISTINCT() 起作用了。
首先,在 LOOKUP() 的第一个参数中,results reference 具有阶段名称的列。然后使用 SELECT() 仅过滤特定月份的已完成阶段。对于日期,您需要使用 DATE() 转换为 unix 时间,然后使用 DATEVALUE() 转换为汇总到一个月的格式,如“yyyyMM”格式,如果日期是今年一月。
SELECT() 看起来像这样:
SELECT(SELECT(LEFT(@kf:names(/,FALSE),7),CONTAINS(@kf:names(/,FALSE),"Status")),AND(DATEVALUE(DATE(@/*[contains(name(),'Completion')],"yyyy-MM-dd"),"yyyyMM")="202101",@/*[contains(name(),'Status')]="Complete"))
在第二个参数中将 GROUP() 包裹在 SELECT() 中以对类似值进行分组,在 LOOKUP() 的第三个参数中将 SELECT() 包裹在 COUNTDISTINCT( ) 来计算每组的项目。 2021 年 1 月列的整个公式如下所示:
LOOKUP(&Stages,GROUP(SELECT( SELECT(LEFT(@kf:names(/,FALSE),7),CONTAINS(@kf:names(/,FALSE),"Status")), AND(DATEVALUE(DATE(@/*[contains(name(),'Completion')],"yyyy-MM-dd"),"yyyyMM")="202101", @/*[contains(name(),'Status')]="Complete"))), COUNTDISTINCT(SELECT( SELECT(LEFT(@kf:names(/,FALSE),7),CONTAINS(@kf:names(/,FALSE),"Status")), AND(DATEVALUE(DATE(@/*[contains(name(),'Completion')],"yyyy-MM-dd"),"yyyyMM")="202101", @/*[contains(name(),'Status')]="Complete"))))
从那里,您可以将公式中的 202101 更改为任何 yyyyMM 到 return 特定月份的数据,IE。对于下一列,2 月,它将是 202102。
我有一个 JSON 格式的输入,格式如下:
[
{
"hash":"abcdefg",
"Stage 1 Status":"Complete",
"Stage 1 Completion":"2021-01-16T19:56:10+02:00",
"Stage 2 Status":"Complete",
"Stage 2 Completion":"2021-02-17T16:30:30+03:00",
"Stage 3 Status":"Complete",
"Stage 3 Completion":"2021-03-17T16:30:34+03:00"
},
{
"hash":"klmnop",
"Stage 1 Status":"Complete",
"Stage 1 Completion":"2021-01-16T19:56:10+02:00",
"Stage 2 Status":"Open",
"Stage 2 Completion":"2021-02-17T16:30:34+03:00"
},
{
"hash":"jklmn",
"Stage 1 Status":"Complete",
"Stage 1 Completion":"2021-01-16T19:56:10+02:00",
"Stage 2 Status":"Lost",
"Stage 2 Completion":"2021-07-17T16:30:30+03:00"
}
]
我想在 klifolio 中制作一个 klip,向我显示每个月的已完成阶段,如下面从上述数据导出的输出。
January | February | March | |
---|---|---|---|
Stage1 | 3 | 0 | 0 |
Stage2 | 0 | 1 | 0 |
Stage3 | 0 | 0 | 1 |
数据是三年的,我需要在单独的 table 中显示年份计数。 klipfolio 的新手,所以到目前为止我已经为 table 列标题和行标签构建了数组,但我在查询时遇到困难。
要在 Klipfolio 中完成此操作,您需要首先将 JSON 数据组织成柱状结构,以便您可以对其执行查询。为此,您需要一组状态、完成和阶段名称的数据。
默认kf:namesreturns数据按字母顺序排列,FALSE参数return数据按JSON结构从上到下排列.
LEFT() 将 return 最左边的 7 个字符,这只会 return “Stage 1” 而不是“Stage 1 Status”
到 return 日期,需要通配符选择器以及 contains() 函数 return 名称为 contains 的字段的任何值完成。
@/*[contains(name(),'Completion')]
最后,要 return 状态,您需要执行与上述相同的操作,但搜索包含“status”的字段名称。
@/*[contains(name(),'Status')]
从这里您应该可以查询 3 个数据数组。 return 包含 JSON 结构中所有字段名称的第一个查询首先需要过滤为 return 与日期和状态数组相同数量的项目。您可以仅将 SELECT() 用于具有 'Completion' 或 'Status' 的 return 字段,因为我们知道这些字段与值之间存在一对一的关系。
SELECT(LEFT(@kf:names(/,FALSE),7),CONTAINS(@kf:names(/,FALSE),"Status"))
这将 return 7 个项目匹配日期和状态的 7 个项目。
现在数据的形状是正确的,LOOKUP() can be used in each column to align the count of completed records per stage, by using the SELECT(), AND(), GROUP() and COUNTDISTINCT() 起作用了。
首先,在 LOOKUP() 的第一个参数中,results reference 具有阶段名称的列。然后使用 SELECT() 仅过滤特定月份的已完成阶段。对于日期,您需要使用 DATE() 转换为 unix 时间,然后使用 DATEVALUE() 转换为汇总到一个月的格式,如“yyyyMM”格式,如果日期是今年一月。
SELECT() 看起来像这样:
SELECT(SELECT(LEFT(@kf:names(/,FALSE),7),CONTAINS(@kf:names(/,FALSE),"Status")),AND(DATEVALUE(DATE(@/*[contains(name(),'Completion')],"yyyy-MM-dd"),"yyyyMM")="202101",@/*[contains(name(),'Status')]="Complete"))
在第二个参数中将 GROUP() 包裹在 SELECT() 中以对类似值进行分组,在 LOOKUP() 的第三个参数中将 SELECT() 包裹在 COUNTDISTINCT( ) 来计算每组的项目。 2021 年 1 月列的整个公式如下所示:
LOOKUP(&Stages,GROUP(SELECT( SELECT(LEFT(@kf:names(/,FALSE),7),CONTAINS(@kf:names(/,FALSE),"Status")), AND(DATEVALUE(DATE(@/*[contains(name(),'Completion')],"yyyy-MM-dd"),"yyyyMM")="202101", @/*[contains(name(),'Status')]="Complete"))), COUNTDISTINCT(SELECT( SELECT(LEFT(@kf:names(/,FALSE),7),CONTAINS(@kf:names(/,FALSE),"Status")), AND(DATEVALUE(DATE(@/*[contains(name(),'Completion')],"yyyy-MM-dd"),"yyyyMM")="202101", @/*[contains(name(),'Status')]="Complete"))))
从那里,您可以将公式中的 202101 更改为任何 yyyyMM 到 return 特定月份的数据,IE。对于下一列,2 月,它将是 202102。