如何使用 PowerQuery 中的高级编辑器设置动态开始日期和结束日期

Posted

技术标签:

【中文标题】如何使用 PowerQuery 中的高级编辑器设置动态开始日期和结束日期【英文标题】:How to Set Up A Dynamic Startdate And Enddate using Advanced Editor in PowerQuery 【发布时间】:2022-01-13 23:39:54 【问题描述】:

我最初在PowerQuery 中创建了一个带有静态StartDateEndDate 的SQL 代码(参见下面的代码)。

具有静态值的 SQL 脚本:


Select extract(month from STAGE_DATE) as Calendar_Month, count(id) as 
        number_of_int
from stage_table 
where type_code LIKE 'X%'
and stage_date >= to_date('01022021','ddmmyyyy')  ---StartDate
and stage_date <= to_date('30042021','ddmmyyyy')  ---EndDate
group by extract(month from STAGE_DATE)

但是,我希望用户能够更改 StartDate 和 EndDate。经过一番研究,有一个叫做高级编辑器的功能可以使用。我创建了一个名为 Parameters (Insert--> Table) 的表:

Column 1: Parameter Column 2: Value
StartDate                  01022021
EndDate                    30042021

然后,我使用“高级编辑器”来定义参数表。我首先将 StartDate 命名如下:

(ParameterName as text) =>
let
ParamSource = Excel.CurrentWorkbook()[Name="Parameters"][Content],
ParamRow = Table.SelectRows(ParamSource, each ([Parameter] = ParameterName)),
Value=
if Table.IsEmpty(ParamRow)=true
then null
else Record.Field(ParamRow0,"Value")
in
Value

然后我在初始 SQL 中输入了 fnGetParameter('StartDate')(见下文),但我不断收到一条错误消息:“DataSource.Error: Oracle: ORA-00904: "FNGETPARAMETER": invalid identifier"

Select extract(month from STAGE_DATE) as Calendar_Month, count(id) as 
        number_of_int
from stage_table 
where type_code LIKE 'X%'
and stage_date >= to_date(fnGetParameter('StartDate'),'ddmmyyyy') 
and stage_date <= to_date(fnGetParameter('EndDate'),'ddmmyyyy') 
group by extract(month from STAGE_DATE)

enter image description here

提前感谢您对此进行调查!

【问题讨论】:

【参考方案1】:

我建议你使用 Ken Puls 的 fnGetParameter() 函数

你也可以看到excel-power-query-using-sql-to-pass-row-value-as-parameter

//Written by Ken Puls, FCPA, FCMA, MS MVP (Excel)
//Original Source: http://www.excelguru.ca/blog/2014/11/26/building-a-parameter-table-for-power-query/

(ParameterName as text) =>
let ParamSource = Excel.CurrentWorkbook()[Name="Parameters"][Content],
ParamRow = Table.SelectRows(ParamSource, each ([Parameter] = ParameterName)),
Value=if Table.IsEmpty(ParamRow)=true
then null
else Record.Field(ParamRow0,"Value")
in Value

然后将 StartDate 替换为 fnGetParameter("StartDate")

【讨论】:

谢谢你!我试过你的代码,但是在我的第一个 SQL 中用 fnGetParameter("StartDate") 替换 "01022021" 时。我收到一条错误消息,指出 fnGetParameter: Invalid identifier (where Datasource = Oracle Note: I named the Advanced Editor function = "StartDate" 如果你把函数命名为 StartDate 就不能使用 fnGetParameter 也许阅读原文在excelguru.ca/blog/2014/11/26/…看看它是如何使用的 我查看了 excelguru.ca/blog 并在创建 fnGetParameter 时卡住了。我没有得到“关闭并加载到...”选项。知道为什么吗?谢谢 我使用来自 Ken Puls 网站的代码创建了 fnGetParamater。我用 fnGetParamater ("StartDate") 替换了我的静态开始日期,但我不断收到一条错误消息:Oracle:ORA-00904:"FNGETPARAMETER": Invalid Identifier。下面是代码: Select extract(month from STAGE_DATE) as Calendar_Month, count(id) as number_of_int from stage_table where type_code LIKE 'X%' and stage_date >= to_date(fnGetParameter('Start Date'),'ddmmyyyy') -- -StartDate and stage_date 请编辑您的问题以反映您的代码的当前状态

以上是关于如何使用 PowerQuery 中的高级编辑器设置动态开始日期和结束日期的主要内容,如果未能解决你的问题,请参考以下文章

PowerQuery系列文章-调用外部Python 编辑器

powerquery不自动转换

excel如何通过powerquery生成某一区间内所有日期

PowerQuery

powerquery的sum公式

powerquery可以上载部分表格吗