Аргумент 'count' условного столбца PowerQuery M находится вне диапазона - PullRequest
0 голосов
/ 18 октября 2018

У меня есть лист с датами в формате 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: TheАргумент 'count' находится вне диапазона. Подробности: 4 "для всех записей, где Text.Length () = 7. Я проверил это, добавив второй столбец, чтобы получить Length of ContractDate.

Чего мне не хватает?

РЕДАКТИРОВАТЬ: Проблема решена - я идиот.Я получил ошибку, потому что в условии «тогда» я извлекаю подстроку (4,4) из значения, которое имеет только Len = 7.Я не могу получить 4 символа из 7-символьной строки, когда начинается с индекса 4.

1 Ответ

0 голосов
/ 19 октября 2018

Я знаю, что вы обнаружили проблему с вашим кодом, но стоит указать на некоторые вещи, которые полезно знать.

Text.Range без подсчета символов будет тянуть все символы после начальной точки (так чтоText.Range ([ContractDate], 4) будет работать для обоих).

Text.Middle работает как Text.Range, но не вызовет ошибку, если вы выберете диапазон, который расширяется за размер строки.Это может быть полезно, если по какой-то причине вы имели дело со строками переменного размера, где вам нужно определенное количество символов до предела после определенной позиции.

Вы также можете использовать Text.PadStart ([ContractDate],8, «0»), чтобы дополнить строки длиной 7 с 0 в начале и избежать необходимости все вместе проверять по условию.

...