在2023年GPT開始使用時我就詢問過GPT,可能當時的GPT還不夠聰明,給予的答案無法運行,我認為原始的語法應該可以更聰明點,詢問過Power BI社群的人,但沒有人提供答案,終於在現在再度詢問GPT給予的答案與我思考的方向依樣,只是我懂得語法不多,透過GPT幫忙解答,我也學到了新知識。
下面是GPT提供目前最優的版本
let
// 定义日期和参数
起始日期 =
"2023/12/29",
最新日期 =
"2024/6/7",
周前日期 =
"2024/5/31",
日期列表 =
{"2023/12/29", "2024/5/10", "2024/5/17",
"2024/5/24", "2024/5/31", "2024/6/7"},
趴數 = 0.05, // 例如5%
// 数据处理
來源 =
Table.NestedJoin(投資組合, {"持股標的"}, 資料_5周, {"標的"}, "資料_5周", JoinKind.RightOuter),
已展開資料 =
Table.ExpandTableColumn(來源, "資料_5周", List.Combine({{"標的"}, 日期列表})),
已排序資料列 = Table.Sort(已展開資料, {{"持股標的",
Order.Descending}}),
已移除資料行 =
Table.RemoveColumns(已排序資料列, {"持股標的"}),
加入淨值 =
Table.AddColumn(已移除資料行, "淨值", each [股數] * [匯率] * Record.Field(_, 最新日期)),
Base_淨值總額 = List.Sum(加入淨值[淨值]),
加入年度漲幅 =
Table.AddColumn(加入淨值, "年度漲幅", each (Record.Field(_, 最新日期) - Record.Field(_, 起始日期)) / Record.Field(_, 起始日期), Percentage.Type),
加入周漲幅 =
Table.AddColumn(加入年度漲幅, "周漲幅", each (Record.Field(_, 最新日期) - Record.Field(_, 周前日期)) / Record.Field(_, 周前日期), Percentage.Type),
加入淨值比 =
Table.AddColumn(加入周漲幅, "淨值比", each [淨值] / Base_淨值總額, Percentage.Type),
移除多餘列 =
Table.RemoveColumns(加入淨值比, {"股數", "匯率", "淨值"}),
重新排列列 =
Table.ReorderColumns(移除多餘列, List.Combine({{"標的", "淨值比"}, 日期列表, {"周漲幅", "年度漲幅"}})),
排序及篩選 =
Table.SelectRows(
Table.Sort(重新排列列, {{"淨值比", Order.Descending}, {"標的", Order.Descending}}),
each (List.Contains(投資組合[持股標的], [標的]) or Number.Abs([周漲幅]) >= 趴數 or List.Contains(指數, [標的])) and not List.Contains(排除, [標的])
)
in
排序及篩選
下面是GPT提供減少手動版本
我只是將語法丟出,GPT自動提供簡易減少手動版本
let
來源 =
Table.NestedJoin(投資組合, {"持股標的"}, 資料_5周, {"標的"}, "資料_5周", JoinKind.RightOuter),
#"已展開 資料_5周____改" =
Table.ExpandTableColumn(來源, "資料_5周", {"標的","2023/12/29","2024/5/10","2024/5/17",
"2024/5/24","2024/5/31","2024/6/7"}),
已排序資料列 =
Table.Sort(#"已展開 資料_5周____改",{{"持股標的",
Order.Descending}}),
已移除資料行 =
Table.RemoveColumns(已排序資料列,{"持股標的"}),
// 獲取所有日期欄位名稱
日期欄位名稱 =
List.RemoveFirstN(List.RemoveItems(Table.ColumnNames(已移除資料行), {"標的", "股數", "匯率"}), 0),
最後一欄 = List.LastN(日期欄位名稱, 1){0},
最後第二欄 = List.LastN(日期欄位名稱, 2){0},
// 計算淨值
T淨值_______改 = Table.AddColumn(已移除資料行, "淨值", each [股數]*[匯率]*Record.Field(_, 最後一欄)),
Base_淨值總額 = List.Sum(T淨值_______改[淨值]),
// 計算年度漲幅和周漲幅
T年度漲幅_____改 =
Table.TransformColumnTypes(
Table.AddColumn(T淨值_______改, "年度漲幅", each (Record.Field(_, 最後一欄) - Record.Field(_, "2023/12/29")) / Record.Field(_,
"2023/12/29")),
{{"年度漲幅", Percentage.Type}}
),
T周漲幅_____改 =
Table.TransformColumnTypes(
Table.AddColumn(T年度漲幅_____改, "周漲幅", each (Record.Field(_, 最後一欄) - Record.Field(_, 最後第二欄)) / Record.Field(_, 最後第二欄)),
{{"周漲幅", Percentage.Type}}
),
// 計算淨值比
T淨值比 =
Table.TransformColumnTypes(
Table.AddColumn(T周漲幅_____改, "淨值比", each [淨值] / Base_淨值總額),
{{"淨值比", Percentage.Type}}
),
// 移除不必要的欄位
已移除資料行1 =
Table.RemoveColumns(T淨值比, {"股數", "匯率", "淨值"}),
// 重新排列欄位順序
重新排_____改 = Table.ReorderColumns(已移除資料行1, {"標的", "淨值比"} & 日期欄位名稱 & {"周漲幅", "年度漲幅"}),
// 排序及篩選資料
T排序及篩選 =
Table.SelectRows(
Table.Sort(重新排_____改, {{"淨值比", Order.Descending}, {"標的", Order.Descending}}),
each (List.Contains(投資組合[持股標的], [標的]) = true or Number.Abs([周漲幅]) >= 趴數 or List.Contains(指數, [標的]) = true) and List.Contains(排除, [標的]) = false
),
in
T排序及篩選
修改前的版本
let
來源 =
Table.NestedJoin(投資組合, {"持股標的"}, 資料_5周, {"標的"}, "資料_5周", JoinKind.RightOuter),
#"已展開 資料_5周____改" =
Table.ExpandTableColumn(來源, "資料_5周", {"標的","2023/12/29","2024/5/10","2024/5/17",
"2024/5/24","2024/5/31","2024/6/7"}),
已排序資料列 =
Table.Sort(#"已展開 資料_5周____改",{{"持股標的",
Order.Descending}}),
已移除資料行 =
Table.RemoveColumns(已排序資料列,{"持股標的"}),
T淨值_______改 = Table.AddColumn(已移除資料行, "淨值", each [股數]*[匯率]*[#"2024/6/7"]),
//這裡也要修改........
Base_淨值總額 = List.Sum(T淨值_______改[淨值]),
T年度漲幅_____改 =
Table.TransformColumnTypes(
Table.AddColumn(T淨值_______改, "年度漲幅", each
([#"2024/6/7"]-[#"2023/12/29"])/[#"2023/12/29"])
, //年度如果修改要去改
資料_5週那個進階查詢
{{"年度漲幅",
Percentage.Type}}),
T周漲幅_____改 =
Table.TransformColumnTypes(
Table.AddColumn(T年度漲幅_____改, "周漲幅", each
([#"2024/6/7"]-[#"2024/5/31"])/[#"2024/5/31"])
, //這裡也要改
{{"周漲幅",
Percentage.Type}}),
T淨值比 = Table.TransformColumnTypes(Table.AddColumn(T周漲幅_____改, "淨值比", each [淨值]/Base_淨值總額),{{"淨值比",
Percentage.Type}}),
已移除資料行1 =
Table.RemoveColumns(T淨值比,{"股數", "匯率","淨值"}),
重新排_____改 =
Table.ReorderColumns(已移除資料行1,{"標的", "淨值比","2023/12/29","2024/5/10","2024/5/17",
"2024/5/24","2024/5/31","2024/6/7","周漲幅", "年度漲幅"}),
T排序及篩選 =
Table.SelectRows(
Table.Sort(重新排_____改,{{"淨值比",
Order.Descending}, {"標的", Order.Descending}}) , each (List.Contains(投資組合[持股標的],[標的])=true or
Number.Abs([周漲幅])>=趴數 or List.Contains(指數,[標的])=true) and List.Contains(排除,[標的])=false )
in
T排序及篩選