繁体   English   中英

Power BI M 语言列表。选择如何按日期过滤

[英]Power BI M Language List.Select How to filter by Date

当我使用这个: List.Select({[Date1], [Date2], [Date3]}, each _ < [Date4]) 它返回错误。 但是当我使用这个代码时: List.Select({"2020-01-01", "2020-02-01", "2020-03-01"}, each _ < "2020-04-01") 它返回值列表。

首先,我假设这是在 Table.AddColumn 之类的函数的上下文中 - 如果是这样,那么您的错误原因是:您正在引用内部函数的列表项参数而不是外部函数的表记录参数[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]
    )
)

我们可以看到实际上有两个在玩。 三点帮助我们理解问题:

  1. “each”是“(_)=>”的语法糖,它定义了一个函数,其中传递的参数用“_”引用
  2. 传递给外部的值是表的当前行作为记录,其中行中的每一列/值是所述记录中的一个字段; 方括号用于访问记录中的字段
  3. 对没有记录的字段的引用假定“_”是记录,例如“[Date1]”没有指定记录只是“_[Date1]”的语法糖

有了以上几点,我们可以将代码改写如下

    = Table.AddColumn(
        Table1, 
        "New Column Name", 
        (_)=> List.Select(
            {_[Date1],_[Date2],_[Date3]},
            (_)=> _ < _[Date4]
        )
    )

现在您可以看到有一个外部“_”将表的每一行作为记录引用,它允许我们访问带有例如“_[Date1]”的字段。 另一方面,内部“_”正在访问输入列表的每个值。 因此,在最内层函数“_ < _[Date4]”的上下文中,“_”仅指内部的“_” - 即您试图从日期值访问记录字段,从而导致错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM