我有一个包含数字和文字的混合类型的列,并尝试使用if
... then
... else
条件将它们分成不同的列。是否有ISNUMBER()
或ISTEXT
等效的电源查询?
答案 0 :(得分:11)
以下是检查Excel Powerquery中的类型
的方法 ISNUMBER
=Value.Is(Value.FromText([ColumnOfMixedValues]), type number)
ISTEXT
=Value.Is(Value.FromText([ColumnOfMixedValues]), type text)
答案 1 :(得分:2)
这取决于数据的性质以及它最初是如何编码的。 Power Query的输入类型比Excel更强。
例如:
Source = Table.FromRecords({[A=1],[A="1"],[A="a"]})
创建一个包含三行的表。第一行的数据类型是数字。第二行和第三行都是文本。但第二行的文字可以解释为数字。
以下是一个查询,它创建两个新列,显示每行是文本还是数字类型。第一列检查数据类型。第二列尝试根据值猜测数据类型。猜测代码假设一个数字不是文本。
编辑:借用@AlejandroLopez-Lago-MSFT对解释类型的评论。
let
Source = Table.FromRecords({[A=1],[A="1"],[A="a"]}),
#"Added Custom" = Table.AddColumn(Source, "Type", each
let
TypeLookup = (inputType as type) as text =>
Table.FromRecords(
{
[Type=type text, Value="Text"],
[Type=type number, Value="Number"]
}
){[Type=inputType]}[Value]
in
TypeLookup(Value.Type([A]))
),
#"Added Custom 2" = Table.AddColumn(#"Added Custom", "Interpreted Type", each
let
result = try Number.From([A]) otherwise "Text",
resultType = if result = "Text" then "Text" else "Number"
in
resultType
)
in
#"Added Custom 2"
答案 2 :(得分:1)
以逻辑测试格式放置
Value.Type([Column1]) = type number
Value.Type([Column1]) = type text
函数Value.Type
返回一个type
,因此将其放在等式中将返回true / false。
同样,
Value.Type([Column1]) = Date.Type
Value.Type([Column1]) = Text.Type
HTH
答案 3 :(得分:0)
ISTEXT()并不存在于我使用的任何语言中 - 通常任何数字或日期值都可以转换为文本,那么什么是错误的结果?
对于ISNUMBER,我会在没有任何代码的情况下通过将数据类型更改为数字类型来解决此问题,例如整数。任何无法转换的行都会显示错误 - 然后您可以应用替换错误或删除错误来处理它们。
如果您不想打扰原始列,请先使用重复列。
答案 4 :(得分:0)
我同意Mike Honey的观点。 我有一个SKU代码,它是Char和Num的混合。 通常最后8个字符是数字,但在某些奇怪的情况下,SKU会重复另外一个字母但给出相同的EAN会导致混乱。 通过使用Text.End(SKU,1)创建一个新的临时列,我只得到最后一个字符。然后我将该列转换为整数。然后删除任何错误行,只留下我需要的行。然后我删除临时列,并以我开始使用的格式留下我需要的行。