Excel for Microsoft 365 Excel 2021 Excel 2019 Excel 2016 Excel 2013 Excel 2010 More…Less
For a structured column, such as List, Record, or Table, there are related values associated with the column. Structured columns have an Expand icon in the column header.
There are three types of structured columns:
-
List Stores a list of values, For example, { 1, 2, 5, 10 } or { «hello», «hi», «good bye» }. A value of List in a cell is the simplest structured column and there is no table relationship.
-
Record Stores a set of named fields grouped into a unit. For example, [ FirstName = «Joe», LastName = «Smith», Birthdate = #date(2010, 1, 2) ]. A value of Record in the cell indicates a one-to-one table relationship with the current or primary table.
-
Table Stores a table that has a secondary relationship with the current data, which is the primary table. A value of Table in the cell indicates a one-to-many relationship with the current or primary table.
A Record and Table structured column represents a relationship in the data source which has a relational model, such as an entity with a foreign key association in an OData feed or a foreign key relationship in a SQL Server database.
You can use the Expand icon to see columns from a related table. For example, in an Orders table, an expand operation brings together Order_Details records that are related to the Order table to combine order line items with each order. The expand operation widens a primary table to include columns from a secondary and related table. To illustrate:
A primary table has columns A and B.
A related table has column C.
The expand operation widens a primary table to include column C and expands a primary table with related values from the secondary and related table that contains column C.
To summarize, when you expand a Table structured column, the values are displayed alongside the other columns in Data Preview. For more information about combining primary and related tables, see Learn to combine multiple data sources.
In this example, the expand operation widens an Order table to include the Order_Details.ProductID, Order_Details.UnitPrice, and Order_Details.Quantity columns to bring together primary table Order rows and related table Order_Details rows.
-
To open a query, locate one previously loaded from the Power Query Editor, select a cell in the data, and then select Query > Edit. For more information see Create, load, or edit a query in Excel.
Note The query must have at least two tables joined in a relationship. For more information, see Merge queries.
-
Click the expand icon () in the column header of the structured column.
-
In the Column Names drop-down list, select the columns you want and clear the columns you don’t want.
-
Select OK.
Result
The table now contains a new column for each of the columns selected in step 3.
When you expand a Record structured column, the values are displayed as new columns in Data Preview. If you don’t expand it and then load a query to a worksheet, you see a placeholder value of [Record] for each cell in the column.
-
To open a query, locate one previously loaded from the Power Query Editor, select a cell in the data, and then select Query > Edit. For more information see Create, load, or edit a query in Excel.
-
To see a specific value without expanding the column, select a value in the structured column that has a Record value. For example:
-
Select the expand icon () in the column header of the structured column.
-
In the Column Names drop-down list, select the columns you want and clear the columns you don’t want.
-
Select OK.
Result
The table now contains a new column for each of the columns selected in step 4.
When you expand a List structured column, the values are displayed as new columns in Data Preview. If you don’t expand it and then load a query to a worksheet, you see a placeholder value of [List] for each cell in the column.
-
To open a query, locate one previously loaded from the Power Query Editor, select a cell in the data, and then select Query > Edit. For more information see Create, load, or edit a query in Excel.
-
To see a specific value without expanding the column, select a value in the structured column that has a List value. For example:
-
Select the expand icon () in the column header of the structured column.
-
Do one of the following:
-
To create a row for each list value, select Expand to New Rows.
-
To create a list of text values separated by a delimiter, select Extract Values.
-
-
Select OK.
Result for
Expand to New Rows
Result for
Extract Values with a semicolon (;) as a delimiter
You can use the following additional commands on the Power Query Editor ribbon to work with structured columns:
-
Select Home > Transform and then select one the following commands in the Structured Column group.
Expand Promotes a structured column (List, Records, or Table) to become new columns and rows in the current query table. This command is the same as the Expand icon.
Aggregate Summarize values in a Table structured column by using aggregate functions, including Sum and Count. This command is the same as selecting the Expand icon, and then selecting Aggregate in the Column Names drop-down dialog box. It is only available for the Table structured column.
Extract Values Extracts the values of a structured List column by combining them into a single text value using a specified delimiter.
Note You can also use the Statistics command in the Number Column group (Select Transform > Statistics) with a Table structured column. It has the same list of aggregate functions as the Statistics command in the Numeric List group of the Transform context tab under List Tools in the Power Query Editor ribbon.
You can use the Drill Down command to display the Transform context tab under List Tools in the Power Query Editor ribbon and reveal additional commands to work with structured columns. Do not confuse this Transform tab with the other Transform tab that is regularly available with the Power Query Editor ribbon.
-
Right click the column header and then select Drill Down.
-
To convert the List or Record to a Table, under List Tools, select Transform > To Table.
-
To keep top, bottom, or a range of items, under List Tools, select Transform > Keep Items.
-
To remove top, bottom, or alternate items, under List Tools, select Transform > Remove Items.
-
To remove duplicate values, under List Tools, select Transform > Remove Duplicates. For more information, see Keep or remove duplicate rows.
-
To reverse items, under List Tools, select Transform > Reverse Items.
-
To sort the data, under List Tools, select Sort Ascending or Sort Descending . For more information, see Sort data.
-
To display various statistics, under List Tools select Transform > Statistics. The following statistics are available: Sum, Minimum, Maximum, Median, Average, Standard, Deviation, Count Values, and Count Distinct Values. For more information, see Aggregate data from a column.
See Also
Power Query for Excel Help
Merge queries
Grouping or summarizing rows (docs.com)
Need more help?
Want more options?
Explore subscription benefits, browse training courses, learn how to secure your device, and more.
Communities help you ask and answer questions, give feedback, and hear from experts with rich knowledge.
Файлы к уроку:
- Для спонсоров Boosty
- Для спонсоров VK
Ссылки:
- Страница курса
- Плейлист YouTube
- Плейлист ВК
Описание
В этом уроке мы продолжим изучать объект List. Мы изучим несколько самых распространенных операций с листами.
Мы изучим или повторим:
- Как создать список в Power Query
- Создать список из чисел с нужным инкрементом
- Счет значений в списке с List.Count
- Объединение списков оператором &
- Объединение списков с List.Combine
- Объединить списки с сохранением только уникальных значений с List.Union
- Ссылки на значения объекта List
- Получить первое и последнее значение списка с List.First и List.Last
- Выбор значений из списка по условию с List.Select
- Получение нескольких первых и последних значений с List.FirstN и List.LastN
- Получить значения, которые входят во все списки с List.Intersect
- Получить значения, которые встречаются только однократно с List.Difference
- Сортировка списка с List.Sort
- Получение максимального и минимального значения в списке с List.Max и List.Min
- Получение нескольких максимальных и минимальных значений в списке с List.MaxN и List.MinN
- Среднее значение в списке с List.Average
- Суммирование всех значений в списке с List.Sum
- Сравнение списков
- Как проверить является ли список пустым с List.IsEmpty
- Проверить входит ли в список определенное значение в List.Contains
Создание списка из чисел
Создадим список из чисел 1, 2, 4, а дальше с 5 по 10 без промежутков.
Создание списка чисел функцией List.Numbers
Параметры функции:
- Начало списка
- Количество значений
- Шаг
Посчитать количество значений в списке
Посчитаем сколько значений находится в списке. Результат — это целое число.
List.Count({"Judas Priest", "Iron Maiden", "Manowar", "Black Sabbath", "Ozzy Osbourne"})
Конкатенация/объединение списков
Из двух списков получим 1, который включает все значения из обоих.
{"Judas Priest", "Iron Maiden", "Manowar", "Black Sabbath", "Ozzy Osbourne"} &
{"Ария", "Виконт"}
Конкатенация списков функцией List.Combine
Объединить 2 списка в один можно и функцией. Параметр функции — это список списков, которые нужно комбинировать.
List.Combine({{"Judas Priest", "Iron Maiden", "Manowar", "Black Sabbath", "Ozzy Osbourne"},
{"Ария", "Виконт"}})
Конкатенация/объединение списков функцией List.Union
Данная функция тоже объединит списки, но в результирующем списке будут присутствовать не все значения. В него войдут все значения из первого списка и только несовпадающие из второго. В результате данного примера мы получим список {«Иван», «Иван», «Иван», «Сергей», «Петр»}
List.Union({{"Иван", "Иван", "Иван", "Сергей"},
{"Иван", "Иван", "Петр"}})
Как сослаться на элемент списка
Чтобы сослаться на элемент списка нужно сначала сослаться на сам список, а потом в фигурных скобках указать индекс элемента. Индексация в Power Query начинается с 0.
В результате данной формулы получится «Iron Maiden».
{"Judas Priest", "Iron Maiden", "Manowar", "Black Sabbath", "Ozzy Osbourne"}{1}
Вернуть первый элемент списка
Функция List.First возвращает первое значение в списке. В данном примере в результате получится «Judas Priest».
List.First({"Judas Priest", "Iron Maiden", "Manowar", "Black Sabbath", "Ozzy Osbourne"})
Вернуть последний элемент списка
Функция List.Last вернет последнее значение в списке. В данном примере это «Ozzy Osbourne».
List.Last({"Judas Priest", "Iron Maiden", "Manowar", "Black Sabbath", "Ozzy Osbourne"})
Выбрать элементы из списка по условию
С помощью функции List.Select можно выбрать элементы из списка по условию. Второй параметр функции — это условие отбора. В данном примере мы выбираем числа, которые > 80.
List.Select({1..100}, each _ > 80)
Выбрать первые N элементов списка
С помощью функции List.FirstN получим список только первых N значений. В данном случае получим список {«Judas Priest», «Iron Maiden»}.
List.FirstN({"Judas Priest", "Iron Maiden", "Manowar", "Black Sabbath", "Ozzy Osbourne"}, 2)
Выбрать последние N элементов списка
Функция List.LastN вернет список из последних N элементов списка. В данном примере в результате мы получим список {«Black Sabbath», «Ozzy Osbourne»}.
List.LastN({"Judas Priest", "Iron Maiden", "Manowar", "Black Sabbath", "Ozzy Osbourne"}, 2)
Пересечение списков / Поиск совпадений в списках
Функция List.Intersect находит совпадения в списках. В качестве параметра она получает список списков. В данном примере в результате получится список из одного значения {3}, потому что только это значение присутствует в каждом списке.
List.Intersect({{1,3,5},
{3,6,8},
{7,3,18}})
Разница между списками
Функция List.Difference возвращает список значений первого списка, которых нет во втором списке. В данном примере в результате получится {1}.
List.Difference({1..5},
{2..7})
Сортировка списка
Функция List.Sort сортирует значения списка по возрастанию или по убыванию.
List.Sort({"Judas Priest", "Iron Maiden", "Manowar", "Black Sabbath", "Ozzy Osbourne"},
Order.Ascending)
Минимальное и максимальное значение в списке
Функции List.Max и List.Min возвращают максимальное и минимальное значение в списке соответственно.
List.Max({1..100})
List.Min({1..100})
N наименьших значений
Функция List.MinN возвращает список N наименьших значений из исходного списка. В данном примере в результате получится список {1..5}.
N наибольших значений
Функция List.MaxN возвращает список N наибольших значений из исходного списка. В данном примере в результате получится список {96..100}.
Среднее значение элементов списка
Функция возвращает среднее значение элементов списка.
Сумма элементов списка
Функция List.Sum вернет сумму всех элементов списка.
Сравнение списков
Для сравнения списков используется оператор «=». В результате получается значение TRUE/FALSE. При сравнении важен порядок значений списков. В данном примере получится FALSE не смотря на то, что значения совпадают.
Является ли список пустым
Функция List.IsEmpty проверяет является ли список пустым. В результате получается значение TRUE/FALSe.
Проверить, содержит ли список определенное значение
Функция List.Contains проверяет присутствует ли в списке определенное значение. В результате возвращается значение TRUE/FALSE. В данном примере получится FALSE.
List.Contains({"Judas Priest", "Iron Maiden", "Manowar", "Black Sabbath", "Ozzy Osbourne"},
"ABBA")
Примененные функции
- List.Numbers
- List.Count
- List.Combine
- List.Union
- List.First
- List.Last
- List.Select
- List.FirstN
- List.LastN
- List.Intersect
- List.Difference
- List.Sort
- List.Min
- List.Max
- List.MinN
- List.MaxN
- List.Average
- List.Sum
- List.IsEmpty
- List.Contains
Этот урок входит в Продвинутый курс Power Query
Номер урока | Урок | Описание |
---|---|---|
1 | Power Query Продвинутый №1. Введение в Язык М 1 | В этом уроке мы узнаем, почему стоит изучать формулы М в Power Query. Какие преимущества нам дает знание языка формул М. |
2 | Power Query Продвинутый №2. Введение в Язык М 2 | В этом втором вводном уроке по языку формул Power Query мы познакомимся с самыми основами языка форму М. |
3 | Power Query Продвинутый №3. Уровни владения Языком М | В этом уроке мы узнаем зачем изучать Power Query. Какой процент задач вы сможете решить только с пользовательским интерфейсом, а какой процент вы сможете решить с использованием функций М? Об этом узнаем в это видео. |
4 | Power Query Продвинутый №4. Объекты Power Query | В этом уроке мы познакомимся с объектами Power Query: Table, List, Record. |
5 | Power Query Продвинутый №5. Объект List 1 | В этом уроке мы начнем знакомиться с объектом List в Excel Power Query. Создадим простые List (списки) из чисел и букв. Познакомимся с функциями для создания листов/списков из чисел и дат. Научимся создавать список названий месяцев. Изучим функцию List.FindText. Создадим лист с условием при помощи List.Transform. Найдем среднее значение в листе/списке при помощи простой функции List.Average. |
6 | Power Query Продвинутый №6. Объект List 2 | В этом уроке мы продолжим знакомиться с объектом List. Мы узнаем как создавать листы, как ссылаться на элементы листа и изучим несколько полезных формул листа. |
7 | Power Query Продвинутый №7. Объект Record (Запись) | В этом уроке немного подробнее изучим объект Record в Power Query. Record — это набор пар ключ-значение. Каждый Record — это строка таблицы. В этом уроке мы изучим ссылки на Record и функции Record. |
8 | Power Query Продвинутый №8. Объект Table (Таблица) | В этом уроке мы познакомимся с объектом Table в Power Query. Что это такое и какие основные функции применяются к этому объекту. |
9 | Power Query Продвинутый №9. Ссылки 1 | В этом уроке из курса по Power Query мы повторим как ссылаться на строки таблицы. |
10 | Power Query Продвинутый №10. Ссылки 2 | В этом уроке из курса обучения Power Query будем практиковать ссылки. Помимо ссылок еще повторим и изучим несколько техник и команд: объединение листов по вертикали, Table.Skip, Table.PromoteHeaders. |
11 | Power Query Продвинутый №11. Ссылки 3 | В этом уроке курса по Power Query мы повторим ссылки на запись, ссылки на значение, ссылки на другую строку. Также вспомним как создавать таблицу параметров. |
12 | Power Query Продвинутый №12. Ссылки 4: Ссылка на другой шаг запроса и много практики | В этом уроке мы повторим/научимся ссылаться на ячейку, которая находится в другом шаге запроса. |
13 | Power Query Продвинутый №13. Пользовательские функции | В этом уроке мы научимся создавать пользовательские функции. Разберем пользовательские функции на примере столбца с нарастающим итогом. |
14 | Power Query Продвинутый №14. #datetime, #duration: работа с датой и временем | В этом уроке по Excel Power Query вы научитесь пользоваться функциями #duration и #datetime для создания даты/времени и длительности. Изучите функцию DateTimeZone.UtcNow() Узнаете как складывать данные в формате datetime и duration. Познакомитесь с функцией DateTime.LocalNow(). Научитесь преобразовывать дату/время в текст при помощи DateTime.ToText() |
15 | Power Query Продвинутый №15. Текстовые функции / Функции Text.* | В этом уроке по формулам Power Query мы разберем функции группировки, сведения, отмены сведения, сортировки и фильтра. |
Номер урока | Урок | Описание |
---|---|---|
16 | Power Query Продвинутый №16. Важные операции: Группировка, Пивот, Анпивот, Сортировка | В этом уроке по формулам Power Query мы разберем функции группировки, сведения, отмены сведения, сортировки и фильтра. |
17 | Power Query Продвинутый №17. Нюансы консолидации из разных книг/листов Excel и List PositionOf | В этом уроке мы узнаем о некоторых нюансах объединения таблиц по вертикали из разных файлов. |
18 | Power Query Продвинутый №18. Разделить столбец на строки, Text.Trim | В этом уроке мы разделим текстовый столбец на строки. Данные скучены в одной ячейке. Нужно разбить ее на несколько. |
19 | Power Query Продвинутый №19. Заголовки в двух строках, List.Zip | В этом уроке мы обработаем заголовки, которые находятся в двух строках. Нам понадобится функция List.Zip |
20 | Power Query Продвинутый №20. Вычисления в Power Query | В этом уроке мы научимся выполнять вычисления в Power Query и в Power Pivot. |
21 | Power Query Продвинутый №21. Скользящее среднее, List Range | В этом уроке мы научимся считать скользящее среднее в Power Query. Для примера рассчитаем скользящее среднее предыдущих 13 значений. Нам пригодятся функции List.Range и List.Average. |
22 | Power Query Продвинутый №22. Агрегирование текста, группировка | В этом уроке вы научитесь выполнять группировку с агрегированием текстовых значений в Power Query. |
23 | Power Query Продвинутый №23. Трансформация столбцов, Table.TransformColumns | В этом уроке мы изучим функцию Table.TransformColumns. |
24 | Power Query Продвинутый №24. Разгруппировка, Скрытые возможности Table.ReplaceValue | В этом уроке мы научимся делать разгруппировку данных в Power Query, а также изучим скрытые возможности функции Table.ReplaceValue. |
25 | Power Query Продвинутый №25. Функция List.Accumulate | В этом уроке мы с нуля разберем функцию List.Accumulate. Сначала я объясню цикл For, а потом мы закрепим знания на несложных, но очень интересных примерах. |
26 | Power Query Продвинутый №26. Множественная замена текста c List.Accumulate и VBA | В этом уроке мы научимся делать множественную текстовую замену с помощью Power Query. Для этого мы воспользуемся функцией List.Accumulate. Также разберем как решить эту задачу при помощи VBA. |
27 | Power Query Продвинутый №27. Генерируем список URL (Text.Format, List.Generate, List.Accumulate) | В этом уроке мы сгенерируем список веб-страниц, в которых будет меняться параметр id. Сделаем это всего лишь в одном шаге при помощи функций Text.Format, List.Generate и List.Accumulate. |
28 | Power Query Продвинутый №28. Множественная текстовая замена c List.Generate | В этом уроке мы научимся выполнять множественную текстовую замену в Power Query с помощью функции List.Generate. Для спонсоров канала я так же расскажу как это делать в VBA. |
29 | Power Query Продвинутый №29. Генераций таблиц с List.Generate, График платежей по кредиту | Продолжим изучать функцию List.Generate. Создадим при помощи этой функции целую таблицу, которая будет представлять из себя график платежей по кредиту. |
30 | Power Query Продвинутый №30. Нарастающий итог с List.Generate | В этом уроке мы разберем функцию List.Generate, а также при помощи этой функции выполним нарастающий итог, который в сотни раз быстрее предыдущих версий нарастающего итога. |
In Excel we often need to work with lists. List of numbers, letters, dates, countries, products, you get the idea.
With Power Query* we can generate lists of standard items like numbers, letters and dates quickly and easily.
We can use one of the many Power Query List Functions, or we can use a shortcut to create a list of consecutive numbers or letters. Let’s look at some examples.
Warning: Power Query functions and formulas are case sensitive.
*Power Query is available for Excel 2010 onwards.
Download the Workbook
Enter your email address below to download the sample workbook.
By submitting your email address you agree that we can email you our Excel newsletter.
Power Query Lists — Quick Links
- Power Query List Consecutive Numbers
- Power Query List Consecutive Letters
- Power Query List Dates
- Convert Lists to Tables
- List Dates with List.Dates Function
- List Even Numbers
- List of Decimal Numbers
- List Numbers in Reverse
- Repeating List of Numbers
- List Dates YTD
- List Dates using Start and End Date Parameters from Named Ranges
- Get Power Query
- Learn More Power Query
Power Query List Consecutive Numbers
Let’s start by creating a list of consecutive numbers. First we need to create a new blank query:
Note: in Excel 2016 go to the Data tab > New Query > From Other Sources > Blank Query.
This opens the Query Editor and in the formula bar type:
={1..10}
Press ENTER and Power Query will return a list of numbers from 1 through 10:
Notice how we surround our list arguments in curly braces, and the ellipsis points . . instructs Power Query to fill in the blanks.
Power Query List Consecutive Letters
We can also generate lists of letters like this:
Notice the A and Z are surrounded by double quotes, as they are text, just like we would in an Excel formula. And again, the list arguments are surrounded by curly braces.
Power Query List Dates
Dates are a little more complicated. Just like in Excel, Power Query recognises date serial numbers.
We can convert dates into their data serial number to more easily create a list of dates using the Number.From function, like so:
The list formula:
= { Number.From( #date(2017,1,1) ) . . Number.From( #date(2017,12,31) ) }
Is made up of the following elements:
#date(2017,1,1) is a literal date function that creates a data value from (year as a number, month as a number, day as a number).
The Number.From functions convert the dates into their date serial number equivalent, which is why the list starts at 42736, i.e. the date serial number for January 1st, 2017.
And again, the whole formula is wrapped in curly braces to return a list.
Convert Lists to Tables
The above examples are all in a list format. We can load lists (Home tab > Close & Load) into our worksheet in an Excel Table, or load it to the data model (Power Pivot where it’s converted to a Table), but in their list form in Power Query they’re restricted to being a single column of data.
If we want to add columns or merge the list query with other query tables, then we’ll want to convert the list to a Table.
It’s easy to do; with the list selected, the contextual List Tools: Transform tab is open. Click on the ‘To Table’ icon:
Now our list is in a table:
From here we can change the data type to Date. Select Column1 > Home tab or Transform tab > Data type: Date
Double click in the Column header and change the column name to something more useful:
Give your query a name. This will help you identify it and work with it later on:
Now you can Close & Load into a Table in a worksheet, or load it into the data model (Power Pivot):
So, that is the basics of generating lists with Power Query. Let’s look at some more advanced examples.
List Dates with List.Dates Function
Another way we can generate a list of dates is using the List.Dates function like so:
= List.Dates(#date(2017,1,1), 365, #duration(1,0,0,0))
The formula above lists the dates starting at January 1st, 2017 (#date(2017,1,1)), increment 365 times, incrementing by 1 day (#duration(1,0,0,0))
Tip: if you type = List.Dates in the formula bar and press enter, you’ll get a nice GUI that you can enter the parameters in, similar to the Excel Function wizard (click Invoke to enter the formula):
List Even Numbers
=List.Numbers(2, 20, 2)
Returns a list of numbers starting at 2, 20 numbers long, which increment by 2.
List of Decimal Numbers
= List.Numbers( 1, 11, 0.1)
Returns a list of numbers starting at 1, 11 numbers long, which increment by 0.1.
List Numbers in Reverse
=List.Reverse( {1..100})
Repeating List of Numbers
= List.Repeat( {1..5}, 3 )
Generates a list of numbers from 1 to 5 and repeats it 3 times.
List Dates YTD
Let’s say we want to generate a list of dates from January 1st, 2017 up to today. We can then refresh the query each day and it will automatically add another date.
Using the List.Dates formula (below) that we looked at earlier:
= List.Dates(#date(2017,1,1), 365, #duration(1,0,0,0))
We replace the 365 with:
Duration.Days(DateTime.Date(DateTime.FixedLocalNow())—#date(2017,1,1))
Like so:
= List.Dates(#date(2017,1,1), Duration.Days(DateTime.Date(DateTime.FixedLocalNow())-#date(2017,1,1)), #duration(1,0,0,0))
The formula above uses our PC clock to find the date portion from the local time and subtracts that from January 1st 2017 (#date(2017,1,1)) to find the number of days to increment:
If you prefer to list dates up to yesterday, then simply subtract 1 like so:
= List.Dates(#date(2017,1,1), Duration.Days(DateTime.Date(DateTime.FixedLocalNow())-#date(2017,1,1))-1, #duration(1,0,0,0))
Tip: If you’re going to use this date table in Power Pivot it’s a good idea to generate dates up to the end of the calendar year so that DAX time intelligence functions like PARALLELPERIOD return the correct results when working with year comparisons.
List Dates using Start and End Date Parameters from Named Ranges
Let’s say you’ve got a start and end date in your workbook that you want to use to generate your list of dates. These start and end dates are in Named Ranges:
We can create a blank query to get the named ranges: Power Query > From Other Sources > Blank Query.
Then with the Excel.CurrentWorkbook function we can get a list of the file contents:
And then filter to select the StartDate named range:
Click the double arrow on the Content column to expand the Table and expose the date (deselect ‘Use original column name as prefix’):
Set the data type for Column1 to ‘Date’ to remove the time component from the column:
Right-click the cell containing the date > Drill Down:
Give the query a name; ‘StartDate’:
We now have a date parameter for the StartDate that we can use in other queries.
Repeat for the EndDate named range so you have both StartDate and EndDate parameters in your queries list:
Now create a new blank query: Power Query tab > From Other Sources > Blank Query. Here we can use the same Number.From function we used earlier (below):
= { Number.From( #date(2017,1,1) ) . . Number.From( #date(2017,12,31) ) }
And replace the literal #dates with the StartDate and EndDate parameters:
= {Number.From(StartDate)..Number.From(EndDate)}
This formula returns a list of date serial numbers based on the start and end dates in our named ranges:
We can go ahead and convert the list to a table, change the data type to ‘Date’, rename the column and give the query a name:
When your date parameters are in the worksheet we don’t need to open or edit the queries to make changes to the list of dates. This makes it easy for users who are unfamiliar with Power Query.
For Excel 2010 and 2013 users you can download Power Query here:
https://www.microsoft.com/en-us/download/details.aspx?id=39379
If you have Excel 2016 then you already have Power Query on the Data tab of the ribbon in the Get & Transform group:
Learn More Power Query
Click here for more Power Query tutorials.
And if you want to get up to speed quickly please check out my Power Query course.
You can use Microsoft Query in Excel to retrieve data from an Excel Workbook as well as External Data Sources using SQL SELECT Statements. Excel Queries created this way can be refreshed and rerun making them a comfortable and efficient tool in Excel.
Microsoft Query allows you use SQL directly in Microsoft Excel, treating Sheets as tables against which you can run Select statements with JOINs, UNIONs and more. Often Microsoft Query statements will be more efficient than Excel formulas or a VBA Macro. A Microsoft Query (aka MS Query, aka Excel Query) is in fact an SQL SELECT Statement. Excel as well as Access use Windows ACE.OLEDB or JET.OLEDB providers to run queries. Its an incredible often untapped tool underestimated by many users!
What can I do with MS Query?
Using MS Query in Excel you can extract data from various sources such as:
- Excel Files – you can extract data from External Excel files as well as run a SELECT query on your current Workbook
- Access – you can extract data from Access Database files
- MS SQL Server – you can extract data from Microsoft SQL Server Tables
- CSV and Text – you can upload CSV or tabular Text files
Step by Step – Microsoft Query in Excel
In this step by step tutorial I will show you how to create an Microsoft Query to extract data from either you current Workbook or an external Excel file.
I will extract data from an External Excel file called MOCK DATA.xlsx. In this file I have a list of Male/Female mock-up customers. I will want to create a simple query to calculate how many are Male and how many Female.
Open the MS Query (from Other Sources) wizard
Go to the DATA Ribbon Tab and click From Other Sources. Select the last option From Microsoft Query.
Select the Data Source
Next we need to specify the Data Source for our Microsoft Query. Select Excel Files to proceed.
Select Excel Source File
Now we need to select the Excel file that will be the source for our Microsoft Query. In my example I will select my current Workbook, the same from which I am creating my MS Query.
Select Columns for your MS Query
The Wizard now asks you to select Columns for your MS Query. If you plan to modify the MS Query manually later simply click OK. Otherwise select your Columns.
Return Query or Edit Query
Now you have two options:
- Return Data to Microsoft Excel – this will return your query results to Excel and complete the Wizard
- View data or edit query in Microsoft Query – this will open the Microsoft Query window and allow you to modify you Microsoft Query
Optional: Edit Query
If you select the View data or edit query in Microsoft Query option you can now open the SQL Edit Query window by hitting the SQL button. When you are done hit the return button (the one with the open door).
Import Data
When you are done modifying your SQL statement (as I in previous step). Click the Return data button in the Microsoft Query window.
This should open the Import Data window which allows you to select when the data is to be dumped.
Lastly, when you are done click OK on the Import Data window to complete running the query. You should see the result of the query as a new Excel table:
As in the window above I have calculated how many of the records in the original table where Male and how many Female.
AS you can see there are quite a lot of steps needed to achieve something potentially pretty simple. Hence there are a couple of alternatives thanks to the power of VBA Macro….
MS Query – Create with VBA
If you don’t want to use the SQL AddIn another way is to create these queries using a VBA Macro. Below is a quick macro that will allow you write your query in a simple VBA InputBox at the selected range in your worksheet.
Just use my VBA Code Snippet:
Sub ExecuteSQL() Attribute ExecuteSQL.VB_ProcData.VB_Invoke_Func = "Sn14" 'AnalystCave.com On Error GoTo ErrorHandl Dim SQL As String, sConn As String, qt As QueryTable SQL = InputBox("Provide your SQL Query", "Run SQL Query") If SQL = vbNullString Then Exit Sub sConn = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;;Password=;User ID=Admin;Data Source=" & _ ThisWorkbook.Path & "/" & ThisWorkbook.Name & ";" & _ "Mode=Share Deny Write;Extended Properties=""Excel 12.0 Xml;HDR=YES"";" Set qt = ActiveCell.Worksheet.QueryTables.Add(Connection:=sConn, Destination:=ActiveCell) With qt .CommandType = xlCmdSql .CommandText = SQL .Name = Int((1000000000 - 1 + 1) * Rnd + 1) .RefreshStyle = xlOverwriteCells .Refresh BackgroundQuery:=False End With Exit Sub ErrorHandl: MsgBox "Error: " & Err.Description: Err.Clear End Sub
Just create a New VBA Module and paste the code above. You can run it hitting the CTRL+SHIFT+S Keyboardshortcut or Add the Macro to your Quick Access Toolbar.
Learning SQL with Excel
Creating MS Queries is one thing, but you need to have a pretty good grasp of the SQL language to be able to use it’s true potential. I recommend using a simple Excel database (like Northwind) and practicing various queries with JOINs.
Alternatives in Excel – Power Query
Another way to run queries is to use Microsoft Power Query (also known in Excel 2016 and up as Get and Transform). The AddIn provided by Microsoft does require knowledge of the SQL Language, rather allowing you to click your way through the data you want to tranform.
MS Query vs Power Query Conclusions
MS Query Pros: Power Query is an awesome tool, however, it doesn’t entirely invalidate Microsoft Queries. What is more, sometimes using Microsoft Queries is quicker and more convenient and here is why:
- Microsoft Queries are more efficient when you know SQL. While you can click your way through to Transform Data via Power Query someone who knows SQL will likely be much quicker in writing a suitable SELECT query
- You can’t re-run Power Queries without the AddIn. While this obviously will be a less valid statement probably in a couple of years (in newer Excel versions), currently if you don’t have the AddIn you won’t be able to edit or re-run Queries created in Power Query
MS Query Cons: Microsoft Query falls short of the Power Query AddIn in some other aspects however:
- Power Query has a more convenient user interface. While Power Queries are relatively easy to create, the MS Query Wizard is like a website from the 90’s
- Power Query stacks operations on top of each other allowing more convenient changes. While an MS Query works or just doesn’t compile, the Power Query stacks each transform operation providing visibility into your Data Transformation task, and making it easier to add / remove operations
In short I encourage learning Power Query if you don’t feel comfortable around SQL. If you are advanced in SQL I think you will find using good ole Microsoft Queries more convenient. I would compare this to the Age-Old discussion between Command Line devs vs GUI devs…
Это продолжение перевода книги Кен Пульс и Мигель Эскобар. Язык М для Power Query. Главы не являются независимыми, поэтому рекомендую читать последовательно.
Предыдущая глава Содержание Следующая глава
Прежде чем мы продолжим изучение языка M, сначала подробнее рассмотрим доступные объекты и функции. Обратите внимание, что все ключевые объекты в этой главе (таблицы, списки, записи, значения, двоичные файлы и ошибки) отображаются в столбцах редактора Power Query зеленым шрифтом. Кроме того, каждый объект можно просмотреть, щелкнув пробел рядом с ним.
Рис. 19.1. Единственная таблица в просматриваемой книге
Скачать заметку в формате Word или pdf, примеры в формате архива
Таблицы
Объекты таблицы могут отображаться во многих местах в Power Query, и это весьма ценно, так как с ними очень легко работать. Выполните следующие действия, чтобы убедиться в этом. Откройте Power Query Objects.xlsx. Пройдите по меню Данные –> Получить данные –> Из других источников –> Пустой запрос. Введите в строке формул: =Excel.CurrentWorkbook(). Нажмите Enter. В книге есть одна таблица (цифра 1 на рис. 19.1). Если кликнуть в пустое место рядом со словом Table, в нижней части окна появится предварительный просмотр таблицы (2).
Давайте завершим запрос, прежде чем двигаться дальше. Переименуйте запрос – Table. Главная –> Закрыть и загрузить в… –> Только создать подключение.
Списки
В отличие от таблиц списки содержит только один столбец. Синтаксис: список можно идентифицировать по наличию фигурных скобок; элементы списка разделяются запятыми; текстовые элементы берутся в кавычки (по аналогии с использованием текстовых элементов в , формулах Excel). Пример числового списка: ={1,2,3,4,5,6,7,8,9,10}. Пример списка из текстовых элементов: ={"
A"
,"
B"
,"
C"
,"
D"
,"
E"
,"
F"
,"
G"
,"
H"
,"
I"
,"
J"
}. Списки могут включать элементы разных типов данных, включая другие списки: ={1,465,"
M"
,"
Data Monkey"
,{999,234}}.
Создание списков
Создайте новую книгу Excel. Пройдите по меню Данные –> Получить данные –> Из других источников –> Пустой запрос. В строке формул введите: ={1,2,3}. Нажмите Enter.
Рис. 19.2. Создание списка с нуля
Обратите внимание, появилась контекстная вкладка Средства для списков –> Преобразование. В этот момент почти все команды на других вкладках будут неактивны.
Для создания больших списков с нуля можно воспользоваться специальными символами. Например, если вам нужен список 365 дней, введите в строку формул: ={1..365}. Таким же образом можно создавать последовательные алфавитные списки при условии, что символы заключены в кавычки и используется только один символ. Например, ={"
а"
.."
J"
} будет работать, но ={"
AA"
.."
ZZ"
} не будет. Вы также можете использовать запятые внутри списков, при условии, что они находятся внутри кавычек. Введите в строке формул: = {"
Пульс, Кен"
, "
Эскобар, Мигель"
}, и вы получаете список из двух элементов, показывающие имена авторов книги:
Рис. 19.3. Список из имен авторов книги
Преобразование списков в таблицы
Если вы хотите разделить список на несколько столбцов, сначала преобразуйте его в таблицу. Для этого нажмите кнопку В таблицу (на рис. 19.2 слева). Появится диалог:
Рис. 19.4. Какой знак использовать в качестве разделителя?
Установить в качестве разделителя запятую, второй оставьте по умолчанию, нажмите Ok:
Рис. 19.5. Данные, загруженные из списка, разделенного запятыми
Завершить этот запрос. Измените имя запроса на List_Authors. Главная –> Закрыть и загрузить в… –> Только создать подключение.
Создание списков из столбцов таблицы
Иногда может возникнуть задача извлечь данные из одного столбца запроса в список. Давайте посмотрим, как это работает. Откройте файл Power Query Objects.xlsx. Перейдите на лист Sales. Кликните на любую ячейку Таблицы. Пройдите по меню Данные –> Из таблицы/диапазона:
Рис. 19.6. Исходная таблица запроса; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке
Если вам нужен уникальный список Inventory Item, вы можете удалить все остальные столбцы, а затем перейти на вкладку Главная –> Удалить строки –> Удалить дубликаты. Проблема в том, что объект все еще будет в форме таблицы, и вы не сможете передать его в функцию, если вам это нужно. Вы можете получить уникальные элементы в виде списка, что даст вам требуемую гибкость. Если вы экспериментировали с таблицей, удалите шаги, вернувшись к ситуации, как на рис. 19.6 – только два примененных шага. Щелкните правой кнопкой мыши столбец Inventory Item –> Детализация. Вы получите список всех запасов:
Рис. 19.7. Столбец, извлеченный из таблицы в список
Обратите внимание на строку кода: = #»Измененный тип»[Inventory Item]. В общем виде она может быть записана так = #Источник[Столбец]. Это шаблон языка M для извлечения всех значений столбца в список без использования команд пользовательского интерфейса. Запомните на будущее.
Теперь на вкладке Средства для списков кликните Удалить дубликаты. У вас останется список уникальных элементов, которые вы можете использовать в другой функции. Переименуйте запрос – List_FromColumn. Главная –> Закрыть и загрузить в… –> Только создать подключение.
Список списков
Это может показаться странной концепцией, поэтому давайте рассмотрим пример. Предположим, что у вас есть ID менеджеров по продажам (от 1 до 4), а именно: Фреда, Джона, Джейн и Мэри. Было бы неплохо иметь возможность конвертировать эти значения в их имена, не создавая отдельную таблицу. Пройдите по меню Данные –> Получить данные –> Из других источников –> Пустой запрос. В строке формул создайте список с нуля:
= {{1, "
Фред"
}, {2, "
Джон"
}, {3, "
Джейн"
}, {4, "
Мэри"
}}
Обратите внимание, что здесь у вас есть четыре списка, которые, в свою очередь, объединены в основной список. Нажмите Enter:
Рис. 19.8. Список, состоящий из списков
Предварительный просмотр первого списка показывает, что он содержит значения 1 и Fred. Нажмите кнопку В таблицу. Таблицу по-прежнему содержит списки, но появилась стрелка Развернуть:
Рис. 19.9. Список списков, преобразованный в таблицу
Нажмите на стрелку Развернуть. Вам будут предоставлены две опции:
Рис. 19.10. Можно развернуть в новые строки или извлечь значения
При извлечении значений Power Query запросит вид разделителя. Я ввел запятую:
Рис. 19.11. Результаты: (1) разворачивания в новые строки, (2) извлечения значений
Переименуйте запрос List_of_Lists. Главная –> Закрыть и загрузить в… –> Только создать подключение.
При работе со списками необходимо учитывать два ключевых момента: списки могут содержать другие списки; развертывание списков списков не меняет их ориентацию.
Запись
Хотя список можно описать как один вертикальный столбец данных, на самом деле, запись является горизонтальным, многоколоночным аналогом списка. Запись может быть визуализирована как одна строка базы данных, содержащая всю соответствующую информацию, относящуюся к конкретному клиенту или транзакции. В Power Query записи могут отображаться в столбцах таблицы или в списках при получении данных. Они также могут быть созданы на лету, если это необходимо.
Синтаксис
Записи немного сложнее списков, так как они должны иметь какие-то значения, и вы должны определить имена столбцов, например:
=[Name="
Ken Puls"
, Country="
Canada"
, Languages Spoken=2]
Обратите внимание:
- Каждая запись заключена в квадратные скобки;
- Каждое поле записи (столбец) должно иметь определенное имя, за которым следует символ =.
- Затем предоставляются данные для поля в кавычках, если это текстовые данные.
- Пара имя поля + данные разделяются запятыми.
Имена полей (столбцов) не нуждаются в какой-либо пунктуации вокруг них, независимо от того, включают ли они пробелы или нет.
Что происходит, когда вам нужно создать несколько записей сразу? Вы создаете список из записей:
={[Name="
Ken Puls"
, Country="
Canada"
, Languages Spoken=2], [Name="
Miguel Escobar"
, Country="
Panama"
, Languages Spoken=2]}
Создание записи с нуля
Вернемся к примеру в разделе Список списков (рис. 19.11). Данные –> Получить данные –> Из других источников –> Пустой запрос. В строке формул создайте запись:
=[EmployeeID=1,EmployeeName=»Fred»]
Нажмите Enter.
Рис. 19.12. Ваша первая запись
Как вы можете видеть, имена полей записи перечислены слева, а соответствующие данные –справа. Интересно, что данные расположены вертикально, а не горизонтально, как можно было бы ожидать. К этому нужно просто привыкнуть. Появилась контекстная вкладка Средства для записей –> Преобразовать. Правда, на ней лишь одна кнопка, а большинство кнопок на других вкладках ленты не активны.
Преобразование записи в таблицу
Поскольку очевидно, что с записью мало что можно сделать, преобразуем ее в таблицу:
Рис. 19.13. Одна запись, преобразованная в таблицу
Возможно, вы ожидали, что таблица будет содержать имена полей в качестве заголовков столбцов. Хотя это и не так, исправить ситуацию не сложно. Перейдите на вкладку Преобразование –> Транспонировать. Главная –> Использовать первую строку в качестве заголовков. Именно на это вы надеялись с самого начала?
Рис. 19.14. Запись выглядит как правильная таблица
Сейчас это нормально, но что произойдет, если у вас есть множество записей, которые вы хотите преобразовать в таблицу? Завершите запрос, чтобы вы могли пойти дальше и узнать ответ на этот вопрос. Переименуйте запрос Record_Single. Главная –> Закрыть и загрузить в… –> Только создать подключение.
Создание нескольких записей с нуля
Если вам нужна таблица, которая охватывает всех сотрудников, создайте список записей. Данные –> Получить данные –> Из других источников –> Пустой запрос. В строке формул введите:
= {[EmployeeID=1,EmployeeName="
Fred"
], [EmployeeID=2,EmployeeName="
John"
], [EmployeeID=3,EmployeeName="
Jane"
], [EmployeeID=4,EmployeeName="
Mary"
]}
Обратите внимание, что вы используете синтаксис для одной записи, а записи разделили запятыми. Все записи взяли в фигурные скобки, показывая, что они элементы списка. Нажмите Enter. Формула возвращает список записей:
Рис. 19.15. Список записей с предварительным просмотром
Стрелка в правом верхнем углу (2) позволяет развернуть строку формул, чтобы показать сразу несколько строк.
Преобразование нескольких записей в таблицу
Теперь вы можете преобразовать этот список записей в таблицу. Пройдите по меню Средства для списков –> Преобразование –> В таблицу. Оставьте установки в окне В таблицу без изменений:
Рис. 19.16. Настройка параметров преобразования списка в таблицу
Если в качестве разделите выбрать любой символ, преобразование в таблицу не удастся, и Power Query вернет ошибку:
Рис. 19.17. Ошибка преобразования в таблицу при попытке указать разделить
Итак, после преобразования в таблицу на основе установок, как на рис. 19.16, вы опять получаете не то, что могли бы ожидать:
Рис. 19.18. Таблица включает список записей
Кликните на значке Развернуть. Выберите все столбцы, снимите галочку Использовать исходное имя столбца как префикс:
Рис. 19.19. Наконец то получен правильный результат
Вы только что построили таблицу с нуля!
Теперь вы можете сохранить эту таблица, и даже объединить ее с другими запросами. Переименуйте запрос Table_From_Records. Главная –> Закрыть и загрузить в… –> Только создать подключение.
Создание записи из строки таблицы
Когда вы работали со списками, вы видели, как можно преобразовать столбец в список. Вы также можете преобразовать строку в запись. Для этого можно начать с нового запроса. В файле Excel перейдите на лист Sales и выберите любую ячейку в Таблице. Пройдите по меню Данные –> Из таблицы/диапазона. Чтобы извлечь первую запись, необходимо создать пустой шаг запроса. В области ПРИМЕНЕННЫЕ ШАГИ нажмите на первый шаг Источник (цифра 1 на рис. 19.20). Нажмите кнопку fx слева от строки формул (2):
Рис. 19.20. Создание пустого шага запроса
Появится окно предупреждения о вставке шага. Подтвердите. В строке формул появится заготовка:
=Источник
Измените эту формулу на =Источник{0}
Рис.19.21. Из таблицы выделена первая запись
При первоначальном импорте Таблицы Excel исходный шаг возвращает список записей. Поскольку для Power Query базовым значением является ноль, формула =Источник{0} возвращает первое значение в списке.
Вы можете извлечь только одно поле первой записи, например, цену. Измените этот шаг запроса на: =Источник{0}[Price]
Рис. 19.22. Извлечение цены из первой записи
Это очень важно, и пригодится во многих ситуациях, например, при управлении фильтрами (подробнее см. главу 20).
Завершите запрос. Переименуйте его Record_From_Table. Главная –> Закрыть и загрузить в… –> Только создать подключение.
Создание записей из каждой строки таблицы
Чтобы преобразовать все строки таблицы запроса в записи, вам нужно использовать небольшой трюк. В файле Excel перейдите на лист Sales и выберите любую ячейку в Таблице. Пройдите по меню Данные –> Из таблицы/диапазона. Таблица целиком загрузится в Power Query. Для создания записей вам нужен индекс каждой строки. Перейдите на вкладку Добавление столбца –> Столбец индекса. Переименуйте этот шаг (а не столбец) в области ПРИМЕНЕННЫЕ ШАГИ – AddedIndex (без пробела):
Рис. 19.23. Добавлен столбец индекса и переименован шаг
Теперь вы можете создать пользовательский столбец для преобразования строк в записи. Хитрость заключается в создании формулы, использующей индекс. столбца индекса, так как теперь у вас есть значение, необходимое для извлечения записей. Зачем тебе этот трюк? Вы не собираетесь работать на текущей строке, а скорее на выходе шага AddedIndex. Таким образом, вместо получения определенного значения (например, первой строки), вы можете динамически подавать его в запрос, чтобы получить каждую строку. Выполнить следующие действия:
Перейдите на вкладку Добавление столбца –> Настраиваемый столбец. Назовите его Records. Используйте формулу: =AddedIndex{[Индекс]}.
Рис. 19.24. Столбец записей
Строго говоря, переименовывать шаг, на котором был добавлен столбец индекса, было необязательным. Просто отсутствие пробела в имени шага упрощает синтаксис формулы. Удалите все остальные столбцы, оставив только столбец записей. Переименовать запрос Records_From_Table. Главная –> Закрыть и загрузить в… –> Только создать подключение.
Значение (Value)
При работе с базами данных иногда отображаются столбцы, содержащие Значение:
Рис. 19.25. Неуловимый объект Значение
Чтобы обнаружить этот объект, необходимо работать с базой данных, в которой между таблицами установлены связи. Значение – это способ, которым база данных возвращает связанную запись. Т.е., запись хранящуюся в другой таблице, а не в той, с которой вы сейчас работаете. Таблица на рис. 19.25 расположена в базе данных Adventureworks2012, к которой вы подключились в главе 8. Направление связи определяет, что возвращается в связанный столбец при работе с базой данных. Если вы находитесь в таблице фактов, и ссылка идет в таблицу измерений, вы получите значение (запись). Если вы находитесь в таблице измерений и ссылка идет в таблицу фактов, вы получите таблицу (подробнее см. Power Pivot. Мышление в нескольких таблицах).
Двоичные данные
Двоичные данные являются файлами. Некоторые из них можно объединять и читать с помощью функции Csv.Document(). В тоже время двоичные книги Excel нельзя объединять, а для чтения данных используется функция Excel.Workbook(). Процесс извлечения данных подробно рассмотрен ранее в главе 3 и главе 4. Мы упоминаем их здесь, поскольку они являются объектом Power Query.
Ошибки
Существует два типа сообщений об ошибках: ошибки уровня шага и ошибки уровня строки.
Ошибки на уровне строк обычно возникают при попытке преобразовать данные в неверный тип или при попытке оперировать данными до их преобразования в правильный тип. Вы уже видели несколько примеров таких ошибок ранее:
Рис. 19.26. Ошибка уровня строки, вызванная попыткой преобразовать страны в тип данных даты
Эти ошибки, как правило, не являются блокирующими, и они даже могут быть полезны при очистке данных, так как их можно обрабатывать двумя способами:
- Использовать в качестве фильтров для хранения / удаления строк
- Заменить другими данными, используя, например, команду Преобразование –> Замена значений –> Заменить ошибки.
Несмотря на то, что в Power Query нет механизма отладки, эти ошибки, как правило, идентифицируются и часто (хотя и не всегда) связаны с неверными типами данных.
Ошибки уровня шага
Эти ошибки серьезнее. Такие сообщения блокируют запрос, и в окне вывода ничего не отображается, кроме ошибки:
Рис. 19.27. Синтаксическая ошибка, вызванная отсутствием закрывающей скобки в конце формулы
Рис. 19.28. Вызывается функция SQL.Database; правильно Sql.Database
К сожалению, средства отладки Power Query особенно слабы в следующей ситуации:
Рис. 19.29. Синтаксическая ошибка, вызванная отсутствием }, но сообщающая об ожидании запятой
В самом конце строки находится полезный символ ^, который указывает, где Power Query считает, что нужна запятая. Однако, проблема в том, что не хватает фигурной скобки для закрытия списка "
YTD Sales"
в месте, на которое указывает красная стрелка. Жаль, что в редакторе нет встроенной подсветки ошибок. Но Power Query часто обновляется, и мы надеемся увидеть прогресс в этой области в будущем. Сейчас же, отладка заключается в просмотре строки, открывающих и закрывающих символов, запятых и т.п.
Функции
Функции используются в двух местах:
- Они могут находиться внутри базы данных, где они указывают на хранимую процедуру.
- Они могут быть возвращены в списке Power Query.
Об использовании и вызове функций мы расскажем позже. Сейчас же покажем один трюк, который покажет, как функции проявляются, а также откроет список функций Power Query. Данные –> Получить данные –> Из других источников –> Пустой запрос. В строке формул введите: =#shared. Появится список записей. Перейдите на вкладку Средства для записей –> Преобразовать –> В таблицу. Power Query генерирует таблицу всех элементов Power Query в текущей книге, а также список всех функций, включенных в продукт.
Рис. 19.30. Таблица функций
Вы можете получить доступ к документации для любой функции из этого списка, если кликните на слово Function, например:
Рис. 19.31. Синтаксис функции Table.Last
Более того, на переднем плане появится диалоговое окно вызова функции:
Рис. 19.32. Диалоговое окно функции Table.Last
Здесь можно протестировать функцию, а при нажатии кнопки Отмена окно исчезает.
Вам не обязательно создавать пустой запрос для вызова описания функции Power Query. Вы также можете в любой момент, когда вам это потребуется, кликнуть на fx слева от строки формул, чтобы добавить новый шаг. Замените код в новом шаге на =#shared. Нажмите Enter. Преобразуйте записи в таблицу. Можете использовать фильтр, чтобы найти функцию по имени. Кликните на слово Function напротив той функции, которую хотите изучить. Затем вы можете вернуться к другим шагам и продолжить формирование запроса. После того, как информация об этой или иной функции более не требуется, можете удалить шаги =#shared.