테이블의 열끼리의 계산을 레코드 함수로

하고 싶은 일



테이블의 특정 여러 열에 동일한 행의 특정 열 값을 곱하고 결과를 새 열로 갖습니다. 이미지는 아래 이미지와 같습니다.
※Power BI 공부회 Power Query 비밀 특훈 「호랑이의 구멍」 #3에서, 이야기가 나온 계산 방법의 재현입니다.


모델 데이터



뭐든지 괜찮습니다만, 이 때, 최근의 마이 붐의 List.Generate()를 사용해, 테이블을 만들었습니다.

모델 데이터
let
    ソース = List.Generate(
                ()=>[index=0,a=100,b=200,c=150,rate=1.5],
                each [index]<50,
                each [index=[index]+1,a=[a]+10,b=[b]+11,c=[c]+5,rate=[rate]+0.1]
    ),
    テーブルに変換済み = Table.FromList(ソース, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"展開された Column1" = Table.ExpandRecordColumn(テーブルに変換済み, "Column1", 
                    {"index", "a", "b", "c", "rate"}, {"index", "a", "b", "c", "rate"})
in
    #"展開された Column1"

↓완성되는 테이블


각 행의 계산 결과를 레코드에 포함하는 열을 추가하는 코드



아래 코드에서 레코드가있는 상태가됩니다. expand는 UI로 하는 편이 열명 붙이는 수고를 생략할 수 있으므로, 쓰지 않습니다.
let
    ソース = モデルテーブル,
    列追加 = Table.AddColumn(ソース, "A国", 
                        (rec)=>Record.TransformFields(rec,{
                            {"a",each _*rec[rate]},
                            {"b",each _*rec[rate]},
                            {"c",each _*rec[rate]}
                            })
                        )
in
    列追加

별법 : 열명의 리스트를 건네주어 단번에 계산시켜 보았다



대상으로 하는 열명의 리스트를 인수로 해 주는 것도 할 수 있을 것 같네요.
기분이 좋으면 기사에 추가할지도 모릅니다.

↓ 썼습니다. (추기 2019.4.8)
열이 많거나 반복적으로 이 계산을 하는 장면이 나오면 활약할지도 모릅니다.
이번에는 인수가 섞이지 않기 때문에 보통 each와 _로 썼습니다. (물론 위의 코드와 마찬가지로 수법도 가능)

열 이름 목록을 전달하는 버전
let
    ソース = モデルテーブル,
    列追加 = Table.AddColumn(ソース, "カスタム", 
                each List.Accumulate({"a","b","c"},
                                        [],
                                        (state,current)=>
                                        Record.AddField(state,current,
                                            Record.Field(_,current)*_[rate]
                                        )
                )
    )
in
    列追加

보충: List.Accumulate 함수


  • @PowerBIxyz 님의 기사(권장)
    Power Query의 List.Accumulate 함수는 무엇입니까?
  • 공식 참조 (간단한 예가 실려 있습니다)
  • 좋은 웹페이지 즐겨찾기