[英]How to combine multiple web requests into one query/table?
我想创建多年的加拿大假期日历。 为此,我正在使用canada-holidays.ca/api 。 问题是,如果我想要多年,我需要为每年创建一个请求,然后 append 它们,但这样做会创建很多我不想要或不需要的请求。
这就是为什么我试图在 Power Query 的单个查询中同时集成多个源。
我发现这篇文章是我想做的事情的灵感来源,但它基于 Excel,因此需要稍微调整一下。
这就是为什么,我写了这段代码:
let
//2021 Holidays
Source1 = Json.Document(Web.Contents("https://canada-holidays.ca/api/v1/holidays?year=2021")),
#"Converti en table1" = Table.FromRecords({Source1}),
#"ExpandList1" = Table.ExpandListColumn(#"Converti en table1", "holidays"),
#"ExpandRecord1" = Table.ExpandRecordColumn(#"ExpandList1", "holidays", {
"id",
"date",
"nameEn",
"nameFr",
"federal",
"observedDate"}, {
"id",
"date",
"nameEn",
"nameFr",
"federal",
"observedDate"}),
#"Type modifié1" = Table.TransformColumnTypes(#"ExpandRecord1",{
{"id", Int64.Type},
{"date", type date},
{"nameEn", type text},
{"nameFr", type text},
{"federal", Int64.Type},
{"observedDate", type date}}),
#"Lignes filtrées1" = Table.SelectRows(#"Type modifié1", each (
[nameEn] = "Boxing Day" or
[nameEn] = "Canada Day" or
[nameEn] = "Christmas Day" or
[nameEn] = "Day of Mourning for Queen Elizabeth II" or
[nameEn] = "Easter Monday" or
[nameEn] = "Good Friday" or
[nameEn] = "Labour Day" or
[nameEn] = "National Day for Truth and Reconciliation" or
[nameEn] = "New Year’s Day" or
[nameEn] = "Remembrance Day" or
[nameEn] = "Saint-Jean-Baptiste Day" or
[nameEn] = "Thanksgiving" or
[nameEn] = "Victoria Day")),
//2022 Holidays
Source2 = Json.Document(Web.Contents("https://canada-holidays.ca/api/v1/holidays?year=2022")),
#"Converti en table2" = Table.FromRecords({Source2}),
#"ExpandList2" = Table.ExpandListColumn(#"Converti en table2", "holidays"),
#"ExpandRecord2" = Table.ExpandRecordColumn(#"ExpandList2", "holidays", {
"id",
"date",
"nameEn",
"nameFr",
"federal",
"observedDate"}, {
"id",
"date",
"nameEn",
"nameFr",
"federal",
"observedDate"}),
#"Type modifié2" = Table.TransformColumnTypes(#"ExpandRecord2",{
{"id", Int64.Type},
{"date", type date},
{"nameEn", type text},
{"nameFr", type text},
{"federal", Int64.Type},
{"observedDate", type date}}),
#"Lignes filtrées2" = Table.SelectRows(#"Type modifié2", each (
[nameEn] = "Boxing Day" or
[nameEn] = "Canada Day" or
[nameEn] = "Christmas Day" or
[nameEn] = "Day of Mourning for Queen Elizabeth II" or
[nameEn] = "Easter Monday" or
[nameEn] = "Good Friday" or
[nameEn] = "Labour Day" or
[nameEn] = "National Day for Truth and Reconciliation" or
[nameEn] = "New Year’s Day" or
[nameEn] = "Remembrance Day" or
[nameEn] = "Saint-Jean-Baptiste Day" or
[nameEn] = "Thanksgiving" or
[nameEn] = "Victoria Day")),
#"TableAppend" = Table.Combine({#"Lignes filtrées1"}, {#"Lignes filtrées2"})
in
#"TableAppend"
可悲的是,当我尝试运行它时出现此错误:“Expression.Error:columns 参数必须为 null,请指定列数,指定列名列表或指定表类型。详细信息:[List]”
那么,有没有人知道我可以做些什么来将多个源和 append 集成到一个请求中?
这是一个很常见的问题:
在官方文档中阅读有关 使用自定义函数的更多信息。
这是您的GetHolidays自定义 function 的样子:
(Year as text) =>
let
Source1 = Json.Document(
Web.Contents(
"https://canada-holidays.ca/api/v1/holidays?year=" & Year
)
),
#"Converti en table1" = Table.FromRecords({Source1}),
#"ExpandList1" = Table.ExpandListColumn(#"Converti en table1", "holidays"),
#"ExpandRecord1" = Table.ExpandRecordColumn(#"ExpandList1", "holidays", {
"id",
"date",
"nameEn",
"nameFr",
"federal",
"observedDate"}, {
"id",
"date",
"nameEn",
"nameFr",
"federal",
"observedDate"}),
#"Type modifié1" = Table.TransformColumnTypes(#"ExpandRecord1",{
{"id", Int64.Type},
{"date", type date},
{"nameEn", type text},
{"nameFr", type text},
{"federal", Int64.Type},
{"observedDate", type date}}),
#"Lignes filtrées1" = Table.SelectRows(#"Type modifié1", each (
[nameEn] = "Boxing Day" or
[nameEn] = "Canada Day" or
[nameEn] = "Christmas Day" or
[nameEn] = "Day of Mourning for Queen Elizabeth II" or
[nameEn] = "Easter Monday" or
[nameEn] = "Good Friday" or
[nameEn] = "Labour Day" or
[nameEn] = "National Day for Truth and Reconciliation" or
[nameEn] = "New Year’s Day" or
[nameEn] = "Remembrance Day" or
[nameEn] = "Saint-Jean-Baptiste Day" or
[nameEn] = "Thanksgiving" or
[nameEn] = "Victoria Day"))
in
#"Lignes filtrées1"
这是 2017-2026 年所有可用年份的假期日历:
let
Source = Table.FromList({2017 .. 2026}, Splitter.SplitByNothing(), {"Year"}),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Year", type text}}),
#"Invoked Custom Function" = Table.AddColumn(
#"Changed Type", "GetHolidays", each GetHolidays([Year])),
#"Expanded GetHolidays" = Table.ExpandTableColumn(
#"Invoked Custom Function",
"GetHolidays",
{"id", "date", "nameEn", "nameFr", "federal", "observedDate"},
{"id", "date", "nameEn", "nameFr", "federal", "observedDate"}
)
in
#"Expanded GetHolidays"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.