支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


DeepSeek + Power BI,PQ 智能拆分地址

发布日期:2025-03-12 21:54:38 浏览次数: 1670 作者:BI佐罗讲数据分析
推荐语

利用DeepSeek和Power BI轻松拆分复杂的中国地址数据,无需编码经验。

核心内容:
1. 传统地址拆分方法的局限性和复杂性
2. DeepSeek和Power BI的结合优势及其操作简便性
3. 通过具体案例展示如何使用DeepSeek和Power BI处理复杂地址数据

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

 

 

在日常数据处理中,我们常遇到这样的场景:

  • • 客户地址字段混杂省市区,如 北京市海淀区中关村南大街5号
  • • 业务系统导出数据需按省、市、区、详细地址分类统计
  • • 遇到直辖市、自治区、特别行政区时,常规拆分规则瞬间失效

传统方案(如简单按字符截取)不仅代码复杂,还需人工维护大量规则。而今天,我们将借助 DeepSeek + Power BI(Power Query 部分),实现中国地址智能解析,覆盖所有行政规划特殊性!

Power Query 功能强大,但上手却并不简单,尤其是对于零基础的小白用户,很多时候:

  • • 不知道如何正确输入代码
  • • 不知道哪个按钮实现想要的功能
  • • 经常在 PQ 中乱点一通,却得不到想要的结果

DeepSeek 的出现解决了这些痛点:

  • • 只需要告诉 DeepSeek 你想做什么,它立刻告诉你如何操作
  • • 完全不用懂复杂的 M 代码

如果让你在 PQ 中将以下地址拆分为省、市、区/县和详细地址四列,你会怎么做?

image-20250312182547019

我们看看 DeepSeek 能不能帮我们来解决这个问题。

image-20250312183215839

DeepSeek 给出了完整的代码和操作步骤,按照指示在 Power Query 中运行这些代码。新建一个查询,在高级编辑器中粘贴 DeepSeek 给出的代码。

image-20250312183353246

运行之后发现直辖市和特别行政区部分出现了报错。

image-20250312183609363

直辖市区字段为空白,详细地址错误,特别行政区区和详细地址都发生报错。

让 DeepSeek 修改一下,先修改直辖市部分,直接告诉 DeepSeek 直辖市部分报错即可。

image-20250312184121297

修改之后直辖市部分正确。

image-20250312184330439

最后再来让 DeepSeek 修改一下特别行政区部分的错误。

image-20250312184630256

将 Power Query 中的代码修改一下,所有地址都可以正确显示了。

image-20250312184737483

整个过程不需要我们去写 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

过去,我们做数据分析的时候,总感觉数据处理任务复杂难懂,尤其是像客户地址这种包含特殊情况的字段拆分,经常会耗费大量精力,最终效果还可能差强人意:

  • • 每次面对稍微复杂一点的数据,都需要花费大量时间学习 PQ 代码;
  • • 各种特殊情况层出不穷,往往需要反复调整,效率低下;
  • • 想要自动化处理,但又缺乏相关技能,总是无奈手动“返工”。

借助 DeepSeek,原本复杂繁琐的数据拆分工作变得前所未有的简单:

  • • 不需要深入理解复杂的代码;
  • • 不需要逐一处理特殊地址格式;
  • • 只需要明确告诉 DeepSeek 你的需求,它就能智能识别并自动生成可用的解决方案。

赶快开启你的智能数据分析之旅吧,让 AI 帮你释放创造力,助你迅速实现从“小白”到数据高手的跃迁,轻松在数据时代占据优势!从此数据处理不再是数据专家的专利,每个人都能轻松完成数据分析,解放你的双手,把时间精力投入到更重要的业务决策之中。

2025,ABI革命,人人可用。

 

 

 

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询