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

Posted

技术标签:

【中文标题】PowerQuery M 条件列“计数”参数超出范围【英文标题】:PowerQuery M Conditional Column 'count' argument is out of range 【发布时间】:2018-10-18 19:09:30 【问题描述】:

如果月份编号是个位数,我有一张日期为 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)

代码在“else”条件下运行良好,但我收到错误“Expression.Error: 'count' argument is out of range. Details: 4” for all records where Text.Length() = 7. I通过添加第二列来获得 ContractDate 的长度来验证这一点。

我错过了什么?

编辑:问题已解决 - 我是个白痴。我收到一个错误,因为在“then”条件下,我从一个只有 Len=7 的值中提取 (4,4) 的子字符串。从索引 4 开始时,我无法从 7 个字符串中取出 4 个字符。

【问题讨论】:

【参考方案1】:

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

没有字符计数的 Text.Range 将拉入起点之后的所有字符(因此 Text.Range([ContractDate], 4) 对两者都有效)。

Text.Middle 的操作与 Text.Range 类似,但如果您选择的范围超出了字符串的大小,则不会导致错误。如果由于某种原因您正在处理可变大小的字符串,其中您需要特定数量的字符(超过某个位置的限制),这可能会很有用。

您还可以使用 Text.PadStart([ContractDate], 8, "0") 在开头用 0 填充 7 个长度的字符串,从而避免一起进行条件检查。

【讨论】:

以上是关于PowerQuery M 条件列“计数”参数超出范围的主要内容,如果未能解决你的问题,请参考以下文章

Android用query怎么进行多条件查询?

powerquery的sum公式

PowerQuery - 在计算中使用列的位置而不是列名

如何用 if 条件填充列

powerquery中使用原始列名作为前缀 啥意思?

带有参数的 Power Query 无效列