Power Query中是否有与ISNUMBER()或ISTEXT()等价的函数?

8

我有一列混合了数字和文本,想要使用if ... then ... else 条件将它们分成不同的列。在Power Query中是否有ISNUMBER()ISTEXT()等价函数?

5个回答

41

以下是如何在Excel Powerquery中检查类型的方法

数字类型 =Value.Is(Value.FromText([混合值所在列]), type number)

文本类型 =Value.Is(Value.FromText([混合值所在列]), type text)

希望对您有所帮助!


2
这是最优雅的解决方案。 - Brett

6

将其转化为逻辑测试格式

Value.Type([Column1]) = type number

Value.Type([Column1]) = type text

Value.Type 函数返回一个 类型,因此将其放在方程中会返回一个 true / false。

同样地,

Value.Type([Column1]) = Date.Type

Value.Type([Column1]) = Text.Type

HTH


3

这要取决于数据的性质和最初编码的方式。Power Query比Excel更加强类型。

例如:

Source = Table.FromRecords({[A=1],[A="1"],[A="a"]})

创建一个有三行的表格。第一行的数据类型是数字,第二行和第三行都是文本。但第二行的文本可以被解释为数字。
以下是一个查询,创建两个新列,显示每行是文本还是数字类型。第一列检查数据类型,第二列尝试根据值猜测数据类型。猜测代码假设不是数字的所有内容都是文本。
示例代码:
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"

样例输出

样例输出表格


(注:本文涉及IT技术)

2
为了处理这种情况,您可以使用以下自定义列公式:each let result = try Number.From([A]) otherwise "Text", resultType = if result = "Text" then "Text" else "Number" in resultType - Alejandro Lopez-Lago - MSFT
@AlejandroLopez-Lago-MSFT 谢谢!我使用了你的代码更新了示例。 - AndASM

0

ISTEXT()在我所接触的任何语言中都不存在 - 通常任何数字或日期值都可以转换为文本,那么什么情况下会出现错误结果呢?

对于ISNUMBER,我可以通过将数据类型更改为数字类型(例如整数)来解决此问题,而无需编写任何代码。任何无法转换的行都将显示错误 - 然后您可以应用替换错误删除错误来处理它们。

如果您不想干扰原始列,请先使用复制列


0

我同意Mike Honey的观点。 我有一个SKU代码,它是字符和数字的混合。 通常最后8个字符是数字,但在某些奇怪的情况下,SKU会重复一个额外的字母,但给出相同的EAN,这会造成混乱。 通过使用Text.End(SKU,1)创建一个新的临时列,我只获取最后一个字符。然后我将该列转换为整数。任何错误行都将被删除,只留下我需要的行。然后我删除临时列,以原始格式保留所需的行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接