PowerQuery M条件列“计数”参数超出范围

时间:2018-10-18 19:09:30

标签: excel powerquery m

如果月份号是一位数字,我有一个日期为MMDDYYY的工作表,并且没有前导0。例如,1012018或12312018。每个记录都有一个日期,每个日期的长度为7或8个字符。

这是我用来将数字转换为日期的代码:

if Text.Length([ContractDate]) = 7

then 
Text.Range([ContractDate],0,1)&"/"&Text.Range([ContractDate],1,2)&"/"&Text.Range([ContractDate],4,4) 

else
Text.Range([ContractDate],0,2)&"/"&Text.Range([ContractDate],2,2)&"/"&Text.Range([ContractDate],4,4)

代码在“其他”条件下工作正常,但出现错误“ Expression.Error:'count'参数超出范围。详细信息:4”,其中Text.Length()= 7的所有记录。通过添加第二列以获取ContractDate的长度来验证这一点。

我想念什么?

编辑:已解决问题-我是个白痴。我收到错误消息是因为在“然后”条件下,我从仅具有Len = 7的值中提取了(4,4)的子字符串。从索引4开始,我无法从7个字符串中得到4个字符。

1 个答案:

答案 0 :(得分:2)

我知道您在代码中发现了问题,但是值得指出一些可能需要了解的事情。

不带字符数的Text.Range将拉出所有超过起始点的字符(因此Text.Range([[ContractDate],4)都适用)。

Text.Middle的操作类似于Text.Range,但是如果您选择的范围超出了字符串的大小,则不会导致错误。如果由于某种原因您要处理可变大小的字符串,而该字符串需要特定数量的字符,并且超出特定位置的限制,则此功能很有用。

您还可以使用Text.PadStart([ContractDate],8,“ 0”)在开始时将7个长度的字符串填充为0,并避免一起进行条件检查。