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日
提出问题:
- 我希望能够使用单元格在查询中指定年份,用单元格值replacemyParm,并在更改时进行刷新(可以使用excel本地执行此操作,需要了解如何使用powerquery执行此操作)
- 我希望能够用上述单元格中的任何内容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。