Power BI M 代码从小写到大写的拆分列将不包含变音符号(重音)

问题描述 投票:0回答:1

在 Power BI 中,我有一列需要将所有值从小写拆分为大写:

Column1
Blue
Blue
Energy
Energy
BlueÉnergie
Énergie
ConformitéBlue
Blue
ConformitéÉnergie
Énergie

显而易见的解决方案是使用内置函数,最终看起来像这样:

= Table.SplitColumn(Source, "Column1", Splitter.SplitTextByCharacterTransition({"a".."z"}, {"A".."Z"}), {"Column1.1", "Column1.2"})

问题是我没有得到预期的结果,最终结果是:

第1.1栏 第1.2栏
蓝色 能源
蓝色
能源
能源 蓝色
蓝色能量
能量 蓝色
ConformitéBlue
蓝色 顺从
ConformitéEnergie
能量 顺从

当预期结果应该是:

第1.1栏 第1.2栏
蓝色 能源
蓝色
能源
能源 蓝色
蓝色 能量
能量 蓝色
顺从 蓝色
蓝色 顺从
顺从 能量
能量 顺从

如何尽可能简洁地获得预期结果,以便该列正确地从所有小写字符拆分为所有大写字符?

注意:空格和特殊字符确实出现在我的数据集中,因此我无法按任何分隔符进行拆分

split powerbi m diacritics
1个回答
0
投票

有趣,我从未见过这种情况发生(但我是 Power Query 新手,并不真正使用非英语字母)。

无论如何,这有点笨重,但似乎有效:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],

    AddCustom = Table.AddColumn(Source, "Custom", each 
        let
            text = [Column1],
            len = Text.Length(text),
            result = 
                List.Accumulate({1..len}, {"", ""}, (state, current) =>
                    let
                        char = Text.Middle(text, current - 1, 1),
                        prevChar = if current > 1 then Text.Middle(text, current - 2, 1) else "",
                        isUpper = Text.Upper(char) = char and Text.Lower(char) <> char and Text.Lower(prevChar) = prevChar and Text.Upper(prevChar) <> prevChar,
                        newState = if isUpper then 
                                    {state{0} & state{1}, char} 
                                  else 
                                    {state{0}, state{1} & char}
                    in
                        newState
                ),
            finalResult = if result{0} = "" then {text, null} else result
        in
            finalResult
    ),
    AddColumns = Table.AddColumn(AddCustom, "Column1.1", each [Custom]{0}),
    AddColumn2 = Table.AddColumn(AddColumns, "Column1.2", each try [Custom]{1} otherwise null),
    RemoveColumns = Table.RemoveColumns(AddColumn2, {"Custom"})
in
    RemoveColumns
© www.soinside.com 2019 - 2024. All rights reserved.