这是可能的,但很棘手,或者至少我不知道以可扩展的方式更简单的方法。
请注意,下面的方法使用了 mapSeries / reduceSeries 函数,这些函数仅在石墨网络 master 中可用(不是 0.9.x,请参阅下面的适用于 0.9.x 的手动方法)
我们从 2 个系列列表开始,每个系列列表都包含 ccc 和 ddd:
groupByNode(a.b.*.*.hr,2,"sumSeries")
groupByNode(x.y.*.*.hr,2,"sumSeries")
现在我们需要将它们放入包含所有项目的单个 seriesList 中,所以首先我们需要让它们再次可区分:
aliasSub(groupByNode(a.b.*.*.hr,2,"sumSeries"), "$", ".a_b")
aliasSub(groupByNode(x.y.*.*.hr,2,"sumSeries"), "$", ".x_y")
现在我们有了ccc.a_b、ddd.a_b、ccc.x_y 和ddd.x_y,我们可以使用group 将它们放到一个列表中:
group(
aliasSub(groupByNode(a.b.*.*.hr,2,"sumSeries"), "$", ".a_b"),
aliasSub(groupByNode(x.y.*.*.hr,2,"sumSeries"), "$", ".x_y")
)
现在我们可以开始 map/reduce:
reduceSeries(
mapSeries(
group(
aliasSub(groupByNode(a.b.*.*.hr,2,"sumSeries"), "$", ".a_b"),
aliasSub(groupByNode(x.y.*.*.hr,2,"sumSeries"), "$", ".x_y")
),
0
),
"asPercent", 1, "a_b", "x_y"
)
此时我们将拥有ccc.reduce.asPercent 和ddd.reduce.asPercent,然后如果您只想要ccc 和ddd,您可以将整个东西包装在另一个aliasByNode(<query>, 0) 中。
这与调用本质上是一样的:
group(
alias(asPercent(
groupByNode(a.b.ccc.*.hr,2,"sumSeries"),
groupByNode(x.y.ccc.*.hr,2,"sumSeries"),
), "ccc"),
alias(asPercent(
groupByNode(a.b.ddd.*.hr,2,"sumSeries"),
groupByNode(x.y.ddd.*.hr,2,"sumSeries"),
), "ddd")
)
当然,如果您添加 eee 等,它将继续工作。