人生没有彩排
每一天都是现场直播

给 Power BI 开外挂:用 DAX 共享函数库解锁文本处理新姿势

前言

在 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 个实用函数,覆盖了广泛的分析与可视化场景,可帮助你显著减少重复劳动、提升开发与维护效率,赶快用起来吧!

赞(0) 打赏
版权声明:本文为夕枫的原创文章,著作权归作者所有,未经允许不得转载
文章名称:《给 Power BI 开外挂:用 DAX 共享函数库解锁文本处理新姿势》
文章链接:https://www.ximaple.com/posts/1695.html
订阅评论
提醒
guest
0 评论
最新
最久 最赞
内联反馈
查看所有评论

觉得文章有用的话就支持一下吧~

感谢您的打赏支持,我将持续输出有价值的内容!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册

Operation don't support