[英]split non digit from decimal power query
使用幂查询,我们可以将一列拆分为非数字到数字的数据,这在您有一个值(例如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`
以前我用最右边的“”分割但是这将无数据分割成单独的词。
关于如何实现这一目标的任何想法都会很棒。
代码:
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"
如何做到这一点取决于您的数据。
编辑
用化学名称中的数字说明额外的数据样本
算法
如果最后一个单词不是空格,我将使用自定义函数来检查最后一个单词并修改字符串
自定义功能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
replSpace
主代码
编辑以简化代码,没有添加列
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"
在 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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.