微信扫码
添加专属顾问
 
                        我要投稿
利用DeepSeek和Power BI轻松拆分复杂的中国地址数据,无需编码经验。 核心内容: 1. 传统地址拆分方法的局限性和复杂性 2. DeepSeek和Power BI的结合优势及其操作简便性 3. 通过具体案例展示如何使用DeepSeek和Power BI处理复杂地址数据
 
                                
在日常数据处理中,我们常遇到这样的场景:
北京市海淀区中关村南大街5号传统方案(如简单按字符截取)不仅代码复杂,还需人工维护大量规则。而今天,我们将借助 DeepSeek + Power BI(Power Query 部分),实现中国地址智能解析,覆盖所有行政规划特殊性!
Power Query 功能强大,但上手却并不简单,尤其是对于零基础的小白用户,很多时候:
DeepSeek 的出现解决了这些痛点:
如果让你在 PQ 中将以下地址拆分为省、市、区/县和详细地址四列,你会怎么做?
我们看看 DeepSeek 能不能帮我们来解决这个问题。
DeepSeek 给出了完整的代码和操作步骤,按照指示在 Power Query 中运行这些代码。新建一个查询,在高级编辑器中粘贴 DeepSeek 给出的代码。
运行之后发现直辖市和特别行政区部分出现了报错。
直辖市区字段为空白,详细地址错误,特别行政区区和详细地址都发生报错。
让 DeepSeek 修改一下,先修改直辖市部分,直接告诉 DeepSeek 直辖市部分报错即可。
修改之后直辖市部分正确。
最后再来让 DeepSeek 修改一下特别行政区部分的错误。
将 Power Query 中的代码修改一下,所有地址都可以正确显示了。
整个过程不需要我们去写 M 语言代码,Power Query 小白也搞定!完整代码如下,修改对应的地址源数据即可。
let
  Source = 地址, 
  // 提取省
  AddProvince = Table.AddColumn(
    Source, 
    "省", 
    each (
      let
        addr = [地址], 
        sortedProvinces = List.Sort(
          {
            "内蒙古自治区", 
            "广西壮族自治区", 
            "西藏自治区", 
            "宁夏回族自治区", 
            "新疆维吾尔自治区", 
            "北京市", 
            "天津市", 
            "上海市", 
            "重庆市", 
            "河北省", 
            "山西省", 
            "辽宁省", 
            "吉林省", 
            "黑龙江省", 
            "江苏省", 
            "浙江省", 
            "安徽省", 
            "福建省", 
            "江西省", 
            "山东省", 
            "河南省", 
            "湖北省", 
            "湖南省", 
            "广东省", 
            "海南省", 
            "四川省", 
            "贵州省", 
            "云南省", 
            "陕西省", 
            "甘肃省", 
            "青海省", 
            "台湾省", 
            "香港特别行政区", 
            "澳门特别行政区"
          }, 
          (x, y) => Value.Compare(Text.Length(y), Text.Length(x))
        ), 
        matchedProvince = List.First(List.Select(sortedProvinces, each Text.StartsWith(addr, _)))
      in
        matchedProvince
    )
  ), 
  // 判断是否直辖市
  AddIsMunicipality = Table.AddColumn(
    AddProvince, 
    "是否直辖市", 
    each List.Contains({"北京市", "天津市", "上海市", "重庆市"}, [省])
  ), 
  // 判断是否特别行政区
  AddIsSAR = Table.AddColumn(
    AddIsMunicipality, 
    "是否特别行政区", 
    each List.Contains({"香港特别行政区", "澳门特别行政区"}, [省])
  ), 
  // (兼容特别行政区)
  AddCity = Table.AddColumn(
    AddIsSAR, 
    "市", 
    each 
      if [是否直辖市] then
        [省]
      elseif [是否特别行政区] then
        null // 特别行政区无市级单位
      else
        (
          let
            remaining1 = Text.ReplaceRange([地址], 0, Text.Length([省]), ""), 
            suffixes = {"自治州", "地区", "盟", "市"}, 
            positions = List.Transform(
              suffixes, 
              each Text.PositionOf(remaining1, _, Occurrence.First)
            ), 
            adjusted = List.Transform(
              {0 .. 3}, 
              each if positions{_} >=0then positions{_} + Text.Length(suffixes{_}) else null
            ), 
            validPositions = List.RemoveNulls(adjusted), 
            firstPos =if List.IsEmpty(validPositions) then null else List.Min(validPositions), 
            city =if firstPos = null then null else Text.Start(remaining1, firstPos)
          in
            city
        )
  ), 
  // 提取区(关键修正点)
  AddDistrict = Table.AddColumn(
    AddCity, 
    "区", 
    each 
      let
        // 根据行政类型计算剩余地址
        remainingAfterProvince = Text.ReplaceRange([地址], 0, Text.Length([省]), ""), 
        remaining2 =if [是否直辖市] or [是否特别行政区] then remainingAfterProvince // 特别行政区/直辖市无需替换市级部分
         else Text.ReplaceRange(remainingAfterProvince, 0, Text.Length([市]), ""), 
        // 区级提取逻辑(需扩展特别行政区区级后缀)
        suffixes = {"自治县", "自治旗", "县", "区", "市", "旗", "半岛", "离岛"},  // 新增港澳常见后缀
        positions = List.Transform(suffixes, each Text.PositionOf(remaining2, _, Occurrence.First)), 
        adjusted = List.Transform(
          {0 .. 5}, 
          each if positions{_} >=0then positions{_} + Text.Length(suffixes{_}) else null
        ), 
        validPositions = List.RemoveNulls(adjusted), 
        firstPos =if List.IsEmpty(validPositions) then null else List.Min(validPositions), 
        district =if firstPos = null then null else Text.Start(remaining2, firstPos)
      in
        district
  ), 
  // 提取详细地址
  AddDetail = Table.AddColumn(
    AddDistrict, 
    "详细地址", 
    each 
      let
        base = Text.ReplaceRange([地址], 0, Text.Length([省]), ""), 
        remaining =
          if [是否特别行政区] then
            Text.ReplaceRange(base, 0, Text.Length([区]), "") // 特别行政区直接跳过市级
          elseif [是否直辖市] then
            Text.ReplaceRange(base, 0, Text.Length([区]), "")
          else
            Text.ReplaceRange(
              Text.ReplaceRange(base, 0, Text.Length([市]), ""), 
              0, 
              Text.Length([区]), 
              ""
            )
      in
        remaining
  )
