在 Power BI 中以 M 语言的 each 执行子查询
performing a subquery in an each in M language in Power BI
我正在将各种形式的 SQL 转换为 Power BI。我有以下 query/code 试图用 M 语法表示:
while($row = $result->fetch_assoc())
{
$rate = SELECT CAD FROM ExchangeRate WHERE date<='" . $row['d'] . "' ORDER BY date DESC LIMIT 1
$monthlySalesUSD += $daily/$rate;
}
基本上,它会查找一组特定交易日期的汇率,然后将当天的销售数据除以当天的汇率。
在 Power BI 高级查询中,我定义了以下摘录:
#"Added Custom1" = Table.AddColumn(#"Changed Type", "SalesUSD", each [Inserted Rounding] / List.First(Table.Column(Table.First(Table.SelectRows(Table.Sort(warehouse_ExchangeRate,{{"date", Order.Descending}}),each [date] <= #"Changed Type"[DATELASTFULFILLMENT])),"CAD"))),
#"Changed Type"
包含每日交易总额和日期。总数在 [Inserted Rounding]
中,日期在 [DATELASTFULFILLMENT]
中。所以基本上,对于 #"Changed Type"
中的每一行,我想获取日期,查找汇率,然后将销售额除以该汇率。我似乎无法得到的部分是如何从每个中的当前行中提取日期。
感谢 MarcelBeug pointing me in the right direction. I found this post,我找到了答案,这让我了解到您可以在添加列中执行 lambda。这给了我以下步骤:
#"Fixed Join" = Table.AddColumn(#"Inserted Date", "ExchangeRate",
(Earlier) => Table.SelectRows(warehouse_ExchangeRate,
each [date] <= Earlier[Date])),
#"Expanded ExchangeRate" = Table.ExpandTableColumn(#"Fixed Join", "ExchangeRate", {"CAD"}, {"CAD"})
这为我提供了小于销售日期的最接近的匹配项,然后我可以将其划分为销售以获得美元价值,然后 select 我需要的列。
我正在将各种形式的 SQL 转换为 Power BI。我有以下 query/code 试图用 M 语法表示:
while($row = $result->fetch_assoc())
{
$rate = SELECT CAD FROM ExchangeRate WHERE date<='" . $row['d'] . "' ORDER BY date DESC LIMIT 1
$monthlySalesUSD += $daily/$rate;
}
基本上,它会查找一组特定交易日期的汇率,然后将当天的销售数据除以当天的汇率。
在 Power BI 高级查询中,我定义了以下摘录:
#"Added Custom1" = Table.AddColumn(#"Changed Type", "SalesUSD", each [Inserted Rounding] / List.First(Table.Column(Table.First(Table.SelectRows(Table.Sort(warehouse_ExchangeRate,{{"date", Order.Descending}}),each [date] <= #"Changed Type"[DATELASTFULFILLMENT])),"CAD"))),
#"Changed Type"
包含每日交易总额和日期。总数在 [Inserted Rounding]
中,日期在 [DATELASTFULFILLMENT]
中。所以基本上,对于 #"Changed Type"
中的每一行,我想获取日期,查找汇率,然后将销售额除以该汇率。我似乎无法得到的部分是如何从每个中的当前行中提取日期。
感谢 MarcelBeug pointing me in the right direction. I found this post,我找到了答案,这让我了解到您可以在添加列中执行 lambda。这给了我以下步骤:
#"Fixed Join" = Table.AddColumn(#"Inserted Date", "ExchangeRate",
(Earlier) => Table.SelectRows(warehouse_ExchangeRate,
each [date] <= Earlier[Date])),
#"Expanded ExchangeRate" = Table.ExpandTableColumn(#"Fixed Join", "ExchangeRate", {"CAD"}, {"CAD"})
这为我提供了小于销售日期的最接近的匹配项,然后我可以将其划分为销售以获得美元价值,然后 select 我需要的列。