我目前正在从cosmosDB获取大量数据,我希望将其减少到最近8周。
如何根据我的日期列,在PowerQuery中进行过滤以获取最近8周。
这是我获取数据的超级查询:
let
Source = DocumentDB.Contents("https://xxx.xxx", "xxx", "xxx"),
#"Expanded Document" = Table.ExpandRecordColumn(Source, "Document", {"$v"}, {"Document.$v"}),
#"Expanded Document.$v" = Table.ExpandRecordColumn(#"Expanded Document", "Document.$v", {"date"}, {"Document.$v.date"}),
#"Expanded Document.$v.date" = Table.ExpandRecordColumn(#"Expanded Document.$v", "Document.$v.date", {"$v"}, {"Document.$v.date.$v"}),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Document.$v.date",{{"Document.$v.date.$v", type text}})
in
#"Changed Type"
这就是我的CosmosDB中的数据的方式:
{
"_id" : ObjectId("5c6144bdf7ce070001acc213"),
"date" : {
"$date" : 1549792055030
},
答案 0 :(得分:1)
如果您想自己完成所有工作(也许服务器可以完成部分/全部工作):
1549792055030
(以示例形式显示)是以毫秒为单位的Unix时间戳,要在Power Query中转换为datetime
,请尝试类似以下操作:#datetime(1970, 1, 1, 0, 0, 0) + #duration(0, 0, 0, 1549792055030/1000)
$v
的记录字段(它本身嵌套在名为date
的字段中,它本身嵌套在名为$v
的字段中) }}代码,但M
未显示为存在于结构中。我之所以这样说是因为知道是否遵循您的$v
代码或结构会造成混淆。我假设您有一个M
字段,其中包含一个$v
字段,该字段本身包含一个date
字段。要获取嵌套的Unix时间戳,您可以尝试类似以下操作:$date
someRecord[#"$v"][date][#"$date"]
。 (您也可以用另一种方法,将Date.IsInPreviousNWeeks(DateTime.AddZone(someDatetime, 0), 8)
转换为Unix时间戳,然后过滤时间戳8 weeks ago before now
为您计算出的值。)将以上内容放在一起,我们可能会得到一些>=
代码,如下所示:
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
不熟悉,但是此链接(https://www.powerquery.io/accessing-data/document-db/documentdb.contents)建议它具有以下参数:
功能( URL 为文本,可选的数据库为可为空的任意值,可选 集合作为可为空的任何,可选的选项作为可为空的记录)为 桌子
接着说:
如果在选项中指定了字段Query,则记录结果 在指定数据库和/或上执行查询 集合将被返回。
我的意思是,如果您将第一行更改为以下内容:
DocumentDB.Contents
,并且服务器可以理解您在Source = DocumentDB.Contents("https://xxx.xxx", "xxx", "xxx", [Query = "..."])
中指定的查询(假设查询需要使用Cosmos DB的本机查询语言),只有最后8周的数据会返回给您(意味着数据需要发送,为您减少了工作量)。就像我说的那样,我不熟悉Azure Cosmos DB,因此我无法进一步发表评论。但这似乎是更好的方法。