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

XF.Str.BetweenDelimiters

语法作用

从字符串中返回指定分隔符中间的文本,可使用startIndex参数指定使用第几个起始分隔符,endIndex参数则指定使用第几个结束分隔符,只不过endIndex的起始位置是相对于startIndex后的,分隔符位置从1开始。

XF.Str.BetweenDelimiters(str:string,startDelimiter:string,endDelimiter:string,startIndex:int64,endIndex:int64)

函数代码

该函数的实现代码如下:

/// 从字符串中返回指定分隔符中间的文本,可使用startIndex参数指定使用第几个起始分隔符,endIndex参数则指定使用第几个结束分隔符,只不过endIndex的起始位置是相对于startIndex后的
FUNCTION XF.Str.BetweenDelimiters = (str:string,startDelimiter:string,endDelimiter:string,startIndex:int64,endIndex:int64) =>
    IF(startIndex<1 || endIndex<1,
        ERROR("startIndex与endIndex参数应大于或等于1"),
        VAR StartDelimiterIndex = 
            DISTINCT(
                FILTER(
                    SELECTCOLUMNS(
                        GENERATESERIES(1,LEN(str)),
                        "Position",FIND(startDelimiter,str,[Value],BLANK())
                    ),
                    [Position]<>BLANK()
                )
            )
        VAR StartDelimiterIndex_AddRank = 
            ADDCOLUMNS(
                StartDelimiterIndex,
                "Rank",RANKX(StartDelimiterIndex,[Position],,1)
            )
        VAR StartIndex = COALESCE(MAXX(FILTER(StartDelimiterIndex_AddRank,[Rank]=startIndex),[Position]),LEN(str))
        VAR RightText = RIGHT(str,LEN(str)-StartIndex)
        VAR TransToPath = SUBSTITUTE(RightText,endDelimiter,"|")
        RETURN
        CONCATENATEX(
            ADDCOLUMNS(
                GENERATESERIES(1,MIN(endIndex,PATHLENGTH(TransToPath))),
                "SubStr",PATHITEM(TransToPath,[Value])
            ),
            [SubStr],
            endDelimiter,
            [Value],ASC
        )
    )

应用示例

示例1:

获取 "111 (222) 333 (444)" 第二个左括号及其随后第一个右括号之间的部分。

XF.Str.BetweenDelimiters("111 (222) 333 (444)","(",")",2,1)

结果如下:

"444"

示例2:

获取 "111 (222) 333 (444)" 第一个左括号及其随后第二个右括号之间的部分。

XF.Str.BetweenDelimiters("111 (222) 333 (444)","(",")",1,2)

结果如下:

"222) 333 (444"
赞(0) 打赏
版权声明:本文为夕枫的原创文章,著作权归作者所有,未经允许不得转载
文章名称:《PowerBI DAX自定义函数-XF.Str.BetweenDelimiters》
文章链接:https://www.ximaple.com/posts/1321.html
订阅评论
提醒
guest
0 评论
最新
最久 最赞
内联反馈
查看所有评论

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

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

支付宝扫一扫

微信扫一扫

登录

找回密码

注册

Operation don't support