问题总结:
我在Excel中有一个包含13列的PowerQuery表。第13列是自定义列"任务开始周数"。**我希望PowerQuery将公式应用于为此查询生成的每一行。**公式如下:
=IFS(AND('Program Dates'!$B$2<WEEKNUM(New_Items_to_Save[Start Date]),
WEEKNUM(New_Items_to_Save[Start Date])<54),
'Program Dates'!$G$2-('Program Dates'!$D$2-(-53+WEEKNUM(New_Items_to_Save[Start Date]))),
WEEKNUM(New_Items_to_Save[Start Date])<'Program Dates'!$B$2,
'Program Dates'!$G$2-('Program Dates'!$D$2-(-53+WEEKNUM(New_Items_to_Save[Start Date])))+53)
我在这里所做的是引用一个包含公式的单元格,这样我就可以对一个命名的区域运行GetValue()函数,我不能让它工作,我不知道我做错了什么。
提前感谢您的帮助!
上下文:
This is the query table I need to add the calculation to.
最后一列是自定义列,应使用以下单元格计算这些值:
This is the source of the other info needed to calculate the week number of the program, with reference arrows shown.
- 注意:**函数中引用的日期已使用WEEKNUM()操作进行了转换。我比较的是周#与周#,而不是日期与周#
功能逻辑:
- 和:**如果日期在当前年份范围内,即周数小于54,但在程序开始后,则执行此计算。
- IFS:**否则,如果第#周在计划结束前,即2023年,则执行此计算。
编辑:
下面是我要为这个自定义列中的每个新单元格调用的PowerQuery函数:
Parameter2 = Date.WeekOfYear(StartWeek)
let
GetWeek = ()
if GetValue("Start_Week") < Parameter2 < 54
then (GetValue("Program_Duration") - GetValue("End_Week") + 53 - Parameter2))
else
(GetValue("Program_Duration") - GetValue("End_Week") + 53 - Parameter2 +53))
in
GetWeek
我不知道我是否需要let语句或者我是否应该把它放在一个函数中
f(x)=〉[方程]
然后在幂查询中调用"... each f([列名])"?
1条答案
按热度按时间kq4fsx7k1#
我认为你的问题实际上有三个不同的部分,也许你的困惑来自于把它们都结合在一起。
我的看法是在这些部分:
1.如何创建一个 * 自定义 * 函数。
1.如何将函数应用于 * new * 列。
1.如何将函数应用于 * existing * 列。
如何创建 * 自定义 * 函数
在Power Query中创建自定义函数的主要方法有两种:
1.使用UI(遵循步骤here):
| 步骤|说明|图像|
| - ------| - ------| - ------|
| 1个|编写查询|
|
| 第二章|参数化查询|
|
| 三个|创建您的函数|
|
1.仅使用代码(遵循步骤here):
1.筛选表格的示例:
1.检查一个字符串是否包含另一个字符串的示例:
更多资源:
如何将函数应用于 * new * 列
也有两种不同的实现方式:
1.自定义列(遵循步骤here):
| 步骤|说明|图像|
| - ------| - ------| - ------|
| 1个|创建自定义列|
|
| 第二章|添加功能|
|
1.自定义功能(遵循步骤here):
| 步骤|说明|图像|
| - ------| - ------| - ------|
| 1个|调用自定义函数|
|
资料来源:
如何将函数应用于 * 现有 * 列
也有两种不同的方式来实现(不幸的是,只有纯代码才可能):
1.使用转换:
1.将整列大写的示例:
1.向一列中的所有行添加前缀的示例:
1.将列强制为澳大利亚格式的日期的示例:
1.使用替代品
1.替换某些文本的示例:
1.替换为另一列
中的值的示例
您的具体问题
没有一些虚拟数据可以使用,我在这里创建了一些。请注意,在将来,请提供一些数据在一个最小的可复制的例子(见here),以便我们可以很容易地从您的例子重新创建场景。
数据:
| 识别号|项目开始日期|程序结束日期|
| - ------| - ------| - ------|
| 1个|2020年1月1日|二○二一年十二月一日|
| 第二章|2022年1月1日|2023年3月1日|
| 三个|2022年3月1日|二○二二年十二月一日|
| 四个|2021年9月1日|二○二三年十二月一日|
| 五个|2023年1月1日|二○二三年十二月一日|
我认为您应该结合使用PowerQuery内置日期函数(请参见here)和一些PowerQuery条件流程(请参见here)。
我的代码看起来像这样:
最后的输出将如下所示:
| 识别号|项目开始日期|程序结束日期|今天日期|在当前年份|程序是当前的|做点什么|
| - ------| - ------| - ------| - ------| - ------| - ------| - ------|
| 1个|2020年1月1日|2021年1月12日|二○二二年十二月二十二日|正确|错误|* 无效 |
| 第二章|2022年1月1日|二○二三年三月一日|二○二二年十二月二十二日|正确|正确|做点什么|
| 三个|2022年3月1日|2022年1月12日|二○二二年十二月二十二日|正确|错误| 无效 |
| 四个|二○二一年九月一日|二〇二三年一月十二日|二○二二年十二月二十二日|正确|正确|做点什么|
| 五个|2023年1月1日|二〇二三年一月十二日|二○二二年十二月二十二日|正确|错误| 无效 *|
这将有助于您解决问题。