使用power查询,我们可以将列拆分为非数字到数字的数据,如果有一个值,比如Lead 10要拆分为Lead和10,那么这个方法很好,但是,如果该数字是十进制的话,也会以同样的方式拆分,例如Lead 20.5。使用拆分的非数字到数字的拆分--这是Lead 20. 5
我有下面的示例数据,我希望将其分割如下:
Lead 20.5 --> `Lead` `20.5`
No Data --> `null`
Arsenic 10 --> `Arsenic` `10`
Gold 50.55 --> `Gold` `50.55`
1,4-Dioxane 21 --> `1,4-Dioxane` `21`在此之前,我使用了最正确的“拆分”,但是这会将No数据拆分成单独的单词。
任何关于如何实现这一目标的想法都将是伟大的。
更新1: 1,4-二恶烷

M码:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
#"Split Column by Character Transition" = Table.SplitColumn(#"Changed Type", "Column1",
Splitter.SplitTextByCharacterTransition((c) => not List.Contains({"0".."9","."}, c), {"0".."9","."}), {"Column1.1", "Column1.2"})
in
#"Split Column by Character Transition"发布于 2021-06-24 12:04:08
如何做到这一点取决于您的数据。
编辑
使用化学名称中的数字说明附加数据示例
算法
如果最后一个单词不是数字,则用NBSP space.
如果最后一个单词不是空格,我将使用自定义函数检查最后一个单词并修改字符串。
自定义函数 M代码:
输入为空白查询并重命名它:fnConvString
编辑以改进计算
//Rename this query "fnConvString"
(string as text) =>
let
lastWord = Text.AfterDelimiter(string," ",{0,RelativePosition.FromEnd}),
lastIsNumber = try Value.Type(Number.FromText(lastWord)) = type number otherwise false,
replSpace = if lastIsNumber = false then Text.Replace(string," ",Character.FromNumber(160)) else string
in
replSpaceMain MCode
编辑以简化没有添加列的代码
let
Source = Excel.CurrentWorkbook(){[Name="Table29"]}[Content],
addNBSP = Table.TransformColumns(Source,{"Column1", each fnConvString(_)}),
#"Split Column by Delimiter" = Table.SplitColumn(addNBSP, "Column1",
Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Column1.1", "Column1.2"}),
#"Changed Type" = Table.TransformColumnTypes(
#"Split Column by Delimiter",{{"Column1.1", type text}, {"Column1.2", type number}})
in
#"Changed Type"

没有自定义函数的编辑
如果您希望不使用自定义函数,则可以将其作为Transform Operation__合并到主代码中:
没有自定义函数的M代码
let
Source = Excel.CurrentWorkbook(){[Name="Table29"]}[Content],
addNBSP = Table.TransformColumns(Source,{"Column1", each
let
lastWord = Text.AfterDelimiter(_," ",{0,RelativePosition.FromEnd}),
lastIsNumber = try Value.Type(Number.FromText(lastWord)) = type number otherwise false,
replSpace = if lastIsNumber = false then Text.Replace(_," ",Character.FromNumber(160)) else _
in
replSpace
}),
#"Split Column by Delimiter" = Table.SplitColumn(addNBSP, "Column1",
Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, true), {"Column1.1", "Column1.2"}),
#"Changed Type" = Table.TransformColumnTypes(
#"Split Column by Delimiter",{{"Column1.1", type text}, {"Column1.2", type number}})
in
#"Changed Type"发布于 2021-06-24 12:01:54
在powerquery中,基于示例数据,看起来您可以在空格字符上拆分。
右击列。分裂列..。由发烧友..。太空..。拆分:最左边的分隔符
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Split Column by Delimiter" = Table.SplitColumn(Source, "Column1", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.Csv, false), {"Column1.1", "Column1.2"})
in #"Split Column by Delimiter"如果数据不喜欢这种方法,可以从alpha解析数字。
添加带有公式的自定义列
= Text.Remove([Column1],{"0".."9","."})只获取文本部分,并添加第二个带有公式的自定义列
=try Text.Remove([Column1],Text.ToList(Text.Remove([Column1],{"0".."9","."}))) otherwise null得到数字部分
样本全码
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Custom" = Table.AddColumn(Source, "Text", each Text.Remove([Column1],{"0".."9","."})),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Numeric", each try Text.Remove([Column1],Text.ToList(Text.Remove([Column1],{"0".."9","."}))) otherwise null)
in #"Added Custom1"https://stackoverflow.com/questions/68114241
复制相似问题