Если вы хотите выполнить всю работу на своем конце (возможно, сервер может сделать часть / все):
- Предполагая, что
1549792055030
(показанный в примере) является временной меткой Unix, выраженной в миллисекундах, чтобы преобразовать ее в datetime
в Power Query, попробуйте что-то вроде: #datetime(1970, 1, 1, 0, 0, 0) + #duration(0, 0, 0, 1549792055030/1000)
- Вы, кажется, расширяете поле записи с именем
$v
(которое само было вложено в поле с именем date
, которое само было вложено в поле с именем $v
) в вашем коде M
, но $v
не отображается как присутствующий в структуре. Я упоминаю об этом, потому что сложно понять, следует ли следовать вашему M
коду или структуре. Я предполагаю, что у вас есть поле $v
, которое содержит поле date
, которое само содержит поле $date
. Чтобы получить вложенную временную метку Unix, вы можете попробовать что-то вроде: someRecord[#"$v"][date][#"$date"]
- Поскольку вас интересуют только последние 8 недель, вы можете проверить что-то вроде:
Date.IsInPreviousNWeeks(DateTime.AddZone(someDatetime, 0), 8)
. (Вы также можете сделать это другим способом, преобразовав 8 weeks ago before now
в метку времени Unix, а затем отфильтровав метки времени >=
в значение, которое вы отработали.)
Собрав все вместе, мы можем получить код M
, который выглядит следующим образом:
let
Source = DocumentDB.Contents("https://xxx.xxx", "xxx", "xxx"),
filterDates = Table.SelectRows(Source, each
let
millisecondsSinceEpoch = Number.From([document][#"$v"][date][#"$date"]),
toDatetime = #datetime(1970, 1, 1, 0, 0, 0) + #duration(0, 0, 0, millisecondsSinceEpoch/1000),
toFilter = Date.IsInPreviousNWeeks(DateTime.AddZone(toDatetime, 0), 8)
in toFilter
)
in filterDates
Приведенный выше код может быть функциональным (надеюсь), но концептуально это может быть неправильный способ сделать это. Я не знаком с функцией DocumentDB.Contents
, но эта ссылка (https://www.powerquery.io/accessing-data/document-db/documentdb.contents) предполагает, что она имеет следующие параметры:
функция ( url как текст, необязательно база данных как обнуляемый любой, необязательно
collection как nullable any, необязательные опции как nullable record) как
таблица
и он продолжает:
если поле Query указано в опциях записи результатов
запрос выполняется в указанной базе данных и / или
коллекция будет возвращена.
Я понимаю, что это означает, что если вы измените свою первую строку на что-то вроде:
Source = DocumentDB.Contents("https://xxx.xxx", "xxx", "xxx", [Query = "..."])
и запрос, указанный в "..."
, понятен серверу (предположим, что запрос должен быть на родном языке запросов Cosmos DB), вам будут возвращены данные только за последние 8 недель (что означает меньшие потребности в данных) отправка и меньше работы для вас). Как я уже сказал, я не знаком с Azure Cosmos DB, поэтому не могу комментировать дальше. Но это, кажется, лучший способ сделать это.