Меню

Power query заменить ошибки на пустое

 

Александр L

Пользователь

Сообщений: 414
Регистрация: 16.02.2015

Александр

Коллеги Всем привет , подскажите пжл возможно ли с помощь Try  в Power Query при добавлении доп столбца формулой прописать аналог EСЛИОШИБКА ?
Мне просто необходимо чтобы при расчёте выводился ноль если происходит ошибка.
Спасибо  

 

PooHkrd

Пользователь

Сообщений: 6602
Регистрация: 22.02.2017

Excel x64 О365 / 2016 / Online / Power BI

#2

14.02.2019 13:37:57

try чего-то там otherwise что-то вместо ошибки
так.
В вашем случае нужно понимать что PQ деление на ноль не воспринимает как именно ошибку, для него это вполне существующее значение. Посему настоятельно керемендую перед делением осуществлять проверку знаменателя на равенство нулю:

Код
=if [#"Количество (в базовых единицах), короба"] * [Вложения] = 0 then 0 else [База]/([#"Количество (в базовых единицах), короба"] * [Вложения])

Изменено: PooHkrd14.02.2019 13:44:59

Вот горшок пустой, он предмет простой…

 

Александр L

Пользователь

Сообщений: 414
Регистрация: 16.02.2015

Александр

#3

14.02.2019 13:39:34

Код
=try ([База]/([#"Количество (в базовых единицах), короба"]*[Вложения])) otherwise 0

Так у меня вроде так и прописано когда создаю  доп столбец но не работает

Изменено: Александр L14.02.2019 13:40:20
(вставил формулу)

 

Максим Зеленский

Пользователь

Сообщений: 4646
Регистрация: 11.06.2014

Microsoft MVP

#4

14.02.2019 13:42:15

Проще всего так:

Код
=if ([#"Количество (в базовых единицах), короба"]*[Вложения]) = 0 then 0 else ([База]/([#"Количество (в базовых единицах), короба"]*[Вложения]))

Еще можно — создать столбец =[#»Количество (в базовых единицах), короба»]*[Вложения] и использовать в формуле его, чтобы не считать два раза, а потом удалить.

F1 творит чудеса

 

Максим Зеленский

Пользователь

Сообщений: 4646
Регистрация: 11.06.2014

Microsoft MVP

#5

14.02.2019 13:44:00

Цитата
Александр L написал:
у меня вроде так и прописано когда создаю  доп столбец но не работает

Потому что деление на 0 это не совсем ошибка, которая стопорит запрос:
0/0 = NaN,
20/0 = Infinity
-20/0 = -Infinity

F1 творит чудеса

 

Александр L

Пользователь

Сообщений: 414
Регистрация: 16.02.2015

Александр

А вы вот как обошли я тоже пробовал через If но применял три условия и вот не получалось(((. Спасибо сейчас попробую на массиве этот метод.

 

А ещё есть null, деление на который даёт null, а не ошибку и не упомянутое выше

 

Александр L

Пользователь

Сообщений: 414
Регистрация: 16.02.2015

Александр

#8

14.02.2019 13:48:21

да с null  я всегда пресекаю на начальном этапе)))))

Hello @SHAKEDALROY 

another approach is to not change the column type blindly but to make a Table.TransformColumns instead to check whether the data is a datetime or not. Here an M-code

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjDVMzTSMzJQMDSyMjBQitUBCllAhQwsYEJOOYlApBQbCwA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [DateTime = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"DateTime", type text}}),
    ChangeToDateTime = Table.TransformColumns(#"Changed Type",{{"DateTime", each try DateTime.From(_, "de-DE") otherwise null , type datetime}} )
in
    ChangeToDateTime

Copy paste this code to the advanced editor in a new blank query to see how the solution works.

If this post helps or solves your problem, please mark it as solution (to help other users find useful content and to acknowledge the work of users that helped you)
Kudoes are nice too

Have fun

Jimmy

В М можно вызвать и обработать ошибки во время выполнения. Если из других языков программирования вы знакомы с идеей исключения, обработка ошибок Power Query отличается по крайней мере одним существенным моментом.[1]

Предыдущая заметка     Следующая заметка

Рис. 1. Три поля записи error; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке

Скачать заметку в формате Word или pdf, примеры в формате Excel

Сообщение об ошибке

В Power Query каждое выражение должно что-то возвращать. Как правило, это значение. Но выражение также может вызвать ошибку – особый способ указать, что не получилось вернуть значение. Один из способов вызвать ошибку – создать запись с ключевым словом error. Такая запись имеет три поля: причина, сообщение и подробности. Поля с любыми другими именами будут проигнорированы.

Листинг 1[2]

= error [

Reason = «Business Rule Violated»,

Message = «Item codes must start with a letter»,

Detail = «Non-conforming Item Code: 456»

]

Все три поля являются необязательными. Если поле Reason отсутствует, причина ошибки будет иметь значение по умолчанию – Expression.Error. Запись ошибки можно также создать с помощью функции Error.Record. В отличие от описанного выше подхода, в Error.Record атрибут Reason является обязательным.

Листинг 2

= error Error.Record(

«Business Rule Violated»,

«Item codes must start with a letter»,

«Non-conforming Item Code: 456»

)

Оба приведенных выше примера приводят к эквивалентной ошибке, изображенной на рис. 1 Глядя на рисунок, видно, как три поля/параметра соотносятся с отображаемым сообщением.

Вместо записи error также может принимать строку. Результирующее сообщение об ошибке будет иметь значение предоставленной строки, а его причина – значение Expression.Error.

Листинг 3

Рис. 2. Строка в error

Ярлык с многоточием

Существует также оператор быстрого доступа для создания ошибок, который пригодится во время разработки. Допустим, вы хотите протестировать запрос, часть кода которого еще не написана. Поскольку каждое выражение должно возвращать значение, или вызывать ошибку, вы не можете протестировать свой запрос, не поместив что-то в качестве заполнителя в нереализованные участки кода. Используйте оператор многоточия (…). При вызове … выдает ошибку Expression.Error: Значение не задано. Вот фрагмент кода, в котором не реализована ветвь else:

Листинг 4

let

a = 6,

Result = if a = 5 then true else ...

in

Result

Когда условие (а = 5) принимает значение false, вызывается «…», что приводит к ошибке. Обратите внимание, ключевое слово error не используется. Оператор многоточия как определяет, так и вызывает ошибку.

Особое поведение

Что именно происходит, когда возникает ошибка? Какое поведение возвращает ошибку, а не значение? Рассмотрим выражение:

В обычных условиях сначала выполняется функция GetValue(). Затем полученное значение передается в someFunction(), которая возвращает финальный результат. Предположим, GetValue() выдает ошибку. Дальнейшее выполнение выражения прекращается. someFunction() не вызывается. Ошибка GetValue() становится итогом выражения. Такое поведение также известно, как повышение. Ошибка передается тому шагу, с которого была вызвана someFunction().

Дальнейшее зависит от того, предусмотрено ли в коде появление ошибки. Если да, запрос продолжит выполнение. Если нет, возникнет ошибка верхнего уровня. Запрос завершит работу и вернет значение ошибки.

Сдерживание ошибок

Если ошибка возникает в выражении, которое что-то определяет (поле записи, ячейку таблицы, переменную в выражении let, …), ошибка содержится в этом чём-то. Последствия ошибки ограничены этим чем-то и логикой, которая пытается получить доступ к значению этого чего-то. Ниже последствия ошибки GetValue содержатся в той части запроса, на которую она повлияла. Ошибка не остановила выполнение запроса. Запрос завершился успешно и вернул запись. Два поля – FieldB и FieldC – вернули ошибку, потому что они являются чем-то, затронутым ошибкой.

Листинг 5

let

GetValue = () => error «Something bad happened!»,

DoSomething = (input) => input + 1,

Result = [

FieldA = 25,

FieldB = DoSomething(GetValue),

FieldC = FieldA + FieldB

]

in

Result

Рис. 3. Результат запроса

Сдерживание ошибок влечет за собой еще одну особенность. Ошибка сохраняется в чём-то, что ее содержит. Пока выполняется запрос, любая попытка получить доступ к значению этого чего-то приводит к повторному возникновению сохраненной ошибки. Когда происходит попытка доступа, логика, которая первоначально вызвала ошибку, не подвергается повторной оценке. Эта логика при повторном обращении могла бы вернуть допустимое значение. Но логика пропускается, и ранее сохраненная ошибка просто вызывается повторно.

Ниже функция GetDataFromWebService() вычисляется один раз, даже если к самим данным обращаются дважды. Если первое обращение вернуло ошибку, второе обращение тоже вернет  ошибку, сохраненную ранее.

let

Data = GetDataFromWebService() // повышенная ошибка

in

{ List.Sum(Data[Amount]), List.Max(Data[TransactionDate]) }

Ошибки верхнего уровня

Если ошибку не удалось сдержать, она передается из выражения в верхний уровень, как результат всего запроса. Далее в среду хоста и выполнение запроса останавливается. В следующем выражении ничто не содержит ошибку, поэтому её нельзя сдержать, и запрос завершается ошибкой:

Листинг 6

let

GetValue= () => error «Something bad happened!»,

SomeFunction = (input) => input + 1

in

SomeFunction(GetValue())

Сдерживание против исключения

Поведение Power Query по сдерживанию ошибок отличает его от большинства языков программирования, основанных на исключениях. В мире исключений ошибка автоматически распространяется вплоть до среды хоста, что приводит к завершению работы программы (если только в коде не будет предусмотрена обработка ошибок). В M ошибка локализуется, пока есть что-то, что ее содержит. Это позволяет успешно завершить запрос, даже если не удалось вычислить отдельные элементы.

Сдерживание ошибок – отличное поведение, учитывая цель использования M: обработка данных. Предположим, что выражение, определяющее значение столбца таблицы, содержит ошибку для одной ячейки из всей таблицы. В мире, основанном на исключениях, эта ошибка может привести к завершению всей обработки. В мире M ошибка просто влияет на эту единственную ячейку и любой код, который обращается к этой ячейке. Обработка продолжается, и будет получен результат.

На самом деле, из-за лени M, если к ячейке с ошибкой не будет обращений, то ошибка и не возникнет.

Листинг 7

let

Data = #table({«Col1»}, {{«SomeValue»}, { error «bad» }})

in

Table.RowCount(Data) // возвращает 2

Хотя одна ячейка и содержит ошибку, запрошенные данные (количество строк), не требуют вычисления значения ошибочной ячейки, поэтому выражение вернет значение 2.

Хотя сдерживание ошибок – отличное поведение по умолчанию, что, если оно не соответствует вашим потребностям? В частности, что делать с таблицами, если важно различать строки с ошибками и строки без ошибок? Возможно, вы не обращаетесь к содержимому строки напрямую, поэтому не делаете ничего, что могло бы вызвать распространение ошибок, но все же хотите знать, в каких строках есть ошибка, а в каких нет. Функции Table.SelectRowsWithErrors и Table.RemoveRowsWithErrors, то, что вам нужно.

Листинг 8

let

Data = #table({«Col1»}, {{«SomeValue»}, { error «bad» }})

in

[

RowsWithErrors = Table.RowCount(Table.SelectRowsWithErrors(Data)),

RowsWithoutErrors = Table.RowCount(Table.RemoveRowsWithErrors(Data))

]

Рис. 4. Список, содержащий количество строк с ошибками и без

Обработка ошибок

Понимая, какие операции способны вызывать ошибку, вы можете использовать ключевое слово try, чтобы проверить, не возвращает ли выражение ошибку. try используется в двух вариантах…

try ExpressionToTry otherwise FallbackExpression

… первый, try with otherwise, пытается выполнить ExpressionToTry. Если это выражение возвращает значение, всё Ok, переходим к следующему шагу запроса. Когда выражение выдает ошибку, вычисляется выражение otherwise и возвращается его значение.

try Number.FromText(input) otherwise 0

Если Number.FromText возвращает значение, оно и будет результатом выражения. Когда Number.FromText выдает ошибку, try обращается к части otherwise, и возвращает 0. Другими словами, если входные данные могут быть преобразованы в число, возвращается это число; в противном случае возвращается значение по умолчанию – 0.

Имейте в виду, что ошибки будут обработаны только в выражении, расположенном непосредственно справа от try. Если ошибку возвращает выражение otherwise, эта ошибка не будет обработана предшествующим try. Но… поскольку otherwise само по себе является выражением, try можно поместить внутрь него, чтобы обработать ошибку, вызванную otherwise.

try GetFromPrimary()

otherwise try GetFromSecondary()

otherwise «Возникли проблемы с обоими серверами. Возьми отгул на остаток дня :)»

Проблема с конструкцией try with otherwise в том, что она неразборчива: любая ошибка возвращает альтернативное значение. Иногда последующие действия зависят от типа ошибки. Для этих ситуаций подойдет второй вариант – простое выражение try.

Эта форма всегда возвращает запись. Если выражение завершилось успешно, эта запись имеет вид:

[

HasError = false,

Value = (значение выражения ExpressionToTry)

]

Если выражение вызвало ошибку, возвращаемая запись выглядит следующим образом:

[

HasError = true,

Error = (запись, описывающая возникшую ошибку)

]

Например:

Листинг 9

let

DoSomething = () => 45,

Result = try DoSomething()

in

Result // [HasError = false, Value = 45]

Рис. 5. Запись, возвращаемая try, если нет ошибки

Листинг 10

let

DoSomething = () => error «bad»,

Result = try DoSomething()

in

Result // [HasError = true, Error = [Reason = «Expression.Error», Message = «bad», Details = null]

Рис. 6. Запись, возвращаемая try, если есть ошибка

Запись, помещенная в поле Error, содержит ровно три поля: Reason, Message и Details.[3] Это верно, даже если в записи, первоначально использовавшейся для определения ошибки, отсутствовало одно или несколько из этих полей (помните, они необязательны при определении ошибки), или если она включала дополнительные поля.

Запись, возвращаемая try, может быть использована для реализации логики условного исправления. Следующий код обращается к вторичному источнику данных, если первичный выдает ошибку из-за недоступности сервера.

let

Primary = try GetDataFromPrimary(),

Source =

if Primary[HasError] = false then Primary[Value]

    /* если Primary возвращает значение, используй его */

else if Primary[Error][Reason] = «External Source Error»

and Primary[Error][Message] = «Server is unreachable»

    then GetDataFromSecondary()

    /* если ошибка Primary вызвана тем, что его источник недоступен,

            запроси данные с сервера Secondary */

else error Primary[Error]

    /* если Primary вернул иную ошибку, верни её

            в качестве результата запроса */

in

Source

Используя try with otherwise, мы бы запросили Secondary, если Primary выдаст любую ошибку, а не только когда основной сервер недоступен:

try GetDataFromPrimary()

otherwise GetDataFromSecondary()

Масштаб (область действия)

Обработка ошибок должна происходить на уровне, на котором они возникают. Нельзя обработать ошибки, содержащиеся на другом уровне.

let

Data = #table({«Amount»}, {{10}, {error «help!»}, {error «save me!»}})

in

try Data otherwise 0

try – бесполезный оператор в этом запросе. Возможно, разработчик надеялся с помощью try заменить ошибки нулями. Но в этом случае Data возвращает допустимую таблицу. Правда, в ней самой есть ячейки с ошибками, но эти ошибки содержатся на уровне ячеек. Поскольку они не влияют на выражение данных на уровне таблицы, try не дает эффекта.

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

Листинг 11

let

Data = #table({«Amount»}, {{10}, {error «help!»}, {error «save me!»}})

in

try List.Sum(Data[Amount]) otherwise 0

List.Sum суммирует значения в столбце [Amount] таблицы Data. Если выражение, определяющее значение элемента, вызывает ошибку, она повышается. List.Sum прекращает суммирование и возвращает ошибку. try обрабатывает эту ошибку, возвращая 0 вместо суммы элементов списка. Скорее всего, цель у разработчика была иная. Он хотел заменить элементы с ошибками на 0, и суммировать числовые значения. Необходимо применить try так, чтобы обработка ошибок велась на уровне ячеек таблицы. Кажется, что можно сделать так:

Table.TransformColumns(Data, (input) => try input otherwise 0)

Однако, эта логика не улавливает ошибки, вызванные выражениями значений ячеек. Дело в том, что аргументы вычисляются до того, как их значения будут переданы в функцию. Если оценка приводит к ошибке, функция не вызывается. Вместо этого ошибка передается шагу, который вызвал функцию. В нашем случае, если выражение значения столбца выдает ошибку, функция преобразования (input) => … не вызывается, поэтому try не может обработать ошибку. Вместо этого ошибка передается обратно в Table.TransformColumns.

Проблема заключается в том, что выражение значения ячейки должно быть вычислено внутри try. Чтобы добиться этого, надо вернуться на уровень строки, и использовать функцию, которая получает строку. Затем внутри функции использовать ссылку на значение столбца строки и вот его подставить в try. Лишь тогда try сможет обработать ошибку. Чтобы реализовать это, нужно создать новый столбец, значения которого формировать путем проверки try. Затем можно удалить исходный столбец, а новому столбцу дать старое имя.

Листинг 12

let

Data = #table({«Amount»}, {{10}, {error «help!»}, {error «save me!»}}),

ErrorsReplacedWithZero = Table.AddColumn(

Data,

«NewAmount»,

(row) => try row[Amount] otherwise 0

),

RemoveOldAmount = Table.RemoveColumns(ErrorsReplacedWithZero, {«Amount»}),

RenameNewAmount = Table.RenameColumns(RemoveOldAmount, {«NewAmount», «Amount»})

in

List.Sum(RenameNewAmount[Amount]) // возвращает 10

Это довольно сложно. Но пример хорошо иллюстрирует общий подход к использованию try на уровне ячеек. Если же, как в нашем пример, вы просто хотите заменить любую ошибку значением по умолчанию, используйте Table.ReplaceErrorValues.

Листинг 13

let

Data = #table({«Amount»}, {{10}, {error «help!»}, {error «save me!»}}),

ErrorsReplacedWithZero = Table.ReplaceErrorValues(

Data,

{{«Amount», 0}}

) // заменяет ошибки в столбце Amount нулями

in

List.Sum(ErrorsReplacedWithZero[Amount]) // возвращает 10

Применить try к элементам списка сложнее. Для списков нет функции List.ReplaceErrorValues. Самым простым решением может быть преобразование списка в таблицу, обработка ошибки, а затем обратное преобразование таблицы в список.

Листинг 14

let

Data = {10, error «help!», error «save me!»},

#»Преобразовано в таблицу» = Table.FromValue(Data),

#»Замененные ошибки» = Table.ReplaceErrorValues(#»Преобразовано в таблицу», {{«Value», 0}}),

Value = #»Замененные ошибки»[Value],

#»Вычисленная сумма» = List.Sum(Value)

in

#»Вычисленная сумма»

Рис. 7. Сумма элементов списка, содержащего ошибки

Нарушения правил

Вы можете использовать ошибки, как сигнал о несоответствиях. Допустим, вы обрабатываете CSV-файл, где значения в столбце ItemCode должны начинаться с буквы A. В начале запроса вы проверяете это, заменяя несоответствующие значения ошибками. Последующие этапы обработки, которые обращаются к столбцу, будут предупреждены, если они попытаются работать со значениями, нарушающими правила.

let

Data = GetData(), // for testing use: #table({«ItemCode»}, {{«1»}, {«A2»}})

Validated = Table.TransformColumns(

Data,

{

«ItemCode»,

each if Text.StartsWith(_, «A») then _ else error Error.Record(

      «Invalid Data»,

«ItemCode does not start with expected letter»,

_

)

}

)

in

Validated

Такую проверку полезно применить в базовом запросе, на который будут ссылаться несколько других запросов. Это позволит вам выполнить проверку один раз (вспомните принцип Не повторяйся, Don’t repeat yourself), гарантируя, что пользователи, пытающиеся использовать ошибочные данные, будут предупреждены о наличии аномалий.

Другой вариант – добавить столбец со значениями true и false, в зависимости от того, соблюдается ли правило:

let

Data = GetData(), // for testing use: #table({«ItemCode»}, {{«1»}, {«A2»}})

Validated = Table.AddColumn(

Data,

«ValidItemCode»,

each Text.StartsWith(_[ItemCode], «A»),

type logical

)

in

Validated

В этом примере логика заботится о том, является ли ItemCode допустимым. Если разработчик забудет выполнить проверку, неверные данные могут рассматриваться как действительные. В отличие от этого, подход замены несоответствующих данных ошибками гарантирует, что попытка получить доступ к недопустимому значению, закончится ошибкой. Пользователь будет вынужден поправить данные в источнике. Какой вариант выбрать, зависит от вашего контекста.

В следующей заметке

Я планирую рассказать о том, что остается за кулисами: организации разделов кода и о том, как M предоставляет возможность аннотировать значения дополнительной информацией (метаданными). Однако перед этим обсудим, как работает система типов в Power Query.

[1] Заметка написана на основе статьи Ben Gribaudo. Power Query M Primer (Part 15): Error Handling. Если вы впервые сталкиваетесь с Power Query, рекомендую начать с Марк Мур. Power Query.

[2] Номер листинга соответствует номеру запроса в приложенном Excel файле.

[3] Судя по рис. 6 современная реализация M создает пять полей.

Замените все значения ошибок для всех столбцов после импорта данных (при сохранении строк)

Вопрос:

Таблица Excel в качестве источника данных может содержать значения ошибок (#NA, # DIV/0), которые могут нарушить некоторые последующие этапы процесса преобразования в Power Query.
В зависимости от следующих шагов мы можем получить не вывод, а ошибку. Так как же справиться с этим делом?

Я нашел два стандартных шага в Power Query, чтобы поймать их:

  • Удалить ошибки (интерфейс: Главная/Удалить строки/Удалить ошибки) → все строки с ошибками будут удалены
  • Заменить значения ошибок (UI: Transform/Replace Errors) → столбцы должны быть сначала выбраны для выполнения этих операций.

Первая возможность для меня не является решением, так как я хочу сохранить строки и просто заменить значения ошибок.

В моем случае моя таблица данных будет меняться со временем, это означает, что имя столбца может измениться (например, годы) или появятся новые столбцы. Так что вторая возможность слишком статична, так как я не хочу каждый раз менять скрипт.

Поэтому я попытался получить динамический способ очистки всех столбцов, независимо от имен столбцов (и количества столбцов). Он заменяет ошибки на нулевое значение.

let
Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],

//Remove errors of all columns of the data source. ColumnName doesn't play any role
Cols = Table.ColumnNames(Source),
ColumnListWithParameter = Table.FromColumns({Cols, List.Repeat({""}, List.Count(Cols))}, {"ColName" as text, "ErrorHandling" as text}),
ParameterList = Table.ToRows(ColumnListWithParameter ),
ReplaceErrorSource = Table.ReplaceErrorValues(Source, ParameterList)
in
ReplaceErrorSource

Вот разные три сообщения с запросами, после того как я добавил два новых столбца (с ошибками) к источнику:

Если у кого-то есть другое решение для такой очистки данных, напишите здесь.

Лучший ответ:

let
    src = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    cols = Table.ColumnNames(src),
    replace = Table.ReplaceErrorValues(src, List.Transform(cols, each {_, "!"}))
in
    replace

1 Power Query Ошибки №1. Измененный тип, Неверная фильтрация в UI Почему возникает ошибка Expression.Error Столбец таблицы не найден? Одна из причин — шаг Измененный тип.
Почему в вашей итоговой таблицы не все данные, которые должны там оказаться? Вероятно вы совершили ошибку неверной фильтрации в пользовательском интерфейсе. 2 Power Query Ошибки №2. Фиксированная ширина столбца Excel В этом уроке вы узнаете как отключить автоматическое определение ширины столбцов таблицы Excel при обновлении запроса Power Query. 3 Power Query Ошибки №3. Formula Firewall, запрос ссылается на… Вы работаете в Power Query, но при попытке обновить все возникает ошибка Formula Firewall, запрос ссылается на… Что делать? Как исправить? 4 Power Query Ошибки №4. Доступ к веб-содержимому В этом уроке вы узнаете как избавиться от надоедливого окна доступ к веб-содержимому. 5 Power Query Ошибки №5. Количество столбцов CSV При импорте CSV получается неверное количество столбцов. 6 Power Query Ошибки №6. Не получается изменить тип данных (DataFormat.Error) При попытке изменить тип данных с текстового на дату возникает ошибка DataFormat.Error. 7 Power Query Ошибки №7. Разные имена листов В этом уроке мы решим проблему, когда в ваших источниках нужные вам данные находятся всегда на листах с разными именами. 8 Power Query Ошибки №8. Разные имена листов 2 В этом уроке мы другими способами решим проблему, когда в ваших источниках нужные вам данные находятся всегда на листах с разными именами. 9 Power Query Ошибки №9. Разные имена столбцов, Table.TransformColumnNames В этом уроке мы разберем проблему, когда нам присылают файлы, в которых всегда столбцы названы по-разному. 10 Power Query Ошибки №10. Как развернуть все столбцы В этой задаче мы научимся разворачивать все столбцы табличного столбца не перечисляя каждый из них хардкодом. 11 Power Query Ошибки №11. Подключиться к последнему файлу В этом уроке мы научимся подключаться к самому свежему файлу из нужной нам папки с нужным названием. 12 Power Query Ошибки №12. Консолидация и MissingField.Type Бывает вы ходите выполнить добавление таблиц друг под другом с предварительной обработкой, но получаете ошибку Expression.Error: Столбец таблицы не найден. 13 Power Query Ошибки №13. Удалить пустые столбцы Как без хардкода автоматически удалить пустые столбцы в Power Query, которые есть в импортируемой таблицы. Разберем 2 способа. Один из них прост до безобразия, а для второго понадобится функция Table.Profile. 14 Power Query Ошибки №14. Удалить лишние пробелы В этом уроке мы разберем еще 1 способ удалить лишние пробелы в текстовом столбце Power Query. Для этого мы повторим и изучим несколько новых функций.
Text.SplitAny
List.Select
Character.FromNumber
Text.Combine 15 Power Query Ошибки №15. Плохо структурированный TXT Как быть, если текстовый файл разбивается на столбцы неправильно? 16 Power Query Ошибки №16. При округлении не совпадает общая сумма Разберем ошибку, которая возникает при необходимости разбить число на определенные доли, а результаты округлить до двух знаков после запятой. В такой ситуации может получиться, что сумма слагаемых не будет равняться исходному числу. 17 Power Query Ошибки №17. Удаление дубликатов, Подводные камни Table. Distinct Что может пойти не так при использовании функции удаления дубликатов. 18 Power Query Ошибки №18. Удаление дубликатов 2, Подводные камни Table. Distinct Что может пойти не так при использовании функции удаления дубликатов. Другое решение данной проблемы. 19 Power Query Ошибки №19. Неверная разбивка на столбцы При импорте данных из CSV или TXT разбивка на столбцы происходит неправильно. 20 Power Query Ошибки №20. Пустая таблица при импорте Excel (XLSX, XLS) Вы пытаетесь подключиться к книге Excel, но импортируется пустая таблица. 21 Power Query Ошибки №21. Подключение к PostgreSQL, Установка драйвера Вы пытаетесь подключиться к PostgreSQL и получаете ошибку «Перед использование этого соединителя необходимо установить один или несколько дополнительных компонентов»

На чтение 17 мин. Просмотров 59.4k.

Есть одна вещь, которая волнует всех — как сэкономить больше времени и работать с умом.

Что ж, я уже давал много приемов и трюков Excel, которые значительно облегчат работу. Но сегодня речь пойдет о POWER QUERY. Да-да, вы все правильно поняли.

POWER QUERY — это то, что может изменить вашу жизнь. Сегодня в этой статье я поделюсь с вами некоторыми удивительными приемами Power Query, которые вы можете начать использовать прямо сейчас.

Эти советы не только помогут вам сэкономить время, но и вдохновят вас использовать POWER QUERY для управления данными. По крайней мере, я на это надеюсь.

Прежде чем мы перейдем к приемам, нужно прояснить пару моментов.

Содержание

  1.  Почему я должен использовать Power Query?
  2. Как установить Power Query — Шаги
  3. Лучшие 25 приемов Power Query для экономии времени в повседневной работе
  4. Заключение

 Почему я должен использовать Power Query?

Делюсь с вами некоторыми серьезными причинами, так как хочу, чтобы вы в дальнейшем изучали Power Query.

1. Самый простой способ преобразовать ваши данные

Одной из основных причин использования Power Query — легкость преобразования данных. Обычно вы используете формулы и сводные таблицы, но с Power Query все основные задачи формирования данных могут быть выполнены в кратчайшие сроки.

2. Power Query в реальном времени

Это вторая важная причина, по которой Power Query выполняется в реальном времени, как разовая настройка.

Напишите запрос один раз, и вы можете обновлять его каждый раз, когда происходит изменение данных, также вы можете определить время автоматического обновления (Совет № 26).

3. Нужно просто несколько кликов

Как я уже сказал, обычно вы используете формулы и сводные таблицы для преобразования данных, но с POWER QUERY вы можете многое сделать, просто щелкнув мышью.

Нет необходимости писать формулы или коды.

Как установить Power Query — Шаги

Прежде чем вы начнете использовать эти приемы, в вашем Excel должен быть установлен Power Query.

И если вы один из тех пользователей Excel, у которых нет надстройки с Power Query, используйте эти шаги для ее установки.

Для Excel 2016 или Office 365:

Если вы используете версию Excel 365 или Excel 2016, она уже находится на вкладке «Данные» — «Скачать & преобразовать».

Power query в ленте

Для версий 2013 и 2010:

Прежде всего, загрузите надстройку отсюда (официальный сайт Microsoft).Как только вы загрузите файл, откройте его и следуйте инструкциям. После этого автоматически откроется вкладка «Power Query» на ленте Excel.
Если вкладка «POWER QUERY» не появляется, вам не о чем беспокоиться.

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

  • Перейдите на вкладку «Файл» ➜ «Параметры» ➜ «Надстройки».
  • В опциях «Надстройки» выберите «Надстройки COM» и нажмите Перейти.
  • После этого отметьте галочкой «Microsoft Power Query for Excel».
  • В конце нажмите ОК.

Все! Теперь у вас есть новая вкладка на ленте с названием «Power Query».

Откройте Power Query и загрузите в него данные

У вас есть разные способы добавить данные в редактор Power Query. Что ж, если у вас есть данные на рабочем листе, вы можете вставить их оттуда.

  • Перейдите на вкладку «Данные» ➜ «Скачать & преобразовать» ➜ Из таблицы.
  • Нажмите OK, чтобы преобразовать этот диапазон в таблицу Excel.
  • И сразу после этого вы получите эту таблицу в редакторе Power Query, как показано ниже.

Лучшие 25 приемов Power Query для экономии времени в повседневной работе

Теперь пришло время изучить все эти советы по Power Query. Так что давайте начнем.

1. Заменить значения

У нас есть список с некоторыми значениями, и нам нужно заменить определенное значение или некоторые значения чем-то другим.

С помощью Power Query мы можем создать запрос и заменить эти конкретные значения очень быстро. В приведенном ниже списке я хочу заменить имя «Алена» на «Алёна».

Заменить значение

Давайте сделаем:

  • Прежде всего, загрузите список в редактор Power Query.
  • После этого перейдите на вкладку «Преобразование» и нажмите «Замена значений».
Вкладка Преобразование
  • Теперь в поле «Значение для поиска» введите «Алена», а в поле «Заменить на» введите «Алёна» и после этого нажмите ОК.
Замена значения
  • После того, как вы нажмете OK, все значения будут заменены новыми. Теперь можно нажать «Закрыть и загрузить», чтобы загрузить данные в таблицу.
Загрузка данных

А вот и лучшая часть: Вы только что создали запрос в режиме реального времени. При повторном обновлении запроса он заменит все вновь введенные значения.

2. Сортировка — по возрастанию и по убыванию

Как и при обычной сортировке, вы можете сортировать данные, используя Power Query. Я использую тот же список имен, который мы использовали выше. Вот, что нужно сделать.

  • Прежде всего, загрузите данные в редактор
  • В редакторе Power Query у вас есть две кнопки сортировки (по возрастанию и по убыванию).
  • Нажмите на любую из этих кнопок, чтобы отсортировать.

Сортировка

  • В конце нажмите «Закрыть и загрузить», чтобы загрузить данные в таблицу.

Вы, наверное, удивлены: «Зачем мне использовать Power Query, если я могу использовать обычную сортировку на листе?»

Как я уже писал, Power Query — работает в реальном времени. Вы можете создать запрос автообновления (Совет № 26), который будет обновляться через определенное время и автоматически сортировать ваши данные.

3. Удалить столбцы

Очень часто бывает, что вы получаете откуда-то данные, и вам нужно удалить некоторые столбцы из них. Дело в том, что вы должны удалять эти столбцы каждый раз, когда добавляете новые данные.

Но с Power Query вы можете создать запрос.

Вот шаги:

  • Прежде всего, откройте данные в редакторе
  • После этого выберите столбец или несколько столбцов
Выбрать несколько столбцов
  • Теперь щелкните правой кнопкой мыши и выберите «Удалить».
Удалить столбцы
  • В конце нажмите «Закрыть и загрузить», чтобы загрузить данные.

Совет. Также имеется опция «Удалить другие столбцы», в которой можно удалить все невыбранные столбцы.

4. Разделить столбец

Точно так же как опция как «Текст по столбцам» есть в запросе: «Разделить столбец». Сейчас я расскажу, как это работает.

В приведенном ниже списке у вас есть имя и фамилия с дефисом между ними.

Список сотрудников

Теперь вам нужно разделить их на две колонки. Используйте эти шаги:

  • Прежде всего, откройте список в редакторе
  • После этого выберите столбец и перейдите на вкладку «Преобразование» ➜ «Разделить столбец» ➜ «по разделителю».
Разделить столбец
  • Выберите «Пользовательский» из выпадающего списка и введите «-» в него.
  • Теперь у вас есть три варианта, как разбить столбец.
  1. Самый левый разделитель
  2. Самый правый разделитель
  3. По каждому вхождению разделителя
Разделить столбец по разделителю

Поскольку у нас есть только один разделитель в ячейке, все три будут работать одинаково, но если у вас более одного разделителя, вы можете выбрать нужный.

Итог разделения столбца
  • В конце нажмите OK и нажмите «Закрыть и загрузить», чтобы загрузить данные.

5. Переименовать столбец

Вы можете просто переименовать столбец, щелкнув правой кнопкой мыши, а затем нажмите «Переименовать».

Переименовать столбец

Совет: допустим, у вас есть запрос на переименование столбца, а кто-то другой переименовал его по ошибке. Вы можете восстановить это имя одним щелчком мыши.

6. Дубликат столбца

В Power Query есть простой способ создать дубликат столбца.

Дубликат столбца

Все, что вам нужно сделать, это щелкнуть правой кнопкой мыши столбец, для которого вам нужен дубликат, а затем нажать «Создать дубликат столбца».

7. Объединить столбец

Обычно для объединения столбцов и ячеек мы используем формулы в Excel, но с Power Query это можно сделать намного проще.

Помните, мы разделили список сотрудников (Совет № 4). Теперь, давайте объединим его, используя пробел.

Следуй этим шагам:

  • Как только вы добавите данные в редактор, выберите оба столбца.
  • После этого щелкните по ним правой кнопкой мыши и выберите «Объединить столбцы».
Кнопка объединения столбцов
  • Теперь в окне слияния столбцов выберите разделитель из выпадающего списка (здесь мы используем пробел) и добавьте имя для нового объединенного столбца.
Объединить столбцы
  • Нажмите OK и загрузите данные в таблицу.

Совет: вы также можете использовать собственный разделитель для объединения двух столбцов.

8. Транспонировать столбец или строку

В Power Query транспонирование — это проще простого. Да, всего один клик.

  • Как только вы загрузите данные в редактор, вам просто нужно выбрать столбец (столбцы) или строку (и).
  • Перейдите на вкладку «Преобразование» ➜ Таблица ➜ «Транспонировать».
Транспонирование

И все.

9. Заменить / удалить ошибки

Это крутая вещь. Обычно для замены или удаления ошибок в Excel вы можете использовать опцию поиска и замены или код VBA. Но в Power Query все намного проще.

Посмотрите на столбец ниже, где у вас есть некоторые ошибки, вы можете заменить их.

Заменить ошибки

Когда вы щелкнете правой кнопкой мыши по столбцу, у вас будет два варианта, как с ними справиться.

  • Заменить ошибки
  • Удалить ошибки
Варианты замены ошибки

10. Изменить тип данных

Посмотрите, это обычное дело: У вас есть данные в столбце, но они не в нужном формате. Поэтому каждый раз нужно менять его формат.

неверный формат даты

В приведенном выше примере у нас есть столбец дат, но мы видим просто числа. Чтобы преобразовать их в дату, вы можете использовать Power Query. Это очень просто.

  • Прежде всего, откройте данные в редакторе
  • После этого выберите столбец и перейдите на вкладку Преобразование.
  • Теперь из типа данных выберите «Дата».
Выбор типа данных

Вот, что получилось.

Замена типа данных

Совет: в большинстве случаев Power Query автоматически определяет тип данных, но если это не так, вы можете изменить его, как в приведенном выше примере.

11. Добавить столбец из примеров

Вот в чем дело: в Power Query есть возможность добавить образец столбца, который на самом деле не является образцом, связанным с текущим столбцом. Позволь мне привести пример:

В приведенном выше примере мы преобразовали числа в даты, и теперь предположим, что вам нужно добавить столбец, в котором необходимо указать название дня недели для этих дат.

Вместо использования формулы или любого другого параметра, в Power Query мы можем использовать параметр «Добавить столбец из примеров».

Вот как это сделать:

  • После того, как вы отправите свои данные в редактор, выберите столбец.
  • Потом щелкните по нему правой кнопкой мыши и выберите «Добавить столбец из примеров».
Добавить столбец из примеров
  • Здесь вы получите пустой столбец. Нажмите на первую ячейку столбца, чтобы получить список значений, которые вы можете вставить.
Пустой столбец
  • Выберите «Название дня недели с Дата» и нажмите «ОК».
Выбор значения

Все! Столбец заполнен.

Столбец заполнен

12. Отменить таблицу

Я написал полное пошаговое руководство, чтобы отменить вывод данных в виде таблицы с помощью Power Query:

  • Прежде всего, выберите данные кросс-таблицы и перейдите на вкладку «Данные».
Кросс-таблица
  • На вкладке данных перейдите к Скачать & Преобразовать → Из таблицы.
  • Когда вы щелкнете по нему, он преобразует ваши данные кросс-таблицы в таблицу Excel (если это уже не так).
  • Данные мгновенно загрузятся в редактор Power Query.
Вид таблицы в Power Qwery
  • Отсюда нам нужно выбрать все столбцы, которые мы хотим отключить.
  • Для этого выберите столбец Янв, нажмите и удерживайте клавишу Shift и выберите столбец Дек.
  • После этого щелкните по нему правой кнопкой мыши и выберите «Отменить свертывание столбцов».
Отменить свертывание столбцов
  • Теперь все значения 12-ти столбцов разделены на два столбца. В одном — месяц, в другом — сумма.
Свертывание столбцов отменено
  • Последнее, что вам нужно сделать, это переименовать столбцы. Для этого щелкните правой кнопкой мыши по столбцу и переименуйте их.
  • В конце нажмите «Закрыть и загрузить».

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

13. Изменить регистр

Как в функциях, которые вы используете в Excel, в Power Query есть пакет опций для изменения регистра текста.

  • нижний регистр
  • ВЕРХНИЙ РЕГИСТР
  • Каждое Слово С Прописной

Вы можете сделать это, щелкнув правой кнопкой мыши по столбцу и выбрать любой из трех указанных выше вариантов. Или перейдите на вкладку «Преобразование» ➜ «Столбец Текст» ➜ «Формат».

Изменить регистр

14. Усечь и Очистить

Чтобы очистить данные или удалить ненужные пробелы, вы можете использовать опции Усечь и Очистить в Power Query.

Шаги просты:

  • Щелкните правой кнопкой мыши по столбцу или выберите все столбцы, если у вас несколько столбцов.
  • Перейдите к опции преобразования и выберите любую из опций:
Усечь и очистить
  1. Усечь: для удаления лишних пробелов из ячейки.
  2. Очистить: для удаления непечатаемых символов из ячейки.

15. Добавить префикс / суффикс

Итак, у вас есть список значений, и в этот список вы хотите добавить префикс / суффикс в каждую ячейку. В Excel вы можете использовать функцию СЦЕПИТЬ, но в Power Query есть более простой способ.

  • Прежде всего, выберите столбец, в который нужно добавить префикс / суффикс.
  • Затем перейдите на вкладку «Преобразование» ➜ Столбец Текст ➜ Формат ➜ Добавить префикс / Добавить суффикс.
Добавить префикс и суффикс
  • Как только вы нажмете одну из опций, откроется диалоговое окно для ввода текста.
Добавление префикса
  • После ввода текста нажмите ОК.
Добавление префикса

Опция работает одинаково для чисел, текста и дат.

16. Извлечь значения

Если вы разбираетесь в формулах, то вы согласитесь со мной, что для извлечения текста или числа из ячейки необходимо комбинировать несколько функций. Power Query решает много подобных задач. У вас есть семь способов извлечь значения из ячейки. И да, одним щелчком мыши.

Просто посмотрите на варианты, которые у вас есть.

Варианты извлечения значений

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

17. Только дата или время

Часто бывает, что у вас есть дата и время в одной ячейке, но вам нужна только одна из них.

Дата и время

Для этого в Power Query вам нужен всего лишь один клик, вот шаги.

  • Выберите столбец, где у вас есть дата и время вместе.
  • Если вам нужна Дата: щелкните правой кнопкой мыши ➜ Преобразование ➜ Только дата;
  • Если хотите Время: щелкните правой кнопкой мыши ➜ Преобразование ➜ Только время.
Только дата или время

18. Объедините дату и время

Теперь у вас есть отдельно дата и время. Значит, пора узнать, как их объединить.

Это довольно просто.

  • Прежде всего, загрузите ваши данные в редактор.
Данные дат и времени
  • После этого выберите оба столбца (Дата и время) и перейдите на вкладку преобразования.
Объединить дату и время
  • Теперь из группы Столбец «Дата и время» перейдите к «Дата» и нажмите «Объединить дату и время».
Объединить дату и время

Теперь у вас есть новый столбец с объединенным данными.

19. Округление чисел

У нас есть функции для округления чисел в Excel, но также есть и Power Query.

Вот варианты:

  1. Округление с увеличением.
  2. Округление с уменьшением.
  3. Округление: Вы можете выбрать, до какого знака после запятой округлить.
Варианты округления

Шаги:

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

Примечание. Когда вы выбираете опцию «Округление», вам нужно ввести количество десятичных знаков для округления.

20. Расчеты

В Power Query есть варианты, которые вы можете использовать для выполнения расчетов. Посмотрите на приведенный ниже список.

  • Стандартный
  • Статистика
  • Научный
  • Тригонометрические
  • Округление
  • Информация
Варианты расчетов

Вы можете найти все эти опции на вкладке Преобразование.

Для выполнения любого из этих расчетов вам нужно выбрать столбец и выбрать опцию.

21. Группировка

Как и сводные таблицы, Power Query — отличный вариант для группировки. Вы можете найти эту опцию на вкладке Преобразование.

Допустим, у вас большой набор данных и вы хотите создать сводную таблицу. Вот что вам нужно сделать:

  • На вкладке «Преобразование» нажмите «Группировать по», откроется диалоговое окно.
Группировать по
  • Теперь в этом диалоговом окне выберите столбец, который вы хотите сгруппировать.
Столбец для группировки выделен

После этого добавьте имя, выберите операцию и столбец, в котором у вас есть значения.

Диалоговое окно Группировать по
  • В конце нажмите ОК.
Результат группировки

Примечание. В параметре «Группировать по» также есть несколько расширенных опций, которые можно использовать для создания многоуровневой групповой таблицы.

22. Удалить знак отрицания

Есть много методов удаления отрицательного знака, и один из них — это Power Query.

Щелкните правой кнопкой мыши по столбцу и перейдите в Преобразование, а затем нажмите на Абсолютное значение.

Абсолютное значение

23. Добавить настраиваемый столбец

Хотя в Power Query есть много опций, вы также можете создать пользовательский столбец, используя формулу расчета. Выполните следующие шаги, чтобы его создать:

  • Прежде всего, перейдите на вкладку Добавление столбца ➜ Настраиваемый столбец.
Настраиваемый столбец
  • Здесь у вас появится диалоговое окно для создания формулы для использования в столбце (сейчас я хочу умножить количество на цену). Ведите формулу в поле формулы.
Формула настраиваемого столбца

Совет. Когда вы вводите формулу, в диалоговом окне появится сообщение, если в формуле есть какая-то ошибка.

24. Автообновление запроса

Из всех советов и приемов, которые я упомянул здесь, этот является наиболее важным. Когда вы создаете запрос, вы можете сделать его автоматическим обновляемым (вы можете установить таймер).

Вот шаги:

  • На вкладке «Данные» нажмите «Существующие подключения»
  • Теперь щелкните правой кнопкой мыши по нужному запросу, далее Изменить свойства подключения.
  • Введите минуты в открывшемся диалоговом окне.
Свойства подключения
  • В конце нажмите ОК.

25. Создайте сводную таблицу из нескольких рабочих книг.

Иногда мы получаем или собираем данные из разных книг. И в этом случае создание сводной таблицы потребует дополнительных усилий для объединения этих нескольких рабочих книг в одну.

Но вы можете сделать это радостью с помощью Power query. Выполните эти три простых шага, чтобы создать сводную таблицу из разных рабочих книг.

У меня есть четыре книги с данными о продажах для разных отделений.

4 исходных файла

Убедитесь, что все эти файлы в одной папке.

Шаг 1 — Объедините файлы с помощью Power Query

Прежде всего, нам нужно объединить все файлы в одну таблицу с Power Query.

  • Перейдите на вкладку «Данные» ➜ «Скачать & Преобразовать» ➜ «Создать запрос» ➜ «Из файла» ➜ «Из папки».
Объединить таблицы в одну
  • Теперь в окне выбора папки нажмите «Обзор» и выберите папку, в которой находятся все файлы.
Путь к папке
  • Нажмите ОК.
  • Вы увидите окно «Объединить файлы».
Лучшие 25 приемов Power Query
  • В этом окне выберите лист с вашими данными во всех книгах. Важно: Убедитесь, что во всех книгах указано одинаковое имя листа!
Выбираем лист с данными
  • После того, как вы нажмете OK, Power Query отправит все данные из рабочих книг в редактор.

Шаг 2 — Подготовка данных для сводной таблицы

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

Дополнительный столбец с именем файла
  • Щелкните правой кнопкой мыши по этому столбцу и выберите «Разделить столбец» ➜ «По разделителю».
Разделить столбец
  • В окне разделителя выберите «Пользовательский», добавьте «.» в качестве разделителя и выберите «Самый левый разделитель».
Рапзделить столбец
  • Нажмите ОК.
  • После этого удалите второй столбец.
Удалить столбец
  • Теперь переименуйте первый столбец.
Переименовать столбец
  • Теперь ваши данные готовы. Нажмите на закрыть и загрузить.

Шаг 3 — Вставьте сводную таблицу

На данный момент у нас есть новая рабочая таблица в рабочей книге с объединенными данными из всех четырех файлов. Теперь пришло время создать из них сводную таблицу.

Полученная таблица
  • Выберите таблицу и перейдите на вкладку «Вставка» и нажмите кнопку «Сводная таблица».
Вставка сводной таблицы
  • Откроется окно создания сводной таблицы. Нажмите OK, и вы получите новую сводную таблицу в своей книге.
Создание сводной таблицы

Поздравляю! Вы успешно создали новую сводную таблицу из разных файлов.

Сводная таблица

Заключение

Вы можете не пользоваться POWER QUERY. Но… Многие вещи, которые мы делаем с формулами и функциями или кодами VBA, могут быть автоматизированы с помощью Power Query.

Я надеюсь, что приведенные выше советы вдохновляют вас использовать его все больше и больше.

Не забудьте поделиться своими мнениями со мной в разделе комментариев. И, пожалуйста, не забудьте поделиться этой информацией со своими друзьями, я уверен, что они это оценят.

Я работаю с данными, импортированными из файла pdf. В импорте Power Query есть дополнительный столбец (Data.Column7), содержащий данные, принадлежащие соседним столбцам с обеих сторон (Data.Column6 и Data.Column8). Столбцы 6 и 8 имеют нулевые значения в ячейках, куда данные были помещены в столбец 7. Я хотел бы заменить нулевые значения в столбцах 6 и 8 правильными данными из столбца 7, оставив все остальные значения в столбцах 6 и 8 как есть. .

Посмотрев на сообщение здесь: Power Query / Power BI — замена null значения со значением из другого столбца

И смотрю это видео: https://www.youtube.com/watch?v=ikzeQgdKA0Q

Я пробовал следующую формулу:

= Table.ReplaceValue(#"Expanded Data",null, each _[Data.Column7] ,Replacer.ReplaceText,{"Data.Column6","Data.Column8"})

(Обратите внимание: «Расширенные данные» — это последний шаг перед этим шагом замены значения.)

Я не получаю никаких синтаксических ошибок, но шаг «Заменить значение» вообще ничего не делает. Мои нулевые значения в столбцах 6 и 8 не были заменены правильными данными из столбца 7.

Мы будем очень благодарны за любое понимание того, как добиться замены. Спасибо.

(Я должен упомянуть, что я новый пользователь Power Query, поэтому, пожалуйста, расскажите подробнее и предположите, что я ничего не знаю!)

2 ответа

Лучший ответ

Я уверен, что должен быть какой-то способ сделать это с помощью функции ReplaceValue, но я думаю, что было бы проще сделать следующее:

1: Создайте новый столбец с определением NewData6 = if [Data.Column6] = null, затем [Data.Column7] else [Data.Column6] 2: Сделайте то же самое для 8: NewData8 = if [Data.Column8] = null, то [Data.Column7] else [Data.Column8] 3: Удалить Data.Column6 / 7/8 4: При необходимости переименовать вновь созданные столбцы.

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


1

Dharman
7 Окт 2021 в 15:14

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

Попробуйте заменить в формуле null на "".


0

Alexis Olson
6 Окт 2021 в 18:54

Недавно мне нужно было сделать очень простую операцию в Power Query. В столбце с числами нужно было выполнить проверку “значение меньше N” и в новом столбце вывести соответствующий текст. Функция дополнительного столбца выглядит примерно так:

= if [Values] < 5 then «A» else «B»

На самом деле некоторые значения – null (то есть пустые):

Данные содержат null и в результате сравнения возникает ошибка

И такая простая операция возвращает ошибку для этих значений!

Почему? Есть некоторая ловушка, спрятанная в глубинах документации (а именно на странице 67 PDF-файла  “Power Query Formula Language Specification (October 2016)”, который можно найти тут.

Если коротко, то вот краткая выжимка из документации:

Значения  
null  можно сравнивать на равенство, но null равен только null:

null = null // true

null = 5 // false

null = true // false

null = false // false

null <> «a» // true

Но если вы хотите сравнить  
null с любым другим значением при помощи относительного оператора (например, <, >, <=, >=), тогда результат сравнения будет не логическое значение типа  
true или 
false, а именно 
null. В разделе “6.7 Relational operators” об этом есть маленькое замечание:

If either or both operands are
null , the result is the
null  value.

Так и в чем уловка? В выражении if…then…else после слова if должно идти логическое значение (например, как результат какого-то сравнения):

if logical_value then do_this else do_that

Когда мы сравниваем (практически любые) значения одного типа, мы в результате получаем логическое значение:
true  или 
false . Но  в случае с  
null  мы получим логическое значение только в случае, если мы сравниваем
null на равенство:

null = SomeValue // true o false

НО если мы сделаем относительное сравнение 
null с SomeValue, тогда результат – НЕ логическое значение (он будет
null), и выражение if…then…else вернет ошибку:

if null > 0 // null, и ‘if null’ возвращает error: null не является logical

then do_this

else do_that // всё вычисление также вернет error

Как избавиться от этой ошибки, если ваши данные содержат
null и замена его на другое значение не подходит вам по каким-либо причинам?

Из сказанного выше очевидно, что мы должны проверить значение на равенство с
null, и только если оно не равно
null – выполнить относительное сравнение.

Нужно построить корректное выражение сравнения, добавив проверку на
null на первое место. В моем случае должно получиться такое выражение:

if [Values] = null

then «C»

else

    if [Values] < 5

    then «A»

    else «B»

Убедитесь, что вы сначала проверяете значения на равенство с 
null ! Выражение if…then…else выполняет последовательное вычисление условий, и если первым условием будет идти относительное сравнение, ошибка снова появится и наследуется до конца расчета выражения:

if [Values] < 5 then // здесь ошибка по-прежнему появляется и передается далее

then «A»

else

    if [Values] = null

    then «C»

    else «B»

Сначала проверяйте на равенство null, иначе ошибка опять появится

Follow me:
Share this:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Power interruption 19 ошибка тахографа
  • Power generation cummins ошибки