|
本帖最后由 碧色之雨 于 2024-9-20 18:14 编辑
与这篇贴子的情况类似,但是看原贴最后也没有找到解决办法Power query加载至表,非常慢-Power BI-ExcelHome技术论坛 -
我的数据量大概在20w条左右,在pq编辑器里进行全部刷新大约需要1-2分钟就能完成,但是一加载到Excel的Sheet页中,就变得非常慢,每秒只能加载10几行。
经过逐行检查加载速度,发现在执行一个Table.ExpandTableColumn语句后,加载速度明显下降。查了好几天的资料也没找到原因,尝试不用ExpandTableColumn展开,而是通过AddCloumn添加新列时对含嵌套表的列进行深化取数,但是不能解决该问题。
有没有大佬能帮帮忙看看有什么解决办法。
以下是源码
- let
- 缓存备案台账 = Table.Buffer(备案台账),
- 缓存解保台账 = Table.Buffer(解保台账),
- 缓存银行名称映射 = Table.Buffer(银行名称映射),
- 缓存再担保费率表 = Table.Buffer(再担保费率表),
- 小微标识 = Table.AddColumn(缓存备案台账, "辅_小微标识", each if [债务人类别]="个体工商户" or [债务人类别]="小微企业主" or [企业划型]="小型企业" or [企业划型]="微型企业" then 1 else 0, Int8.Type),
- 三农标识 = Table.AddColumn(小微标识,"辅_三农标识", each if [债务人类别]="农户" or [行业_工标]="农、林、牧、渔业" then 1 else 0, Int8.Type),
- 小微或三农 = Table.AddColumn(三农标识,"辅_小微或三农", each if [辅_小微标识]=1 or [辅_三农标识]=1 then 1 else 0, Int8.Type),
- 银行名称 = Table.AddColumn(小微或三农, "辅_匹配银行", (x)=>(
- let
- 下标 = List.PositionOf(List.Transform(缓存银行名称映射[原名称], (y)=> if Text.Contains(x[债权人名称],y)=true then 1 else 0),1)
- in
- if 下标 = -1 then "未匹配到银行" else 缓存银行名称映射[标准名称]{下标}
- ), Text.Type),
- 业务大类 = Table.AddColumn(银行名称, "辅_业务大类", (x)=>(
- if Text.Start(x[省再产品],7)="国担备案财园通" then "国担财园通"
- else if Text.Start(x[省再产品],4)="省内单独" then "省内单独备案财园通"
- else if List.Max(List.Transform(国担总对总产品列表, (y)=>if Text.Contains(x[省再产品],y) then 1 else 0))=1 then "国担总对总"
- else "常规业务"
- ),Text.Type),
-
- 责任比例 = Table.AddColumn(业务大类, "辅_责任比例", each
- ((if ([省再确认时间]<=统计日期) and (not([省再确认时间] is null)) then [分险比例_省级再担保] else 0) +
- (if [辅_业务大类]="国担总对总" then 0 else [分险比例_国担]))/100
- , Number.Type),
- 再担保费率 = Table.AddColumn(责任比例, "辅_再担保费率", (x)=>Table.SelectRows(缓存再担保费率表, (y)=>(y[业务类型]=x[辅_业务大类]) and (y[起始日期]<=List.Max({Date.FromText("2000/1/1"),x[国担确认时间]})) and (y[结束日期]>=List.Max({Date.FromText("2000/1/1"),x[国担确认时间]})) and (y[金额下限]<(if x[主债权金额] is null then 0 else x[主债权金额])) and (y[金额上限]>=(if x[主债权金额] is null then 0 else x[主债权金额])))[费率]{0}, Number.Type),
- 户数统计 = Table.AddColumn(再担保费率, "辅_户数统计", each [直担机构名称]&"_"&[债务人名称], Text.Type),
- 私营标识 = Table.AddColumn(户数统计, "辅_私营标识", each if [债务人经济成分] is null or Text.Start([债务人经济成分],1)="私" or Text.Start([债务人经济成分],3)="自然人" then 1 else 0, Int8.Type),
- 合并的查询 = Table.NestedJoin(私营标识, {"唯一业务编号"}, 缓存解保台账, {"业务编号"}, "再担保解保台账", JoinKind.LeftOuter),
- 添加解保日期 = Table.AddColumn(合并的查询,"辅_自动解保日期", each List.Max({[主债权到期日期],[省再确认时间]})),
- 添加解保金额 = Table.ExpandTableColumn(添加解保日期, "再担保解保台账", {"年初解保金额","本年解保金额"}, {"临_年初解保金额","临_本年解保金额"}),
- 修正解保金额空值 = Table.ReplaceValue(添加解保金额, null, 0, Replacer.ReplaceValue, {"临_年初解保金额","临_本年解保金额"}),
- 年初贷款 = Table.AddColumn(修正解保金额空值,"辅_年初贷款金额", each if [辅_自动解保日期]<年初日期 or [省再确认时间]>=年初日期 then 0 else [主债权金额]-[临_年初解保金额], Currency.Type),
- 本年新增贷款 = Table.AddColumn(年初贷款, "辅_本年新增贷款金额", each if [省再确认时间]>=年初日期 and [省再确认时间]<=统计日期 then [主债权金额] else 0, Currency.Type),
- 本年解保贷款 = Table.AddColumn(本年新增贷款, "辅_本年解保贷款金额", each if [辅_自动解保日期]>=年初日期 and [辅_自动解保日期]<=统计日期 then [辅_年初贷款金额]+[辅_本年新增贷款金额] else [临_本年解保金额], Currency.Type),
- 期末贷款 = Table.AddColumn(本年解保贷款,"辅_期末贷款金额", each [辅_年初贷款金额]+[辅_本年新增贷款金额]-[辅_本年解保贷款金额], Currency.Type),
- 年初担保 = Table.AddColumn(期末贷款, "辅_年初担保金额", each [辅_年初贷款金额]*[辅_责任比例], Currency.Type),
- 本年新增担保 = Table.AddColumn(年初担保, "辅_本年新增担保金额", each [辅_本年新增贷款金额]*[辅_责任比例], Currency.Type),
- 本年解保担保 = Table.AddColumn(本年新增担保, "辅_本年解保担保金额", each [辅_本年解保贷款金额]*[辅_责任比例], Currency.Type),
- 期末担保 = Table.AddColumn(本年解保担保, "辅_期末担保金额", each [辅_期末贷款金额]*[辅_责任比例], Currency.Type),
- 删除临时字段 = Table.RemoveColumns(期末担保, {"临_年初解保金额","临_本年解保金额"}),
- in
- 删除临时字段
复制代码
|
|