Power Query 是否有等效的 ISNUMBER() 或 ISTEXT()?

Is there an ISNUMBER() or ISTEXT() equivalent for Power Query?

我有一列包含混合类型的数字和文本,我试图使用 if ... then ... else 条件将它们分成不同的列。是否有 ISNUMBER()ISTEXT 等效于电源查询?

这在一定程度上取决于数据的性质及其最初的编码方式。 Power Query 的类型比 Excel.

例如:

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

创建一个包含三行的 table。第一行的数据类型是数字。第二行和第三行都是文本。但是第二行的文本可以解释为数字。

以下是创建两个新列的查询,显示每行是文本还是数字类型。第一列检查数据类型。第二列尝试根据值猜测数据类型。猜测代码假定不是数字的所有内容都是文本。

示例代码

编辑:借用@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"

示例输出

ISTEXT() 在我使用过的任何语言中都不存在 - 通常任何数字或日期值都可以转换为文本,那么什么是错误结果?

对于 ISNUMBER,我无需任何代码即可通过将数据类型更改为数字类型来解决此问题,例如整数。任何未转换的行将显示 Error - 然后您可以应用 Replace ErrorsRemove Errors处理它们。

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

这里是如何在 Excel Powerquery

中检查类型

IsNumber =Value.Is(Value.FromText([ColumnOfMixedValues]), type number)

IsText =Value.Is(Value.FromText([ColumnOfMixedValues]), type text)

希望对您有所帮助!

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

将其放入逻辑测试格式

Value.Type([Column1]) = type number

Value.Type([Column1]) = type text

函数 Value.Type return 是 type,因此将其放入等式中因此 return 是真/假。

同样,

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

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

HTH