Файлы к уроку:
- Для спонсоров Boosty
- Для спонсоров VK
- YouTube
- VK
Ссылки:
- Страница курса
- Плейлист YouTube
- Плейлист ВК
Описание
Мы собираемся импортировать таблицу с этой страницы. Когда мы пытаемся изменить тип данных для столбцов с датой, то возвращается столбец с ошибкой DateFormat.Error.
Решение
Если не получается преобразовать столбец с текстом в дату, то значит в строке присутствуют лишние символы.
С помощь функции Text.Length мы можем убедиться, что длина строки намного больше, чем ожидается. Мы видим 10 символов, но функция возвращает 15.
С помощью функции Text.Start извлечем 1 символ сначала строки. Потом получим код этого символа с помощью функции Character.ToNumber. Получаем 8206.
Далее воспользуемся функционалом замены подстроки и исправляем получившуюся формулу:
Table.ReplaceValue(
get_table,
Character.FromNumber(8206),
"",
Replacer.ReplaceText,
{
"Дата начала купонного периода",
"Дата выплаты купона",
"Дата фиксации списка держателей"
}
)
Примененные функции
- Text.Length
- Text.Start
- Character.ToNumber
- Web.Page
- Web.Contents
- Table.SelectRows
- Table.ReplaceValue
- Character.FromNumber
- Replacer.ReplaceText
- Table.TransformColumnTypes
Код
let
source = Web.Page(
Web.Contents(
"https://www.moex.com/ru/issue.aspx?board=TQCB&code=RU000A102036#/bond_4"
)
),
get_table = Table.SelectRows(
source,
each ([ClassName] = "coupon-payment-schedule__table")
){0}[Data],
cols_replace = Table.ReplaceValue(
get_table,
Character.FromNumber(8206),
"",
Replacer.ReplaceText,
{
"Дата начала купонного периода",
"Дата выплаты купона",
"Дата фиксации списка держателей"
}
),
cols_types = Table.TransformColumnTypes(
cols_replace,
{
{"Дата начала купонного периода", type date},
{"Дата выплаты купона", type date},
{"Дата фиксации списка держателей", type date}
}
)
in
cols_types
Этот урок входит в курс Работа с ошибками в Power Query
Номер урока | Урок | Описание |
---|---|---|
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 и получаете ошибку «Перед использование этого соединителя необходимо установить один или несколько дополнительных компонентов» |
Ну, вариантов масса.
Например, я сталкиваюсь с такой ошибкой при импорте файлов, выгруженных из 1С — что-то там нарушено в XML-схеме документа, и он не читается, пока не откроешь и не сохранишь его в Excel. Поэтому, например, при выгрузке из 1С давно уже не выгружаю в Excel, а сразу в текстовый файл и тяну уже из него.
Вариант 2 — в папке лежит еще что-то. например, какой-то файл открыт, Excel создал временный скрытый файл, и вы пытаетесь его открыть.
Вариант 3 — вместе с файлами Excel лежит что-то вообще не Excel.
Вариант 4 — иногда такое бывает при импорте xlsb
В общем, рекомендую пристально посмотреть на содержимое папки, пооткрывать файлы, поперемещать их — проверить, на чем конкретно ругается. Тогда уже будет понятно
Запрос Power Query «Из папки» |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Just like any other language, Power Query has its own different types of errors, one of them is DataFormat Error.
Dataformat errors in Power Query are mostly data type errors and do not prevent you from loading data to Power BI, instead the cells will be loaded as blank. The screenshot below shows 3 errors for 78 records when the data is loaded to Power BI.
To audit the error or get more details, do the following:
- Click on View errors from above to go back to Power Query Editor
- In Power Query Editor-> Select View tab -> Check Column Quality
For this example, UnitsInStock has 3% error for all rows in that column.
3. Click on Kept Errors under Applied Steps to see only rows with errors, the Kept Errors step is automatically added when you click on View errors from step 1.
Below screenshot show 100% error for the 3 rows.
4. To see details of the error, select the error as seeing below:
For this example, the error occurs because the column data type is Number, but 3 rows in the column has Text values, Power Query return error because it cannot convert the Text values to Numbers.
DataFormat.Error: We couldn’t convert to Number
5. To audit the error, create a custom column using the try expression, from Add column -> Custom Column -> type the expression below. A new Record column will be created.
6. Click on Expand -> Select Error
7. Click Expand again -> Click OK
You will see the Reason, Message and Detail of the error. You can load the error details to Power BI and create an Audit report if needed.
Also, you can use this report to make changes to the affected values at Data source level and reload to Power BI.
8. To replace the errors in Power Query from Advanced Editor, add a line of code to the MQuery with the value to replace with.
For this example, I am replacing all errors with 0. Optionally, you can replace the errors by right clicking the column, then select Replace Error.
Note: Those new values from Power Query will not be updated to your source data.
9. Click on Enable Load to load the data to Power BI if its not enabled by default, right click on the query from the left and select Enable load.
10. Click Close and Apply
The data will now load and apply all changes successfully without errors.
Happy Auditing! 🙂
- Remove From My Forums
-
Question
-
Hi I have receive a the error «DataFormat.Error — Details: Binary», when I tried to refresh the file with the sources. I already tried to:
— open the file in Excel directly to test if excel shows restricted Access message,.
— Save As command to confirm whether «Save as type» is the Excel workbook format: (*.xlsx)
Nothing works. Do you have any idea what it could be?
Thanks in advance!
Regards. Alberto.
Answers
-
Can you provide the following details about the origin of the Excel file:
- How was it created?
- Excel version?
- Web service?
- Is the file password protected?
- Does the file contain anything other than data, e.g.:
- Does the file contain any VBA or macros?
- Does the file contain any connections?
- Does the file contain any charts, pivot tables or PowerView sheets?
- Does the file contain a data model?
- Can you create a similar file with fake data in it that exhibits the problem?
Thanks, Hadeel
-
Edited by
Thursday, April 30, 2015 8:31 PM
-
Proposed as answer by
Ed Price — MSFTMicrosoft employee
Wednesday, May 6, 2015 6:28 AM -
Marked as answer by
Ed Price — MSFTMicrosoft employee
Saturday, June 6, 2015 3:12 AM
- How was it created?
Hi,
Please see the code below (sorry, been trying to edit it but the functionality won’t let me use the code style):
let
Source = Access.Database(File.Contents(«C:UsersNavGanpatDesktopFILENAME.accdb»), [CreateNavigationProperties=true]),
_Blotter = Source{[Schema=»»,Item=»XXX»]}[Data],
#»Filtered Rows2″ = Table.SelectRows(XXX, each true),
#»Removed Columns» = Table.RemoveColumns(#»Filtered Rows2″,{«XXX»}),
#»Merged Queries» = Table.NestedJoin(#»Removed Columns», {«XXX»}, XXX, {«XXX»}, «XXX», JoinKind.LeftOuter),
#»Expanded Static» = Table.ExpandTableColumn(#»Merged Queries», «XXX», {«XXX»}),
#»Removed Columns1″ = Table.RemoveColumns(#»Expanded Static»,{«XXX», «XXX»}),
#»Filtered Rows» = Table.SelectRows(#»Removed Columns1″, each [XXX] < #datetime(2021, 10, 1, 0, 0, 0))
in
#»Filtered Rows»
Thanks,
Naveen
Earlier this month I published a new and very practical Power BI app on Microsoft AppSource. The app audits Excel workbooks and detects changes and errors. To implement the app I needed to resolve key obstacles that are very common when you import Excel workbooks using Power Query. How do you import the data from Excel if you have formula errors in unpredictable cells?
In today’s tutorial, you will learn how to avoid these errors when you import the data from Excel to Power Query. As a bonus, you will also learn to detect the erroneous cells and find out the type of errors and their coordinates, so if needed, you can report back to the owners of the workbooks and ask them to fix these errors.
The Challenge
Let’s examine a very simple table in Excel as shown in the screenshot below (You can download it here). You can see that we have errors in the Price and Amount columns. Formula errors in Excel are very common. Sometimes, these errors are kept by design, sometimes, they are there by mistake.
When you import data from Excel using Power Query, you may find in the preview pane the errors. But oftentimes, when you deal with a very large dataset, you may completely miss them.
Import the Excel (here), convert the type of the Price column to Fixed decimal number (or let the auto-detection of column types work its black-magic), and apply any filter on Price. For example, in the screenshot below, I applied a greater than 100 filter.
I am sure you have seen these errors before. In the next sections, we will discuss possible solutions.
Removing Rows with Errors
One of the common approaches to resolve the errors is to filter out rows with errors. To do it, you can right-click on the headers of the columns with the errors (In our case, Price and Amount), and select Remove Errors in the shortcut menu.
This step will remove rows that have errors in the selected columns. This approach may be too harsh. Oftentimes, you may know the root cause for the errors and apply some logic that to workaround the errors instead of ignoring the entire rows.
Still, let’s assume that you have no options, and need to remove the errors. We can make your challenge more interesting, and say that you need to remove rows if you find errors in ANY column. How would you approach it?
Looking at the M formula after you removed the errors for columns Price and Amount, you can see that the column names were explicitly called out in the formula, using a list.
= Table.RemoveRowsWithErrors(#"Changed Type", {"Price", "Amount"})
To remove rows with errors for any columns, you can replace the static list with the function Table.ColumnNames. Here is the modified formula:
= Table.RemoveRowsWithErrors(#"Changed Type", Table.ColumnNames(#"Changed Type"))
Note that in the formula above, in my example, I had #”Changed Type” as the last step in Applied Steps, so I used it as the parameter for Table.ColumnNames. When you apply this technique on your own data, you will have a different step name and will need to copy it as the relevant parameter.
Replacing Errors with other Values
A more common approach to handle errors in Power Query and avoid the refresh errors, is to replace the errors with values. For example, you will oftentimes want to replace the errors with nulls.
Replacing the errors for a single column is very discoverable. You right-click on the column’s header and select Replace Errors in the
But in our example, we have two columns with errors. See, what happens when you select both Price and Amount. Right-clicking on one of their headers, will not have an option for Replace Errors. But when something is missing in one UI element, it doesn’t mean that this functionality is not supported. Let’s look for it in the ribbon.
You can see in the formula bar the following line:
= Table.ReplaceErrorValues(#"Changed Type", {{"Price", null}, {"Amount", null}})
We now have a different format in M to replace the errors. You can see a list of pairs. Each pair includes the column name and the null value.
What would you do to replace errors with nulls when you don’t know in which columns you have the errors? Here is the solution using Table.ColumnNames and List.Transform.
= Table.ReplaceErrorValues(#"Changed Type", List.Transform(Table.ColumnNames(#"Changed Type"), each {_,null}))
The formula above gets the list of column names and transform them into the required pairs of column name and null. If you are not sure how it works, don’t worry. You can apply it to any table you have in the future, by clicking the fx button in the formula bar, and then copy the formula above. Don’t forget to replace the two occurrences of #”Changed Type” with the last step name of your table. If you have spaces or special characters in the last step, use the #”…” wrapper.
Detecting Errors
So far we have learned to remove formula errors or replace the errors with values. Now, let’s move to a more advanced scenario. Imagine that after you resolved the errors, you still want to dynamically detect these errors and report them to the Excel workbook’s owner.
In this section, you will learn how to do it.
Note: if this use-case has a very high value for you, you can install my Excel Compare app from AppSource here, and use it to report the errors in Excel.
If you are an advanced Power Query user and wish to detect Excel formula errors in Power Query across many workbooks, you can create the following custom function in Power Query:
(tbl) =>
let
#"Unpivoted Columns" = Table.UnpivotOtherColumns(tbl, {"ID"}, "Column", "Value"),
#"Kept Errors" = Table.SelectRowsWithErrors(#"Unpivoted Columns", {"Value"}),
#"Added Custom" = Table.AddColumn(#"Kept Errors", "Custom", each try [Value]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Value"}),
#"Expanded Custom" = Table.ExpandRecordColumn(#"Removed Columns", "Custom", {"Error"}, {"Error"}),
#"Expanded Error" = Table.ExpandRecordColumn(#"Expanded Custom", "Error", {"Reason", "Message", "Detail"}, {"Reason", "Message", "Detail"})
in
#"Expanded Error"
Name the custom function FnDetectErrorsInWorksheet.
Before you use the function, make sure you have a column ID in the table. If you don’t have one, you can create it using the Add Index button in Add Column tab. To apply the function on your table, you can invoke the FnDetectErrorsInWorksheet on your table. For example, if the table with the errors is represented in the Table query, this formula will do the trick.
= FnDetectErrorsInWorksheet(Table)
How to detect errors step by step
If you want to learn how to detect the errors without the custom function above, let’s show you the steps in the UI. You will find it very easy.
On the Queries pane, select the query with the errors. Right-click on it and select Reference in the shortcut menu. Name the new query Detect Errors.
Right-click on the header of ID column, and select Unpivot Other Columns. Now, all the data in the Excel table is rebuilt as the value and its coordinates. ID represents the row. The Attribute column represents the column name, and the Value column represents the value in the original Excel table. You can see that the Value column contains the errors.
Right-click on the header of the Value column.
In Home tab, select Keep Rows, and then select Keep Errors.
You are now left with the errors only. You already know at this stage where errors are located.
But can you tell what kind of errors were detected? To do it, we will add a custom column. In Add Column tab, click Custom Column.
In the Custom Column dialog box, enter the formula:
try [Value]
This formula returns a record with the details of the error. You can learn more about the try statement here and check out the latest official error handling article here.
It’s time to move on. Click OK and close the Custom Column dialog box.
Click the expand control in the Custom column header.
Select HasError and Error fields and click OK.
Click the expand control in the Error column header. Select the fields Reason, Message, and Detail, and then click OK.
You can now see that we extracted the specific Excel formula errors in the Message column. From here, you only need to load the Detect Errors query and build a nice report to notify your colleagues when they have errors in Excel.
Did you find this tutorial helpful? Do you want to learn more?
Schedule a very special Power BI or Power Query training for your team. Learn more here.