在Power BI DAX中最后一次出现空格后提取值

时间:2018-08-30 11:45:23

标签: powerbi dax

我有这样的数据:

  • lm-sample产品
  • lm样本产品
  • 非退出的lm退出
  • lm-价值开发

我只想从右边的第一个空格之后提取最后一个值。因此,在此示例中:

  • 产品
  • 产品
  • 非生产共享
  • dev

我尝试过:

Env = 
Var FirstSpace = FIND(" ", 'AWS Reservations'[Account])
Return RIGHT('AWS Reservations'[Account],FirstSpace - 1)

但这给了我奇怪的结果。希望能对解决此问题有所帮助。谢谢。

3 个答案:

答案 0 :(得分:3)

FINDSEARCH缺少从字符串末尾开始搜索的选项,这使这很棘手。

您可以使用:

Env = TRIM(RIGHT(SUBSTITUTE('AWS Reservations'[Account], " ", REPT(" ", LEN('AWS Reservations'[Account]))), LEN('AWS Reservations'[Account])))

或将其分解以更好地理解:

Env = 
VAR string_length = LEN('AWS Reservations'[Account])
RETURN
TRIM(
    RIGHT(
        SUBSTITUTE(
            'AWS Reservations'[Account],
            " ",
            REPT(" ", string_length)
        ),
        string_length
    )
)

lm-sample prod为例。

首先,我们使用REPT(" ", string_length)创建一个字符串

"              "
,该字符串的长度与值lm-sample prod相同。

然后,我们将所有出现的“”都用这个超长

"              "
替换,字符串将变成
lm-sample              prod

此后,我们将很容易从右侧获得string_length的子字符串,即

"          prod"

最后,我们对结果进行修整以得到我们想要的prod

结果:

results

Reference

答案 1 :(得分:0)

您正在将起始字符索引而不是所需的字符数传递给RIGHT()函数。

  

Right(文本,NumberOfCharacters)

尝试一下:

Env = 
Var FirstSpace = FIND(" ", 'AWS Reservations'[Account])
Return RIGHT('AWS Reservations'[Account], LEN('AWS Reservations'[Account]) - FirstSpace)

答案 2 :(得分:0)

一个可能对其他人有帮助的小说明:如果您正在搜索由 other 而不是空格分隔的字符串部分的最后一个实例,请说句点 (.),例如要从“first.second.third”中获得“third”,您需要用句点替换first“”中的空格,但保留second“”,如那是“超长”字符串,修剪掉了......