У меня есть этот запрос, который почти работает:
datatable (timestamp:datetime, value:dynamic)
[
datetime("2021-04-19"), "a",
datetime("2021-04-19"), "b",
datetime("2021-04-20"), 1,
datetime("2021-04-20"), 2,
datetime("2021-04-21"), "b",
datetime("2021-04-22"), 2,
datetime("2021-04-22"), 3,
]
| project timestamp, stringvalue=iif(gettype(value)=="string", tostring(value), ""), numericvalue=iif(gettype(value)=="long", toint(value), int(null))
| summarize any(stringvalue), avg(numericvalue) by bin(timestamp, 1d)
| project timestamp, value=iif(isnan(avg_numericvalue), any_stringvalue, avg_numericvalue)
Это разбивает значения в поле значения на строковое значение, если значение является строковым, а числовое значение - длинным. Затем он суммирует значения на основе дневного уровня, для строковых значений просто принимает любое значение, а для числовых значений вычисляет среднее.
После этого я хочу вернуть значения в поле value.
Я думал, что последняя строка может быть такой, как показано ниже, но динамической функции нужны только литералы
| project timestamp, value=iif(isnan(avg_numericvalue), dynamic(any_stringvalue), dynamic(avg_numericvalue))
Если я сделаю это так, это действительно сработает:
| project timestamp, value=iif(isnan(avg_numericvalue), parse_json(any_stringvalue), parse_json(tostring(avg_numericvalue)))
Но есть ли лучший способ, чем преобразовать его в json и обратно?