在 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栏 |
---|---|
蓝色 | 能源 |
蓝色 | 空 |
能源 | 空 |
能源 | 蓝色 |
蓝色 | 能量 |
能量 | 蓝色 |
顺从 | 蓝色 |
蓝色 | 顺从 |
顺从 | 能量 |
能量 | 顺从 |
如何尽可能简洁地获得预期结果,以便该列正确地从所有小写字符拆分为所有大写字符?
注意:空格和特殊字符确实出现在我的数据集中,因此我无法按任何分隔符进行拆分
有趣,我从未见过这种情况发生(但我是 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