前言
在 Power BI 中遇到复杂的文本处理需求时,最佳实践通常是回到 Power Query 中进行 ETL 清洗,而非依赖 DAX。
然而现实场景往往更为棘手:模型已固化、数据源权限受限、字段跨表分散且需求多变等。此时,若能直接在模型层用 DAX "就地解决",反而更具灵活性。
过去,DAX 的文本处理能力确实较弱,这也是更推荐使用 Power Query 来处理的原因之一。但随着 DAX 共享函数库 的出现,这一短板已被极大补强。
本篇文章将通过三个案例,带大家领略在函数库加持下,DAX 焕然一新的文本处理能力!
案例一:同时拆分多列,转换表结构
问题描述:
如下图所示,将左边的表格转换为右边的。

解决方案:
用到的DAX查询的表达式如下:
EVALUATE
SELECTCOLUMNS(
GENERATEALL(
'Table',
VAR SizeTbl = SELECTCOLUMNS(XF.Str.SplitAny('Table'[尺码规格],"-"),[Index],"Size",[SubStr])
VAR ProportionTbl = SELECTCOLUMNS(XF.Str.SplitAny('Table'[比例],"::"),[Index],"Proportion",[SubStr])
RETURN
NATURALINNERJOIN(SizeTbl,ProportionTbl)
),
'Table'[货号],'Table'[颜色],"尺码规格",[Size],"比例",[Proportion]
)
结果如下图所示:

案例二:计算新增总用户数
问题描述:
添加计算列,解析文本内容,计算新增总用户数。如下图所示:

解决方案:
用到的计算列表达式如下:
新增总用户数 = SUMX(XF.Str.Split(XF.Str.Selects('新增用户统计'[source_breakdown],"0123456789;"),";"),[SubStr]*1)
结果如下图所示:

案例三:计算成绩最高的科目
问题描述:
添加计算列,解析文本内容,计算成绩最高的科目。如下图所示:

解决方案:
用到的计算列表达式如下:
成绩最高的科目 =
XF.Analysis.ItemAtMax(
ADDCOLUMNS(
XF.Str.Split('成绩表'[exam_results],";"),
"科目",TRIM(XF.Str.BeforeDelimiter([SubStr],"|",1)),
"成绩",TRIM(XF.Str.AfterDelimiter([SubStr],"|",1))*1
),
[成绩],[科目]
)
结果如下图所示:

总结
通过以上三个案例可以看到,借助 DAX 共享函数库,很多原本需要在 Power Query 中完成的文本拆分、提取、解析等逻辑,现在也可以用 DAX 更灵活地"就地处理"。
如果你还不太了解 DAX 共享函数库是什么、能做些什么,那么可以参考这篇文章:重磅升级!DAX共享函数库功能增强,图表与功能函数全面解锁!
目前,DAX 共享函数库中共有:文本函数、日期函数、功能函数、图表函数、其他函数等在内的 116 个实用函数,覆盖了广泛的分析与可视化场景,可帮助你显著减少重复劳动、提升开发与维护效率,赶快用起来吧!





















