我想获取一个源数据集,根据某些标准对其进行过滤,然后对每个值进行计算(将每个 gpt_date 的值除以第二个 gpt_date 的值)。预期输出是通过空白查询生成的新表,该表输出每个 gpt_date 的新计算值。就上下文而言,这是从利率曲线中获取每日贴现因子,并将其向前滚动一个工作日。这是财务估值的常见用法。
我一直在尝试通过 Power Query 在我的 Power BI 报告中构建此代码,但一直在努力让代码正常工作(在 Power Query M 中仍然很新)。我非常感谢您的帮助,因为希望这个示例能让我了解如何在将来执行类似的代码。
您可以看到我对初始数据集采取的以下操作。我首先需要通过获取每个 gpt_date 集的最大值来过滤每个 gpt_date 使用的正确值。然后,我想将每个值除以第二个 gpt_date 的值(在本例中为 10/28/2024 gpt_date)。最后一步是将这个新数据集输出到空白查询中,排除 10/25/2025 gpt_date,因为它不再适用。
行动 | 描述 |
---|---|
步骤1= | 过滤每个 gpt_date 的最大值(因为初始数据集中每个 gpt_date 存在两个值) |
步骤2= | 将每个 gpt_date 的 Step1 值除以第二个 gpt_date 的 Step1 值 |
步骤3= | 输出新表中每个 gpt_date 的 Step2 值(空白查询) |
初始数据集 | |
---|---|
gpt_日期 | 价值 |
2024年10月25日 | 1 |
2024年10月25日 | 0.0426 |
2024年10月28日 | 0.9995267787 |
2024年10月28日 | 0.0426 |
2024年10月31日 | 0.9991749239 |
2024年10月31日 | 0.04245 |
2024 年 11 月 1 日 | 0.9990617737 |
2024 年 11 月 1 日 | 0.04224 |
2024年6月11日 | 0.9984769111 |
2024年6月11日 | 0.04221 |
2024 年 8 月 11 日 | 0.9982427957 |
2024 年 8 月 11 日 | 0.04221 |
2024 年 11 月 11 日 | 0.9978917255 |
2024 年 11 月 11 日 | 0.04221 |
输出数据集 | |
---|---|
gpt_日期 | 价值_滚动 |
2024年10月28日 | 1 |
2024年10月31日 | 0.9996479786 |
2024 年 11 月 1 日 | 0.9995347749 |
2024年6月11日 | 0.9989496354 |
2024 年 8 月 11 日 | 0.9987154091 |
2024 年 11 月 11 日 | 0.9983641728 |
我的查询的输出与您在请求中指定的内容不完全匹配,但我在代码中添加了注释,以便您在我的代码不能完全满足您的需求时轻松调整:
let
Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
ChangedType = Table.TransformColumnTypes(Source,{{"gpt_date", type datetime}, {"Value", type number}}),
// Group by 'gpt_date' and calculate the Max (or Min) for each date - chjange as required
GroupedData = Table.Group(ChangedType, {"gpt_date"},
{
{"Value", each List.Min([Value]), type number}
}
),
// Add Index Column starting from 1
AddIndex = Table.AddIndexColumn(GroupedData, "Index", 1, 1, Int64.Type),
// Add Previous Value column, offset by one row
AddPreviousValue = Table.AddColumn(AddIndex, "Previous Value",
each if [Index] = 1 then null else AddIndex[Value]{[Index] - 2}),
// Calculate the Ratio (Min Value / Previous Min Value)
AddRatio = Table.AddColumn(AddPreviousValue, "Value_rolled",
each if [Previous Value] = null then null else [Value] / [Previous Value],
type number),
// Remove Index and Previous Min Value columns if they are not needed
RemoveExtraColumns = Table.RemoveColumns(AddRatio,{"Index", "Previous Value", "Value"})
in
RemoveExtraColumns