Power Query M语言中,使用error表示计算表达式处理过程中的异常错误。
M语言中的异常,一般是由运算符和函数遇到错误条件,或使用了错误表达式导致的。
一、Power Query的常见错误
(1)函数输入了错误的参数:Expression.Error:无法将值XXX转换为类型XXX
函数Number.ToText实现将数字类型转换成文本类型的功能。输入参数应是数字类型,但下例输入参数的却是文本,导致出错。
let
result = Number.ToText("文本")
in
result
(2)表达式类型错误:Expression.Error:无法将运算符XXX应用于类型XXX和XXX
表达式+应用于数字的相加,下例却用作文本的相加,导致出错。
let
result = 1+"文本"
in
result
(3)无法识别名称(大小写错误,拼写错误):Expression.Error:无法识别名称XXX
比照常见错误(1)中的函数名,函数名number.totext没有按大小写正确输入,导致出错。
let
result = number.totext("文本")
in
result
(4)数据转换出错:DataFormat.Error:无法转换成XXX
销售金额列转换成数字类型,但其中包含了文本数据,导致导致出错
let
源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
更改的类型 = Table.TransformColumnTypes(源,{{"销售金额", type number}})
in
更改的类型
二、M语言中的异常处理(Error)
可以使用try表达式来测试、分析、处理错误异常。当发生某一错误时,try表达式可以指定一个值,此值可用于指示错误发生的原因。
(1)Try表达式结构:
tryResult = try 可能发生异常的语句 otherwise 发生错误时的结果值
(2)try表达式返回的结果
当错误没有发生时
Try返回一个记录record,包含字段HasError、Value。
其中HasError的值为FALSE,Value是“可能发生异常的语句”的计算结果
当错误发生时
因为“计数1”列不存在,表达式计算出错。
Try返回一个记录record,包含字段HasError、Error。
其中HasError的值为TRUE,Error是一个记录record
展开Error,会看到错误信息的详细记录,包括字段Reason、Message、Detail。
其中Message字段说明了错误的信息(已经是中文提示的,一般比较好理解)
(3)搭配otherwise时,try表达式返回的结果
当错误没有发生时
返回了“可能发生异常的语句”的计算结果。
与没有搭配otherwise的try语句相比,不需要再通过返回结果的Value字段再去读取了。语句表达得更加简单、紧凑。
当错误发生时
因为“计数1”列不存在,表达式计算出错。
计算结果返回了otherwise后的值。
三、使用try表达式处理异常
(1)增强代码容错性
异常发生后,程序的执行会中断在异常位置,后面的代码就不会执行了。因此好的代码需要通过异常处理机制,增加健壮性,处理无法预判的状况。
Power Query中,通过上述的try表达式,即可实现异常的抛出及处理。
(2)自定义抛出异常
根据实际使用,可以自定义抛出的异常信息,使用error加记录格式即可
let
result = (if (try 1+"文本")[HasError]
then error [Reason="运算错误",
Message="加法运算出错",
Detail="只能进行数字相加"]
else 1+1)
in
result