Powerbi 查找DAX中点后的最后一个值,例如,在value1.value2.value3中查找value3

Powerbi 查找DAX中点后的最后一个值,例如,在value1.value2.value3中查找value3,powerbi,dax,Powerbi,Dax,我有一个带点的列,例如 project.phase.task project.task project.phase.subphase.task 在每一个实例中,我都想要最后一个doted值。 我正在使用DAX函数: lastVal = var i = FIND(".",'My Table'[wbs],1,-1) return if(i>0,mid('My Table'[wbs],i+1,99),"") 没有FindLast函数。我将如何模拟它? 这将是一个类似于在文件名或路径中查找文

我有一个带点的列,例如

project.phase.task
project.task
project.phase.subphase.task
在每一个实例中,我都想要最后一个doted值。 我正在使用DAX函数:

lastVal = 
var i = FIND(".",'My Table'[wbs],1,-1)
return
if(i>0,mid('My Table'[wbs],i+1,99),"")
没有FindLast函数。我将如何模拟它?
这将是一个类似于在文件名或路径中查找文件扩展名的问题。

使用DAX不需要这样做。您可以使用查询编辑器的“拆分列”功能来获取文本中位于最右边的点之后的部分


你不需要用DAX来做这件事。您可以使用查询编辑器的“拆分列”功能来获取文本中位于最右边的点之后的部分


你可以用DAX来做这件事

作为计算列:

lastVal = 
    PATHITEMREVERSE ( 
        SUBSTITUTE ( 
            'My Table'[wbs],
            ".",
            "|"
        ),
        1
    )
lastVal =
VAR String = 'My Table'[wbs]
VAR StringLength = LEN ( String )
VAR StringToTable =
    ADDCOLUMNS (
        GENERATESERIES ( 1, StringLength ),
        "Char", MID ( String, [Value], 1 )
    )
VAR LastDot = MAXX ( FILTER ( StringToTable, [Char] = "." ), [Value] )
RETURN
    RIGHT ( String, StringLength - LastDot )
作为一项措施:

lastValMeasure = 
VAR MyString = 
    IF ( 
        HASONEVALUE ( 'My Table'[wbs] ),
        FIRSTNONBLANK ( 'My Table'[wbs], 1 ),
        BLANK()
    )
RETURN
    PATHITEMREVERSE ( 
        SUBSTITUTE ( 
            MyString,
            ".",
            "|"
        ),
        1
    )

你可以用DAX来做这件事

作为计算列:

lastVal = 
    PATHITEMREVERSE ( 
        SUBSTITUTE ( 
            'My Table'[wbs],
            ".",
            "|"
        ),
        1
    )
lastVal =
VAR String = 'My Table'[wbs]
VAR StringLength = LEN ( String )
VAR StringToTable =
    ADDCOLUMNS (
        GENERATESERIES ( 1, StringLength ),
        "Char", MID ( String, [Value], 1 )
    )
VAR LastDot = MAXX ( FILTER ( StringToTable, [Char] = "." ), [Value] )
RETURN
    RIGHT ( String, StringLength - LastDot )
作为一项措施:

lastValMeasure = 
VAR MyString = 
    IF ( 
        HASONEVALUE ( 'My Table'[wbs] ),
        FIRSTNONBLANK ( 'My Table'[wbs], 1 ),
        BLANK()
    )
RETURN
    PATHITEMREVERSE ( 
        SUBSTITUTE ( 
            MyString,
            ".",
            "|"
        ),
        1
    )

您可以将字符串转换为索引的字符列表,然后获取最大索引后的字符

这应作为计算列使用:

lastVal = 
    PATHITEMREVERSE ( 
        SUBSTITUTE ( 
            'My Table'[wbs],
            ".",
            "|"
        ),
        1
    )
lastVal =
VAR String = 'My Table'[wbs]
VAR StringLength = LEN ( String )
VAR StringToTable =
    ADDCOLUMNS (
        GENERATESERIES ( 1, StringLength ),
        "Char", MID ( String, [Value], 1 )
    )
VAR LastDot = MAXX ( FILTER ( StringToTable, [Char] = "." ), [Value] )
RETURN
    RIGHT ( String, StringLength - LastDot )

如果您需要它作为度量,那么只需调整字符串变量以获得适当的聚合。例如,MAX'My Table'[wbs]或FIRSTNONBLANK'My Table'[wbs]、'My Table'[wbs]。

您可以将字符串转换为索引的字符列表,然后获取最大索引后的字符

这应作为计算列使用:

lastVal = 
    PATHITEMREVERSE ( 
        SUBSTITUTE ( 
            'My Table'[wbs],
            ".",
            "|"
        ),
        1
    )
lastVal =
VAR String = 'My Table'[wbs]
VAR StringLength = LEN ( String )
VAR StringToTable =
    ADDCOLUMNS (
        GENERATESERIES ( 1, StringLength ),
        "Char", MID ( String, [Value], 1 )
    )
VAR LastDot = MAXX ( FILTER ( StringToTable, [Char] = "." ), [Value] )
RETURN
    RIGHT ( String, StringLength - LastDot )

如果您需要它作为度量,那么只需调整字符串变量以获得适当的聚合。例如,MAX'My Table'[wbs]或FIRSTNONBLANK'My Table'[wbs]、'My Table'[wbs]。

巧妙地使用了路径函数!巧妙地使用了路径函数!谢谢你,亚历克西斯。正是我想要的。答案也迎合了奇怪的边缘情况,我没有定界符,只有最后一个值。关于DAX我还有很多要学的谢谢你Alexis。正是我想要的。答案也迎合了奇怪的边缘情况,我没有定界符,只有最后一个值。关于DAX,我有很多东西要学。答案很棒。我使用了复制列>拆分列>删除列作为拆分答案的第一部分。我使用了复制列>拆分列>删除列拆分的第一部分