【发布时间】:2020-08-17 10:11:26
【问题描述】:
首先,我承认我不是 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:我们不能将运算符 & 应用于文本和表格类型。详情:
运算符 = &
左 = https://finnhub.io/api/v1/stock/metric?metric=price&token=ABCXYZ&symbol=
右 = [表格]
如果有人能提供有关在使用 each 关键字时如何为函数调用提供列表参数的任何见解,我将不胜感激。
编辑:这是我的原始方法,从技术上讲是可行的,但由于每秒 30 个 API 调用的限制,一些记录返回为 null。
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}})
在#“分组行”中
【问题讨论】:
标签: powerbi powerquery m