Перейти к содержимому

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

  • автор:

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

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..

Работа с ошибками в Power Query

В Power Query можно столкнуться с двумя типами ошибок:

  • Ошибки на уровне шага
  • Ошибки на уровне ячеек

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

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

Ошибка на уровне шага предотвращает загрузку запроса и отображает компоненты ошибок на желтой панели.

Step-level error.

  • Причина ошибки: первый раздел перед двоеточием. В приведенном выше примере причина ошибки — Expression.Error.
  • Сообщение об ошибке: раздел непосредственно после причины. В приведенном выше примере сообщение об ошибке — столбец «Столбец» таблицы не найден.
  • Сведения об ошибке: раздел непосредственно после строки Details. В приведенном выше примере сведения об ошибке — Column.

Распространенные ошибки уровня шага

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

Go to error button.

Не удается найти источник — DataSource.Error

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

Пример. У вас есть запрос из текстовой плитки, которая была размещена на диске D и создана пользователем A. Пользователь A предоставляет общий доступ к запросу с пользователем B, у которого нет доступа к диску D. Когда этот пользователь пытается выполнить запрос, он получает dataSource.Error , так как в среде нет диска D.

Data source error, could not find the file because there

Возможные решения. Вы можете изменить путь к файлу текстового файла на путь, к которому у обоих пользователей есть доступ. Как пользователь B, вы можете изменить путь к файлу, чтобы быть локальной копией одного текстового файла. Если кнопка «Изменить параметры» доступна в области ошибок, ее можно выбрать и изменить путь к файлу.

Столбец таблицы не найден

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

Пример. У вас есть запрос из текстового файла, в котором одно из имен столбцов было Столбцом. В запросе есть шаг, который переименовывает этот столбец на date. Но в исходном текстовом файле произошло изменение, и он больше не имеет заголовка столбца с именем Столбца , так как он был изменен вручную на Date. Power Query не может найти заголовок столбца с именем Column, поэтому он не может переименовать столбцы. Отображается ошибка, показанная на следующем рисунке.

Expression error, the column of the table wasn

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

Другие распространенные ошибки уровня шага

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

Formula Firewall error, the query references other queries or steps, so it may not directly access a data source.

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

Ошибка уровня ячейки

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

Displaying the error message by selecting whitespace in a table cell containing an error.

Средства профилирования данных помогают более легко выявлять ошибки на уровне ячеек с помощью функции качества столбца. Дополнительные сведения: средства профилирования данных

Обработка ошибок на уровне ячейки

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

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

Displays data format error, couldn

Удаление ошибок

Чтобы удалить строки с ошибками в Power Query, сначала выберите столбец, содержащий ошибки. На вкладке «Главная» в группе «Уменьшить строки » выберите » Удалить строки«. В раскрывающемся меню выберите «Удалить ошибки«.

Remove errors button on the Home tab.

Результат этой операции даст вам таблицу, которую вы ищете.

Table that previously contained five rows now has the row that contained the error removed, leaving four rows in the table.

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

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

Replace errors button on the Transform tab.

В диалоговом окне «Замена ошибок» введите значение 10, так как вы хотите заменить все ошибки значением 10.

Replace errors dialog box.

Результат этой операции даст вам таблицу, которую вы ищете.

Table in which the third row contained an error in the Sales column now has the error replaced with the value 10.

Сохранение ошибок

Power Query может служить хорошим средством аудита для идентификации строк с ошибками, даже если не исправлять ошибки. Это место, где может быть полезно сохранить ошибки . Чтобы сохранить строки с ошибками, сначала выберите столбец, содержащий ошибки. На вкладке «Главная» в группе «Уменьшить строки » выберите «Сохранить строки«. В раскрывающемся меню выберите «Сохранить ошибки«.

Keep errors button on the Home tab.

Результат этой операции даст вам таблицу, которую вы ищете.

Final table that keeps only rows that contain errors.

Распространенные ошибки на уровне ячеек

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

Ошибки преобразования типов данных

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

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

Could not convert to data type error details.

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

Ошибки операций

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

Пример. Вы хотите создать настраиваемый столбец для запроса, создав текстовую строку, содержащую фразу Total Sales: «Суммарные продажи» со значением из столбца Sales . Ошибка возникает, так как операция объединения поддерживает только текстовые столбцы, а не числовые.

Expression error in the error pane caused by trying to apply an And operator to text and a number from the Sales column.

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

Table with the sales column converted from a Number data type to a Text data type, and the resulting a new column containing both expressions.

Вложенные значения, отображаемые как ошибки

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

Error for nested values triggered by formula firewall taken place

Expression.Error: We cannot return a value of type in this context Details: In the past we would have returned a text value of , but we now return this error. Please see https://go.microsoft.com/fwlink/?linkid=2099726 for more information. 

Эти ошибки обычно возникают по двум причинам:

  • Когда брандмауэр конфиденциальности данных буферизирует источник данных, вложенные не скалярные значения автоматически преобразуются в ошибки.
  • Если столбец, определенный с Any типом данных, содержит не скалярные значения, такие значения будут сообщаться как ошибки во время загрузки (например, в книге в Excel или модели данных в Power BI Desktop).

Возможные решения:

  • Удалите столбец, содержащий ошибку, или задайте тип данных, отличный Any от типа данных для такого столбца.
  • Измените уровни конфиденциальности источников данных, участвующих в одном из них, что позволяет объединять их без буферизации.
  • Неструктурируйте таблицы перед слиянием, чтобы исключить столбцы, содержащие вложенные структурированные значения (например, таблицу, запись или список).

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

Argument ‘Topic id’ is null or empty

Сейчас на форуме

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

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

ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

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

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