Я хочу объединить набор данных 'queryresult' со столбцом 'смещение' с набором данных 'главы', который имеет два столбца 'startoffset' и 'endoffset', где смещение находится между startoffset и endoffset: chapters.startoffset <= queryresult. offset <= chapters.endoffset </p>
Я хотел бы использовать преобразование поиска, но оно выполняет только сравнения на равенство. Если бы у меня была пользовательская функция сравнения, мой код мог бы выглядеть так:
"transform": [
{
"type": "lookup",
"from": "chapters",
"key": ["startOffset", "endOffset"],
"values": ["startOffset", "endOffset"],
"fields": ["offset"],
"as": ["chapterStart", "chapterEnd"],
"comp": "inRange"
}
]
Но поле «ключ» допускает только одно поле, и нет поля «comp» для указания других методов сравнения или выражения сравнения.
Я также пытался использовать преобразование формул с выражением «data», но мне нужно было бы использовать более сложные функции массива в качестве выражения для фильтрации объектов в массиве данных.
Минимальный пример для началаfrom is
{
"$schema": "https://vega.github.io/schema/vega/v5.json",
"autosize": {"type": "pad", "resize": true},
"data": [
{
"name": "chapters",
"values": [
{
"startOffset": 0,
"endOffset": 7809,
"value": "1"
},
{
"startOffset": 7813,
"endOffset": 13484,
"value": "2"
},
{
"startOffset": 13488,
"endOffset": 19862,
"value": "3"
}
]
},
{
"name": "queryresult",
"values": [
{"offset": 17749},
{"offset": 7421},
{"offset": 17949},
{"offset": 8578},
{"offset": 18307},
{"offset": 7813}
],
"transform": [
{
"type": "lookup",
"from": "chapters",
"key": "startOffset",
"values": ["startOffset", "endOffset"],
"fields": ["offset"],
"as": ["chapterStart", "chapterEnd"]
}
]
}
]
}
Цель состоит в том, чтобы добавить поля chapterStart и chapterEnd к каждой записи в queryresult с соответствующей записью из набора данных главы, где смещение от queryresult находится между startOffset и endOffset. Приведенный выше код, очевидно, не может этого сделать, потому что сравнение проводится только между startOffset и offset, и необходимо равенство.
Есть ли другой способ добиться этого в Vega?