Power BI M Language List.Select 如何按日期过滤
Power BI M Language List.Select How to filter by Date
当我使用这个时:List.Select({[Date1], [Date2], [Date3]}, each _ < [Date4]) 它 returns 错误。但是当我使用这段代码时:List.Select({"2020-01-01", "2020-02-01", "2020-03-01"}, each _ < "2020-04-01")它 returns 值列表。
首先,我假设这是在像 Table.AddColumn 这样的函数的上下文中 - 如果是这样,那么错误的原因是:您正在引用内部函数的列表项参数而不是外部函数函数的 table 记录参数与“[Date4]”引用。
一旦您在所涉及的语法糖下公开完整代码,就更容易看到修复:只需为您的内部参数使用不同的标识符。
List.Select(
{[Date1],[Date2],[Date3]},
(ListItem)=> ListItem < [Date4]
)
以上是如何工作的?查看原始的完整 M 代码以获得一个想法,再次假设我们使用的是 Table.AddColumn:
这样的函数
= Table.AddColumn(
Table1,
"New Column Name",
each List.Select(
{[Date1],[Date2],[Date3]},
each _ < [Date4]
)
)
我们可以看到实际上有两个在起作用。三点帮助我们理解问题:
- "each" 是 "(_)=>" 的语法糖,它定义了一个函数,其中
传递的参数被引用为“_”
- 传递给外部的值 each 是 table 的当前行作为
记录行中的每个 column/value 是所述记录中的一个字段;方括号用于访问记录中的字段
- 对没有记录的字段的引用假定“_”是记录,例如“[Date1]”未指定
该记录只是“_[Date1]”
的语法糖
有了以上几点,我们可以改写代码如下
= Table.AddColumn(
Table1,
"New Column Name",
(_)=> List.Select(
{_[Date1],_[Date2],_[Date3]},
(_)=> _ < _[Date4]
)
)
现在您可以看到有一个外部“_”将 table 的每一行引用为一条记录,它允许我们访问带有例如“_[Date1]”的字段。另一方面,内部“_”正在访问输入列表的每个值。因此,在最内层函数“_ < _[Date4]”的上下文中,“_”仅指内部“_”——即您正试图从日期值访问记录字段,从而导致错误。
当我使用这个时:List.Select({[Date1], [Date2], [Date3]}, each _ < [Date4]) 它 returns 错误。但是当我使用这段代码时:List.Select({"2020-01-01", "2020-02-01", "2020-03-01"}, each _ < "2020-04-01")它 returns 值列表。
首先,我假设这是在像 Table.AddColumn 这样的函数的上下文中 - 如果是这样,那么错误的原因是:您正在引用内部函数的列表项参数而不是外部函数函数的 table 记录参数与“[Date4]”引用。
一旦您在所涉及的语法糖下公开完整代码,就更容易看到修复:只需为您的内部参数使用不同的标识符。
List.Select(
{[Date1],[Date2],[Date3]},
(ListItem)=> ListItem < [Date4]
)
以上是如何工作的?查看原始的完整 M 代码以获得一个想法,再次假设我们使用的是 Table.AddColumn:
这样的函数= Table.AddColumn(
Table1,
"New Column Name",
each List.Select(
{[Date1],[Date2],[Date3]},
each _ < [Date4]
)
)
我们可以看到实际上有两个在起作用。三点帮助我们理解问题:
- "each" 是 "(_)=>" 的语法糖,它定义了一个函数,其中 传递的参数被引用为“_”
- 传递给外部的值 each 是 table 的当前行作为 记录行中的每个 column/value 是所述记录中的一个字段;方括号用于访问记录中的字段
- 对没有记录的字段的引用假定“_”是记录,例如“[Date1]”未指定 该记录只是“_[Date1]” 的语法糖
有了以上几点,我们可以改写代码如下
= Table.AddColumn(
Table1,
"New Column Name",
(_)=> List.Select(
{_[Date1],_[Date2],_[Date3]},
(_)=> _ < _[Date4]
)
)
现在您可以看到有一个外部“_”将 table 的每一行引用为一条记录,它允许我们访问带有例如“_[Date1]”的字段。另一方面,内部“_”正在访问输入列表的每个值。因此,在最内层函数“_ < _[Date4]”的上下文中,“_”仅指内部“_”——即您正试图从日期值访问记录字段,从而导致错误。