Я наконец-то получил результат, который был мне нужен (и понял, что он не такой красивый, как я себе представлял). Я решил повернуть столбцы, вычислить количество «пройденных» для каждого набора тестов, а затем снова сложить для упрощения построения графика:
Vega-редактор
{
"data": {"name": "results"},
"transform": [
{"pivot": "type", "groupby": ["name"], "value": "count"},
{
"calculate": "datum.tests - (datum.failures + datum.skipped + datum.errors)",
"as": "passed"
},
{
"fold": ["passed", "failures", "skipped", "errors"],
"as": ["type", "count"]
}
],
"mark": "bar",
"encoding": {
"x": {"aggregate": "sum", "type": "quantitative", "field": "count"},
"y": {"type": "nominal", "field": "name"},
"color": {
"type": "nominal",
"field": "type",
"sort": ["passed", "failures", "skipped", "errors"],
"scale": {"range": ["green", "red", "grey", "yellow"]}
},
"order": {"range": ["passed", "failures", "skipped", "errors"]}
},
"datasets": {
"results": [
{"count": 10, "name": "test_suite_0", "type": "tests"},
{"count": 10, "name": "test_suite_1", "type": "tests"},
{"count": 10, "name": "test_suite_2", "type": "tests"},
{"count": 10, "name": "test_suite_3", "type": "tests"},
{"count": 10, "name": "test_suite_4", "type": "tests"},
{"count": 10, "name": "general-test-suite", "type": "tests"},
{"count": 2, "name": "test_suite_0", "type": "skipped"},
{"count": 2, "name": "test_suite_1", "type": "skipped"},
{"count": 3, "name": "test_suite_2", "type": "skipped"},
{"count": 4, "name": "test_suite_3", "type": "skipped"},
{"count": 3, "name": "test_suite_4", "type": "skipped"},
{"count": 1, "name": "general-test-suite", "type": "skipped"},
{"count": 3, "name": "test_suite_0", "type": "failures"},
{"count": 2, "name": "test_suite_1", "type": "failures"},
{"count": 0, "name": "test_suite_2", "type": "failures"},
{"count": 2, "name": "test_suite_3", "type": "failures"},
{"count": 3, "name": "test_suite_4", "type": "failures"},
{"count": 3, "name": "general-test-suite", "type": "failures"},
{"count": 4, "name": "test_suite_0", "type": "errors"},
{"count": 4, "name": "test_suite_1", "type": "errors"},
{"count": 4, "name": "test_suite_2", "type": "errors"},
{"count": 1, "name": "test_suite_3", "type": "errors"},
{"count": 4, "name": "test_suite_4", "type": "errors"},
{"count": 2, "name": "general-test-suite", "type": "errors"}
]
}
}