PowerQuery - 动态日期参数

时间:2018-03-26 19:05:34

标签: powerquery excel-2016

我在Excel中有以下PowerQuery

let
    Source = Excel.CurrentWorkbook(){[Name="Query1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Month Year", type date}}),
    #"Custom Step"  = Table.SelectRows(#"Changed Type", each [Month Year] = #date(2017, 12, 1))
in
    #"Custom Step"

我想设置它以便#date(2017,12,1))是一个参数。换句话说,我希望在工作表上有一个过滤器/下拉列表以及用户选择的内容(2017年12月,2016年11月等)。我希望“自定义步骤”根据选择过滤表格。

是否有某种语法允许我使用参数? (有点像SQL中的@variable)

1 个答案:

答案 0 :(得分:1)

获取查询参数的方法有很多种。您可以使用命名范围并直接访问它或使用函数访问它,或者您甚至可以构建包含多个参数的表并使用函数访问它们。 Ken Puls对参数表here

有一个很好的起点

只需一个参数,您就可以简单地使用命名范围。在以下屏幕截图中,单元格F4的范围名称为SelectedDate。使用行

很容易获得此参数
myDate = Excel.CurrentWorkbook(){[Name="SelectedDate"]}[Content]{0}[Column1]

但结果将是文字,并且无法正确过滤表格。您需要将其转换为日期,例如将其包装到Date.From函数

myDate = Date.From(Excel.CurrentWorkbook(){[Name="SelectedDate"]}[Content]{0}[Column1]),

现在变量 myDate 可用于过滤表格。这是完整的M代码:

let
    myDate = Date.From(Excel.CurrentWorkbook(){[Name="SelectedDate"]}[Content]{0}[Column1]),
    Source = Excel.CurrentWorkbook(){[Name="Query1"]}[Content],
    ChangedType = Table.TransformColumnTypes(Source,{{"Month Year", type date}}),
    Filtered  = Table.SelectRows(ChangedType, each [Month Year] = myDate )
in
    Filtered

enter image description here