У меня есть таблица Application Sights с примерно миллионом строк, и мне нужны равные разделенные данные 4 набора данных/запросов, а затем объединить их все в отчете. У меня есть insertDate, который можно использовать для разделения на разные наборы данных без перекрытия данных между запросами. использование insertDate>=ago(180d) и insertDate < ago(180d) даст мне только 2 раздела этих данных, как я могу разделить эти данные поровну, скажем, 5 наборов данных, означающих 5 запросов, каждый из которых возвращает данные за 2 месяца?
Примечание. Я не знаю базовых дат, поэтому не могу жестко кодировать даты, например, оператор между датами. Это пример данных. В некоторые месяцы данных больше, чем в другие месяцы, но необходимо разделить данные поровну, чтобы избежать ограничения максимального количества строк API остальных приложений в 500 000 строк.
Контекст. Коннектор API REST Application Insights для powerBI не поддерживает более 500 тыс. строк, поэтому выше приведен один обходной путь, о котором я думаю.
let T = datatable(release:string, insertDate:datetime )
[
"2205", datetime(2022-01-05),
"2205", datetime(2022-01-10),
"2205", datetime(2022-02-10),
"2204", datetime(2022-03-25),
"2203", datetime(2022-04-15),
"2205", datetime(2022-04-12),
"2205", datetime(2022-05-12),
"2206", datetime(2022-06-23),
"2207", datetime(2022-07-27),
"2209", datetime(2022-08-12),
"2201", datetime(2022-09-26),
"2201", datetime(2022-10-08),
];
T
|take 100;
Сколько записей?
@DavidדודוMarkovitz, остальные API-интерфейсы App Insights, подключенные к PBI, не могут поддерживать более 500 000 строк, поэтому мы пытаемся разделить набор данных на несколько наборов данных, чтобы объединить их позже в отчете. количество строк превышает 700 тыс. и может увеличиться до 1,2 млн строк.
Еще одна проблема XY
Извиняюсь, Дэвид, обновил вопрос, указав контекст подхода, который я пытаюсь
let T = datatable(release:string, insertDate:datetime )
[
"2205", datetime(2022-01-05),
"2205", datetime(2022-01-10),
"2205", datetime(2022-02-10),
"2204", datetime(2022-03-25),
"2203", datetime(2022-04-15),
"2205", datetime(2022-04-12),
"2205", datetime(2022-05-12),
"2206", datetime(2022-06-23),
"2207", datetime(2022-07-27),
"2209", datetime(2022-08-12),
"2201", datetime(2022-09-26),
"2201", datetime(2022-10-08),
];
let groups = 5;
let total_rows = toscalar(T | count);
let group_rows = 1.0 * total_rows / groups;
let edge_rows = toscalar
(
range x from group_rows to total_rows - group_rows step group_rows
| extend x = round(x)
| summarize make_list(x)
);
union (print insertDate = datetime(0001))
,(T
| order by insertDate asc
| where row_number() in (edge_rows)
| project insertDate
)
| order by insertDate asc
| project fromDate = insertDate
,toDate = next(insertDate, 1, datetime(3000))
Спасибо, Дэвид. Не могли бы вы помочь мне понять, как это поможет динамически выбирать данные, как я уже упоминал, я не знаю основных дат, которые нужно указать в условии where, например qeury1 = T | где вставить дату между <00001-01-01> <2022-01-10> ? пожалуйста, исправьте, если я что-то упустил здесь. . В основном я должен иметь возможность выбрать что-то вроде: query1 | где <условие получения первой части строк> = <> ; Запрос 2 | где условие получения второго патрона строк; так далее
Как вы можете видеть в коде, как только вы определили количество групп, все остальное полностью динамическое. Вы получаете x диапазонов дат, и для каждого из них вы должны создать запрос, например T | where insertDate >= fromDate and insertDate < toDate
.
Какова ваша мотивация для этого?