在DAX中找到小数点后的最后一个值,例如在value1.value2.value3中找到value3

时间:2019-01-07 03:19:23

标签: powerbi dax

我有一列带有虚线值,例如

project.phase.task
project.task
project.phase.subphase.task

在每个实例中,我想要最后一个值。 我正在使用DAX功能:

lastVal = 
var i = FIND(".",'My Table'[wbs],1,-1)
return
if(i>0,mid('My Table'[wbs],i+1,99),"")

没有FindLast函数。我将如何模拟它? 这类似于在文件名或路径中找到文件扩展名。

3 个答案:

答案 0 :(得分:3)

您不需要使用DAX进行此操作。您可以使用Split Column的{​​{1}}函数获取最右边的点之后的文本部分。

enter image description here

答案 1 :(得分:3)

您可以使用DAX进行此操作。

作为计算列:

lastVal = 
    PATHITEMREVERSE ( 
        SUBSTITUTE ( 
            'My Table'[wbs],
            ".",
            "|"
        ),
        1
    )

作为衡量标准:

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

答案 2 :(得分:2)

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

这应该用作计算列:

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 )

如果需要使用它作为度量标准,则只需调整String变量即可采用适当的汇总。例如,MAX('My Table'[wbs])FIRSTNONBLANK('My Table'[wbs], 'My Table'[wbs])