数据分析PowerQuery

如何用powerbi自动获取最新的全国行政区划信息

2019-08-06  本文已影响72人  PowerQuery

在《如何在一分钟内获取最新最全的全国行政区划信息》中,我提到如何在一分钟内获取全国最新最全的行政区划信息。

那个帖子需要访问民政局网站,找到最新的行政区划信息链接,然后放到powerbi中,再刷新获取信息。
这对于终极懒人来说,还不够偷懒。所以又用了另外一种全自动方法来获取区划信息:

直接在powerbi中调用这个fnGetDistrict()函数,就可以获取到最新的全国行政区划信息了。

代码如下所示。使用方法是复制全部代码到powerbi的空查询中,再重命名即可,之后直接调用此函数,就获得了最新的行政区划信息。

= () => let
    current_year = Date.Year(DateTime.FixedLocalNow()),
    Source = Lines.FromText(Web.BrowserContents("http://www.mca.gov.cn/article/sj/xzqh/"&Text.From(current_year))),
    转换为表 = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    筛选的行 = Table.SelectRows(转换为表, each Text.Contains([Column1], "行政区划代码") and Text.Contains([Column1], "<table")),
    按分隔符拆分列 = Table.ExpandListColumn(Table.TransformColumns(筛选的行, {{"Column1", Splitter.SplitTextByDelimiter("<td", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Column1"),
    筛选的行1 = Table.SelectRows(按分隔符拆分列, each Text.Contains([Column1], "行政区划代码")),
    保留的第一行 = Table.FirstN(筛选的行1,1),
    自定义1 = Table.TransformColumns(保留的第一行,{"Column1",each "http://www.mca.gov.cn"&Text.BetweenDelimiters(_,"href="," target=")}),
    url = Table.RenameColumns(自定义1,{{"Column1", "url"}}),
    data = Web.Page(Web.BrowserContents(url[url]{0})),
    #"Expand Table" =data{0}[Data],
    #"Removed Top Rows" = Table.Skip(#"Expand Table",1),
    #"Promoted Headers" = Table.PromoteHeaders(#"Removed Top Rows", [PromoteAllScalars=true]),
    #"Removed Other Columns" = Table.SelectColumns(#"Promoted Headers",{"行政区划代码", "单位名称"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Other Columns",{{"行政区划代码", Int64.Type}}),
    #"Removed Errors" = Table.RemoveRowsWithErrors(#"Changed Type", {"行政区划代码"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Removed Errors",{{"行政区划代码", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type1", "省级", each if Text.End([行政区划代码],4)="0000" then [单位名称] else null),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "地级", each if Text.End([行政区划代码],2)="00" then [单位名称] else null),
    #"Filled Down" = Table.FillDown(#"Added Custom1",{"省级", "地级"}),
    #"Renamed Columns" = Table.RenameColumns(#"Filled Down",{{"单位名称", "县级"}}),
    #"Reordered Columns" = Table.ReorderColumns(#"Renamed Columns",{"行政区划代码", "县级", "地级", "省级"})
in
    #"Reordered Columns"
上一篇下一篇

猜你喜欢

热点阅读