Вы можете сделать это с помощью серии преобразований; например:
"transform": [
{"calculate": "toDate(datum.DATE)", "as": "date"},
{"calculate": "datum.COUNT < 100", "as": "pre100"},
{
"joinaggregate": [{"op": "sum", "field": "pre100", "as": "offset"}],
"groupby": ["COUNTRY"]
},
{
"window": [{"op": "count", "as": "daysPassed"}],
"groupby": ["COUNTRY"],
"sort": [{"field": "date"}]
},
{"calculate": "max(0, datum.daysPassed - datum.offset)", "as": "daysPassed"}
],
Вот более полный пример, демонстрирующий это для небольшого набора данных ( vega editor ):
{
"data": {
"values": [
{"DATE": "2020-02-02", "COUNTRY": "Spain", "COUNT": 50},
{"DATE": "2020-02-03", "COUNTRY": "Spain", "COUNT": 70},
{"DATE": "2020-02-04", "COUNTRY": "Spain", "COUNT": 110},
{"DATE": "2020-02-05", "COUNTRY": "Spain", "COUNT": 150},
{"DATE": "2020-02-06", "COUNTRY": "Spain", "COUNT": 200},
{"DATE": "2020-02-02", "COUNTRY": "Italy", "COUNT": 90},
{"DATE": "2020-02-03", "COUNTRY": "Italy", "COUNT": 100},
{"DATE": "2020-02-04", "COUNTRY": "Italy", "COUNT": 140},
{"DATE": "2020-02-05", "COUNTRY": "Italy", "COUNT": 190},
{"DATE": "2020-02-06", "COUNTRY": "Italy", "COUNT": 250}
]
},
"transform": [
{"calculate": "toDate(datum.DATE)", "as": "date"},
{"calculate": "datum.COUNT < 100", "as": "pre100"},
{
"joinaggregate": [{"op": "sum", "field": "pre100", "as": "offset"}],
"groupby": ["COUNTRY"]
},
{
"window": [{"op": "count", "as": "daysPassed"}],
"groupby": ["COUNTRY"],
"sort": [{"field": "date"}]
},
{"calculate": "max(0, datum.daysPassed - datum.offset)", "as": "daysPassed"}
],
"concat": [
{
"mark": "line",
"encoding": {
"x": {"field": "DATE", "type": "temporal"},
"y": {"field": "COUNT", "type": "quantitative"},
"color": {"field": "COUNTRY", "type": "nominal"}
}
},
{
"mark": "line",
"transform": [{"filter": "datum.daysPassed > 0"}],
"encoding": {
"x": {"field": "daysPassed", "type": "quantitative"},
"y": {"field": "COUNT", "type": "quantitative"},
"color": {"field": "COUNTRY", "type": "nominal"}
}
}
]
}