in
  AddDetail过去,我们做数据分析的时候,总感觉数据处理任务复杂难懂,尤其是像客户地址这种包含特殊情况的字段拆分,经常会耗费大量精力,最终效果还可能差强人意:
借助 DeepSeek,原本复杂繁琐的数据拆分工作变得前所未有的简单:
赶快开启你的智能数据分析之旅吧,让 AI 帮你释放创造力,助你迅速实现从“小白”到数据高手的跃迁,轻松在数据时代占据优势!从此数据处理不再是数据专家的专利,每个人都能轻松完成数据分析,解放你的双手,把时间精力投入到更重要的业务决策之中。
2025,ABI革命,人人可用。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-10-23
让打工人头疼的 Excel,被 AI 改造后……我居然玩上瘾了
2025-10-14
ChatBI 实体标准查询名优化实战:如何将准确率从 80% 提升到 90%
2025-09-29
大模型幻觉检测在 NL2SQL 任务的应用实践
2025-09-15
AI Agent重塑商业智能:2025技术融合路线图
2025-09-14
滴滴 ChatBl 技术实践:智能数据分析的前沿探索与应用
2025-09-12
AI重塑生产关系:IT部门不会消失,只会进化
2025-09-12
企业知识库构建最佳实践:ChatBI发展中的关键角色
2025-09-06
介绍菜鸟集团ChatBI在物流领域实践及招人
 
            2025-09-15
2025-08-19
2025-08-24
2025-08-28
2025-09-02
2025-09-03
2025-08-23
2025-09-06
2025-08-16
2025-08-14
2025-09-02
2025-08-16
2025-08-14
2025-08-06
2025-07-29
2025-05-27
2025-05-27
2025-05-12