首页 > 解决方案 > 如何将函数中的变量列名用于其他函数?

问题描述

我编写了两个以日期为输入的函数,我将在多个查询中使用它们。而不是每次都进行手动工作(调用两个函数,过滤第一个函数返回 True 的行,将第二个函数的记录扩展为列,删除第一个函数列)我想我会编写另一个函数,它采用表的名称和以日期为参数的列以自动化该过程。如果我在代码中包含特定列的日期,我当前的基于表的函数可以工作,但是这些名称在不同的查询(表)之间会有所不同。

这是表函数的代码:

(t as table) =>
let
    FunctionFilter = Table.AddColumn(t, "DateFilter", each DateFilter([myDate2])),
    FunctionPeriods = Table.AddColumn(#"FunctionFilter", "TimePeriods", each TimePeriods([myDate2])),
    ExpandPeriods= Table.ExpandRecordColumn(FunctionPeriods, "TimePeriods", {"Year", "Quarter", "Month", "WeekMon", "WeekTue", "Day"},
    {"Year", "Quarter", "Month", "WeekMon", "WeekTue", "Day"}),
    TrueDate = Table.SelectRows(ExpandPeriods, each ([DateFilter] = true)),
    DeleteDateFilter = Table.RemoveColumns(TrueDate,{"DateFilter"})
in
    DeleteDateFilter

我唯一的问题是在此处插入一个变量列名代替 [myDate2]:

    FunctionFilter = Table.AddColumn(t, "DateFilter", each DateFilter([myDate2])),
    FunctionPeriods = Table.AddColumn(#"FunctionFilter", "TimePeriods", each TimePeriods([myDate2])),

使用 Table.Column(t,[column name]) 返回列表而不是日期,这会导致调用的日期函数引发类型不匹配错误。

标签: excelpowerquerym

解决方案


您可以使用这样的技术:

// Table
let
    Source = #table(3,List.Zip({{"a".."d"},{1..4},List.Numbers(10,4,10)})),
    fn = fn(Source, "Column3")
in
    fn

// fn
(tbl as table, col as text) =>
let
    i = Table.AddIndexColumn(tbl, "i", 0, 1),
    add = Table.AddColumn(i, "new",  each Table.Column(i, col){[i]}*10),
    del = Table.RemoveColumns(add, "i")
in
    del

推荐阅读