创建新列以将值除以特定行值

问题描述 投票:0回答:1

我想获取一个源数据集,根据某些标准对其进行过滤,然后对每个值进行计算(将每个 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
powerbi powerquery
1个回答
0
投票

我的查询的输出与您在请求中指定的内容不完全匹配,但我在代码中添加了注释,以便您在我的代码不能完全满足您的需求时轻松调整:

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
© www.soinside.com 2019 - 2024. All rights reserved.