Аргументы 2 были переданы функции которая ожидает 1
Перейти к содержимому

Аргументы 2 были переданы функции которая ожидает 1

  • автор:

Expression.Error: 2 arguments were passed to a function which expects 1

I have been trying to build an automated vba tool to pull API data but kept having below error from Power Query. Expression.Error: 2 arguments were passed to a function which expects 1. Details: Pattern= Arguments=[List] Kept looking up the solution but could not really find the right reason. Here is my code as below

let Parameter = Excel.CurrentWorkbook()[Content], URL= Parameter[Column1], Source = Json.Document(Web.Page(Web.Contents(URL), [ Headers =[#"Authorization"="Basic ENCODE64PASSWORDS"]])), #"Converted to Table" = Record.ToTable(Source), Value = #"Converted to Table"[Value], results = Value[results], #"Converted to Table1" = Table.FromList(results, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table1", "Column1", , ), #"Filtered Rows" = Table.SelectRows(#"Expanded Column1", each ([upsertable] = true)), #"Sorted Rows" = Table.Sort(#"Filtered Rows",>) in #"Sorted Rows" 

I am no professional coder but just started to feel interested in coding world. This code is mostly just mixture of copy and paste all over the web haha So please understand im only a beginner with a baby step and forgive my ignorance if this is actually a simple matter..or if I dont really understand your reply well..

Аргументы 2 были переданы функции которая ожидает 1

Текст представляет собой адаптированный перевод статьи Chris Webb (Крис Вебб),
оригинал – Expression.Evaluate() In Power Query/M. Рассматривается англоязычный Power Query.

Крис Вебб (Chris Webb) — независимый эксперт, консультант по технологиям Analysis Services, MDX, Power Pivot, DAX, Power Query и Power BI. Его блог — это кладезь информации на тему перечисленных технологий. Вот уже более 10 лет он пишет про BI-решения от Microsoft. Количество его статей перевалило за 1000! Также Крис выступает на большом количестве различных конференций вроде SQLBits, PASS Summit, PASS BA Conference, SQL Saturdays и участвует в различных сообществах.
Крис любезно разрешил нам переводить его статьи на русский язык. И это одна из них.

Функция Expression.Evaluate() в Power Query/M

Некоторое время назад была написана статья, где описывается загрузка М кода из текстового файла с помощью функции Expression.Evaluate(). Сегодня мы рассмотрим эту функцию более подробно и добавим несколько примеров к тем, что есть на официальном сайте Майкрософт.

Документация даёт ясный ответ, что делает Expression.Evaluate: берёт выражение на языке М, вычисляет и возвращает результат. Тут важно понимать, что выражение на языке М может быть больше, чем строка кода. Фактически, запрос Power Query является одним выражением.

Вот простой пример использования Expression.Evaluate():

let Source = Expression.Evaluate("""Hello World""") in Source

Excel это не сложно

Основные форумы => PowerQuery, PowerPivot, PowerBI и запросы => Тема начата: markiza от 23.08.2017, 18:21:29

Здравствуйте! Я загружаю с помощью Power Query в Excel 2016 фин. данные с сайта, где по разным компаниям данные могут быть за разное количество лет. Запрос создавала для таблицы с максимальным количеством столбцов. При попытке загрузить данные по компании, имеющей данные за меньшее количество лет, получаю ошибку, что столбец такой-то не найден. Подскажите, пожалуйста, как переписать запрос, чтобы в запрос подставлялись только те столбцы, которые есть в исходной таблице?

Мой запрос сейчас следующий:

let 
Источник = Web.Page(Web.Contents("https://www.gurufocus.com/financials/" & Excel.CurrentWorkbook()[Content][Тикер])),
Data1 = Источник[Data],
#"Измененный тип" = Table.TransformColumnTypes(Data1,, , , , , , , , , , , , , , , , , , , , , , >),
#"Пониженные заголовки" = Table.DemoteHeaders(#"Измененный тип"),
#"Пониженные заголовки1" = Table.DemoteHeaders(#"Пониженные заголовки"),
#"Удаленные верхние строки" = Table.Skip(#"Пониженные заголовки1",2),
#"Повышенные заголовки" = Table.PromoteHeaders(#"Удаленные верхние строки")
in
#"Повышенные заголовки"

Название: Re:Запрос Power Query для таблицы с динамическим количеством столбцов
Отправлено: Дмитрий Щербаков(The_Prist) от 23.08.2017, 18:47:14

Писал я на эту тему статью где-то месяц назад еще: Собрать данные с таблиц с изменяющимися столбцами в PowerQuery (http://www.excel-vba.ru/chto-umeet-excel/sobrat-dannye-s-tablic-s-izmenyayushhimisya-stolbcami-v-powerquery/)
Как раз Ваш случай. Главное не ленитесь разобраться.

Название: Re:Запрос Power Query для таблицы с динамическим количеством столбцов
Отправлено: markiza от 24.08.2017, 16:17:37

Спасибо за ссылку, я, собственно, и написала на форум после прочтения этой статьи. Подскажите, пожалуйста, как можно просто запросить у источника названия столбцов таблицы без создания дополнительного столбца? Вы создавали столбец, т.к. потом Вам нужно было с ним работать. У меня же очень простая задача — мне лишь нужно загрузить с сайта то количество столбцов с данными, которое имеется по запрашиваемому тикеру (компании). Помогите, пожалуйста. Я попыталась самостоятельно переписать запрос, но выдается ошибка Аргументы 2 были переданы функции, которая ожидает 1.

let 
Источник = Web.Page(Web.Contents("https://www.gurufocus.com/financials/" & Excel.CurrentWorkbook()[Content][Тикер])),
Data1 = Источник[Data],
ColNames = Table.ColumnNames(Data1, type list),
#"Измененный тип" = Table.TransformColumnTypes(Data1,ColNames)
in
#"Измененный тип

Название: Re:Запрос Power Query для таблицы с динамическим количеством столбцов
Отправлено: Дмитрий Щербаков(The_Prist) от 24.08.2017, 18:01:25

Вы бы хоть чуточку объяснили чего хотите.
Ошибку явно выдает на строке:
#"Измененный тип" = Table.TransformColumnTypes(Data1,ColNames)
Вы понимаете что она делает? Она изменяет типы данных для столбцов. Как правило этот шаг PQ добавляет автоматом и не всегда вообще нужен. И выглядеть этот шаг должен не так, как указано у Вас — синтаксис хромает. Сравните хотя бы со своим кодом из первого сообщения.
Вам для получения заголовков достаточно этой строки:
ColNames = Table.ColumnNames(Data1, type list),
Она как раз и содержит все заголовки таблицы источника.
А далее её надо правильно применять в зависимости от действий. А вот что это за действия я не знаю, следовательно подсказать ничего не могу. В Вашем первом сообщении нет и намека на необходимость использования динамических заголовков, т.к. данные все равно текстовые создаются.

Название: Re:Запрос Power Query для таблицы с динамическим количеством столбцов
Отправлено: markiza от 24.08.2017, 18:32:33

Да, действительно, этот шаг создался автоматически. Еще раз опишу задачу. Я обращаюсь к одной определенной таблице на сайте, она содержит массу финансовых показателей за разные периоды времени. Каждый раз я запрашиваю данные по разным компаниям и количество столбцов может отличаться, т.к. у каких-то компаний данные могут быть за меньшее, чем у других, количество периодов. Названия столбцов тоже могут отличаться. Мне нужно запросить у источника перечень столбцов и загрузить в Excel данные по всем строкам всех столбцов таблицы. Список заголовков есть, а как мне обратиться к источнику, чтобы загрузить данные?

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

Название: Re:Запрос Power Query для таблицы с динамическим количеством столбцов
Отправлено: Дмитрий Щербаков(The_Prist) от 24.08.2017, 18:59:11

Мне нужно запросить у источника перечень столбцов и загрузить в Excel данные по всем строкам всех столбцов таблицы

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

let 
Источник = Web.Page(Web.Contents("https://www.gurufocus.com/financials/" & Excel.CurrentWorkbook()[Content][Тикер])),
Data1 = Источник[Data],
#"Пониженные заголовки" = Table.DemoteHeaders(Data1),
#"Пониженные заголовки1" = Table.DemoteHeaders(#"Пониженные заголовки"),
#"Удаленные верхние строки" = Table.Skip(#"Пониженные заголовки1",2),
#"Повышенные заголовки" = Table.PromoteHeaders(#"Удаленные верхние строки")
in
#"Повышенные заголовки"

Просто пропускаем шаг с изменением типа данных.

Название: Re:Запрос Power Query для таблицы с динамическим количеством столбцов
Отправлено: markiza от 25.08.2017, 18:29:03

Аргументы 2 были переданы функции которая ожидает 1

Есть файл xml. Открываю его с помощью PowerQuery.
Захожу -> offer (table) — нужен столбец param (со вложенными таблицами

Есть некая таблица с параметрами товаров и в столбце param есть также вложенные параметры отдельно взятой позиции в табличке.

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

Мне нужно чтобы ети параметры во вложенной таблице выводились не вниз

, а в одну строку попорядке по в столбцах.

ТОБИШЬ чтобы вложенные таблицы развернуть по ширине в длинну, тогда в исходной таблице названия не будут дублироватся, а все будет идти в один ряд.

Понимаю что задача непростая. (по крайней мере для меня очень сложная)
Как ее можно решить? Я в екселе чайник.
Буду ОООЧЕНЬ БЛАГОДАРЕН ЗА ПОМОЩЬ.

Есть файл xml. Открываю его с помощью PowerQuery.
Захожу -> offer (table) — нужен столбец param (со вложенными таблицами

Есть некая таблица с параметрами товаров и в столбце param есть также вложенные параметры отдельно взятой позиции в табличке.

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

Мне нужно чтобы ети параметры во вложенной таблице выводились не вниз

, а в одну строку попорядке по в столбцах.

ТОБИШЬ чтобы вложенные таблицы развернуть по ширине в длинну, тогда в исходной таблице названия не будут дублироватся, а все будет идти в один ряд.

Понимаю что задача непростая. (по крайней мере для меня очень сложная)
Как ее можно решить? Я в екселе чайник.
Буду ОООЧЕНЬ БЛАГОДАРЕН ЗА ПОМОЩЬ. yuraok

К сообщению приложен файл: primer1.xml (49.9 Kb)
Сообщение отредактировал yuraok — Понедельник, 25.05.2020, 21:28

Сообщение Есть файл xml. Открываю его с помощью PowerQuery.
Захожу -> offer (table) — нужен столбец param (со вложенными таблицами

Есть некая таблица с параметрами товаров и в столбце param есть также вложенные параметры отдельно взятой позиции в табличке.

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

Мне нужно чтобы ети параметры во вложенной таблице выводились не вниз

, а в одну строку попорядке по в столбцах.

ТОБИШЬ чтобы вложенные таблицы развернуть по ширине в длинну, тогда в исходной таблице названия не будут дублироватся, а все будет идти в один ряд.

Понимаю что задача непростая. (по крайней мере для меня очень сложная)
Как ее можно решить? Я в екселе чайник.
Буду ОООЧЕНЬ БЛАГОДАРЕН ЗА ПОМОЩЬ. Автор — yuraok
Дата добавления — 25.05.2020 в 21:23

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *