excel powerquery replacevalues based on cell

我正在使用excel powerquery从网站提取数据,该网站是http://www.timeanddate.com/holidays/south-africa/2014

Web表格以mmm dd格式显示date。

  • Jan 01
  • 3月20日
  • 3月21日…等

要获得不同年份的结果,我可以调用一个提示来请求年度input,并replaceURL中的相关值如下:

= let #"Table 0" = (myParm)=> let Source = Web.Page(Web.Contents("http://www.timeanddate.com/holidays/south-africa/" & Number.ToText(myParm))), 

然而,如果没有networking结果表中指定的年份,当导入到excel中时,可以理解地使用自己的值(Excel本地只使用当前的2015年,powerquery完全不同地解释信息)。

  • 2001年1月1日
  • 2020年3月1日
  • 2021年3月1日

提出问题:

  1. 我希望能够使用单元格在查询中指定年份,用单元格值replacemyParm,并在更改时进行刷新(可以使用excel本地执行此操作,需要了解如何使用powerquery执行此操作)
  2. 我希望能够用上述单元格中的任何内容replace年份列数据的年份值

对于#1,假设您有一个名为YearTable的Excel表,其中一个名为Year的列和一个具有所需年份值的单个详细信息行(例如2015),则可以使用以下Mexpression式:

Excel.CurrentWorkbook(){[Name="YearTable"]}[Content]{0}[Year]

这潜入该表中,并从第一个详细信息行中获取值。

例如,您可以在开始的步骤中embedded,例如

Web.Page(Web.Contents("http://www.timeanddate.com/holidays/south-africa/" & Number.ToText(Excel.CurrentWorkbook(){[Name="YearTable"]}[Content]{0}[Year])))

对于#2,我会添加使用该expression式来添加一个像这样的公式:

[Date] & " " & Number.ToText(Excel.CurrentWorkbook(){[Name="YearTable"]}[Content]{0}[Year])

然后,您可以使用“分析”button(“date”下的“转换function区”)将其转换为date数据types(如果需要)。

请注意,我从该页面获得的生成的更改types步骤将date转换为具有隐含年份的date(您注意到的问题)。 只需编辑该步骤的公式,即可将“date”列设置为“文本”以避免这种情况。

这是我的整个testingM脚本:

 let Source = Web.Page(Web.Contents("http://www.timeanddate.com/holidays/south-africa/" & Number.ToText(Excel.CurrentWorkbook(){[Name="YearTable"]}[Content]{0}[Year]))), Data0 = Source{0}[Data], #"Changed Type" = Table.TransformColumnTypes(Data0,{{"Header", type text}, {"Date", type text}, {"Weekday", type text}, {"Holiday name", type text}, {"Holiday type", type text}}), #"Added Derived Date" = Table.AddColumn(#"Changed Type", "Derived Date", each [Date] & " " & Number.ToText(Excel.CurrentWorkbook(){[Name="YearTable"]}[Content]{0}[Year])), #"Parsed Date" = Table.TransformColumns(#"Added Derived Date",{{"Derived Date", each Date.From(DateTimeZone.From(_)), type date}}) in #"Parsed Date" 

Colin Banfield的另一个解决scheme;

1)在Excel中,创build一个以“Year”作为列名的表格,并input年份作为行值。 然后从表中创build一个查询。 您的查询应该有一个列和一个行值。 命名适当的查询并保存。

2)从网站获取数据。 假设我们命名查询HolidayTable。 将查询转换为函数查询,例如

 (Year as number)=> let Source = Web.Page(Web.Contents("www.timeanddate.com/holidays/south-africa/"&Number.ToText(Year))), Data0 = Source{0}[Data], #"Changed Type" = Table.TransformColumnTypes(Data0,{{"Header", type text}, {"Date", type date}, {"Weekday", type text}, {"Holiday name", type text}, {"Holiday type", type text}}), #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"Header"}) in #"Removed Columns" 

3)在步骤(1)查询中添加此函数作为新列,并添加一个新的date自定义列。 经过其他一些转换(列重新sorting,删除列)后,您应该看到如下所示的查询:

 let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"Year", Int64.Type}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each HolidayTable([Year])), #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"Date", "Weekday", "Holiday name", "Holiday type"}, {"Date", "Weekday", "Holiday name", "Holiday type"}), #"Added Custom1" = Table.AddColumn(#"Expanded Custom", "Calendar Date", each #date([Year],Date.Month([Date]),Date.Day([Date]))), #"Reordered Columns" = Table.ReorderColumns(#"Added Custom1",{"Year", "Date", "Calendar Date", "Weekday", "Holiday name", "Holiday type"}), #"Removed Columns" = Table.RemoveColumns(#"Reordered Columns",{"Year","Date"}) in #"Removed Columns" 

笔记:

a)前两行来自步骤(1)中的原始表格查询。

b)#“添加自定义”步骤添加一个新的自定义列,将年份列中的值传递给HolidayTable函数

c)#“添加的自定义1”步骤添加一个新的自定义列,从“年份”列中的值和“原始date”列中的月份和date值中创build一个新date。