Как добавить столбец в объединенную таблицу, созданную с помощью Power Query в Excel 2016? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть файл Excel 2016 с несколькими таблицами, которые я объединил с помощью Power Query.В таблицах есть несколько полей даты, которые заполняются в виде текста (например, «1022018» = 2 января 2018 года), и мне нужно преобразовать их в даты.Я добавил столбец для каждого, который просто преобразует данные, но каждый раз, когда я обновляю свой запрос, новые столбцы исчезают.

Я открыл Power Query и попытался добавить пользовательский столбец, но формула, которую я создал в Excel, не работает, и ее нужно записать в M. Мне не повезло найти простое преобразование в M или другоеспособ создания столбцов с помощью формулы Excel.

Есть идеи, как этого добиться?

К вашему сведению здесь формула: =IF(LEN([@DOBstring])=7,DATE(RIGHT([@DOBstring],4),LEFT([@DOBstring],1),MID([@DOBstring],2,2)),DATE(RIGHT([@DOBstring],4),LEFT([@DOBstring],2),MID([@DOBstring],3,2)))

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Если я правильно понял, month во входной строке не дополняется нулями (поэтому длина входных строк равна 7 или 8).

Возможно, стоит создатьмаленькая функция, подобная приведенной ниже, которая будет обрабатывать переменную длину, а затем попытаться проанализировать дату на основе предполагаемых позиций символов.

ParseDate = (someText as text) as date =>
        let
            zeroPadded = Text.End("0" & someText, 8),
            yearParsed = Text.End(zeroPadded, 4),
            monthParsed = Text.Start(zeroPadded, 2),
            dayParsed = Text.Middle(zeroPadded, 2, 2),
            dateParsed = #date(Number.From(yearParsed), Number.From(monthParsed), Number.From(dayParsed))
        in dateParsed,

Затем ее можно вызвать при преобразовании существующего столбца или добавлении нового столбца.,Чтобы дать вам пример:

let
    ParseDate = (someText as text) as date =>
        let
            zeroPadded = Text.End("0" & someText, 8),
            yearParsed = Text.End(zeroPadded, 4),
            monthParsed = Text.Start(zeroPadded, 2),
            dayParsed = Text.Middle(zeroPadded, 2, 2),
            dateParsed = #date(Number.From(yearParsed), Number.From(monthParsed), Number.From(dayParsed))
        in dateParsed,
    someTable = Table.FromColumns({{"1022018", "05242019", "12282026"}}, type table [toParse = text]),
    transformedColumn = Table.TransformColumns(someTable, {{"toParse", ParseDate, type date}}),
    addedColumn = Table.AddColumn(someTable, "parsed", each ParseDate([toParse]), type date)
in
    addedColumn

, который дает:

Query output

0 голосов
/ 19 сентября 2019

В Power Query создайте пользовательский столбец со следующей формулой:

= if Text.Length([Date])=7 then
  Text.Middle([Date],1,2)
    & "-"
    & "0"
    & Text.Start([Date], 1)
    & "-"
    & Text.End([Date],4) 
else
  Text.Middle([Date],2,2)
    & "-"
    & Text.Start([Date], 2)
    & "-"
    & Text.End([Date],4)

Это приведет к тексту в формате дд-мм-гггг.В зависимости от ваших региональных настроек это будет преобразовано в правильное значение даты при форматировании этого пользовательского столбца как даты.

В противном случае вам потребуется следующая формула:

= if Text.Length([Date])=7 then 
  "0"
    & Text.Start([Date], 1)
    & "-"
    & Text.Middle([Date],1,2)
    & "-"
    & Text.End([Date],4)
else
  Text.Start([Date], 2)
    & "-"
    & Text.Middle([Date],2,2)
    & "-"
    & Text.End([Date],4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...