Перво-наперво, признаюсь, я не эксперт по M или Power Query, хотя у меня есть некоторый опыт работы с Power BI.
Я пытаюсь разработать портфель акций, который будет отслеживать настроенный список акций с их ценовой историей и другими показателями. Часть моего кода основана на следующем блоге из-за проблемы, которую я пытаюсь решить:
https://datachant.com/2016/08/09/sentiment-analysis-power-bi-part-2/
У меня есть следующая функция getPriceMetrics
в моем проекте, который будет принимать один параметр Sym
и возвращать метрики цены для отдельного символа акции:
(Sym as any) => let
Source = Json.Document(Web.Contents("
https://finnhub.io/api/v1/stock/metric?metric=price&token=ABCXYZ&symbol=" & Sym))
in
Source
Параметр Sym
основан на «Запросе», который содержит список символов акции ,
Сама функция работает хорошо, когда я пытаюсь вызвать ее одним отдельным символом. Но я хотел бы запустить функцию со списком биржевых символов - отсюда и блог выше.
Я думаю, что решение, предложенное в блоге, хорошо послужит моей цели. Единственное затруднение в том, что я не могу правильно выполнить вызов функции с ключевым словом each
, я думаю:
Table.Group(#"Renamed Columns", {"Index"},
{{"Data", each getPriceMetrics(_), type record}})
В этот момент я получаю следующую ошибку.
Произошла ошибка в запросе getPriceMetrics. Expression.Error: Мы не можем применить оператор & к типам Text и Table. Детали:
Оператор = &
Слева = https://finnhub.io/api/v1/stock/metric?metric=price&token=ABCXYZ&symbol=
Справа = [Таблица]
Буду признателен, если кто-то может предложить Любое понимание того, как предоставить аргумент списка для вызова функции при использовании ключевого слова each
.
Редактировать: вот мой оригинальный подход, который работает с технической точки зрения, но из-за ограничения 30 вызовов API на во-вторых, некоторые записи возвращаются как нулевые.
let
Source = Excel.Workbook(File.Contents("C:\Users\Sikander\Google Drive\Docs\Finance\Investments\Questrade\FIRE_strategy.xlsx"), null, true),
Portfolio_Sheet = Source{[Item="Portfolio",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Portfolio_Sheet, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Symbol", type text}, {"Company", type text}}),
#"Invoked Custom Function" = Table.AddColumn(#"Changed Type", "getPriceMetrics", each getPriceMetrics([Symbol]))
in #"Invoked Custom Function"
Чтобы противостоять этому, я следовал подходу, предложенному в блоге, который позволит «обмануть» этот предел API, так сказать, путем индексации и группировки , вот так:
let
Source = Excel.Workbook(File.Contents("C:\Users\Sikander\Google Drive\Docs\Finance\Investments\Questrade\FIRE_strategy.xlsx"), null, true),
Portfolio_Sheet = Source{[Item="Portfolio",Kind="Sheet"]}[Data],
#"Promoted Headers" = Table.PromoteHeaders(Portfolio_Sheet, [PromoteAllScalars=true]),
#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Symbol", type text}, {"Company", type text}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
#"Integer-Divided Column" = Table.TransformColumns(#"Added Index", {{"Index", each Number.IntegerDivide(_, 10), Int64.Type}}),
#"Renamed Columns" = Table.RenameColumns(#"Integer-Divided Column",{{"Symbol", "Ticker"}}),
#"Grouped Rows" = Table.Group(#"Renamed Columns", {"Index"}, {{"Data", each getPriceMetrics(_), type record}})
в # "Сгруппированные строки"