다른 열을 기준으로 열을 변환하는 파워 쿼리
나는 이것이 쉬울 것이라고 계속 생각하지만 답은 나를 회피하고 있습니다.Excel Power Query에서는 다른 열의 값을 기준으로 열의 각 행의 값을 변환하고자 합니다.예를 들어, 다음과 같이 표 1을 가지고 있다고 가정합니다.
Column A | Column B
-------------------
X | 1
Y | 2
새 열을 추가하고 원래 열 A를 대체할 필요 없이 열 B의 값을 기준으로 열 A의 값을 변환하고 싶습니다.TransformColumns를 사용해 보았지만 입력은 대상 열의 값만 될 수 있습니다. TransformColumns 함수 내에서 행/기록의 다른 필드 값에 액세스할 수 없습니다.저는 다음과 같은 일을 하고 싶습니다.
=Table.TransformColumns(Table1, {"Column A", each if [Column B]=1 then "Z" else _ })
결과는 다음과 같습니다.
Column A | Column B
-------------------
Z | 1
Y | 2
이를 위한 방법이 있다는 것을 알고 있지만 단계/변환을 최소화하는 방법을 찾고 있습니다.예를 들어, 저는 테이블을 사용할 수 있다는 것을 알고 있습니다.열 B를 보는 함수를 기반으로 새로운 열 A를 추가하기 위해 열을 추가하지만, 원래의 열 A를 제거하고 여러 단계를 추가해야 하는 새로운 열 A로 대체해야 합니다.
제가 이렇게 하게 된 계기는 다음과 같습니다.
Table1:
Column A | Column B
-------------------
X | 1
Y | 2
= Table.FromRecords(Table.TransformRows(Table1,
(r) => Record.TransformFields(r,
{"A", each if r[Column B]="1" then "Z" else _})))
결과:
Column A | Column B
-------------------
Z | 1
Y | 2
이렇게 하면 레코드에서 중첩된 목록을 사용하여 여러 열을 한 번에 변환할 수 있습니다.TransformFields 함수.
또 다른 대안은 다음과 같습니다.
= 테이블.Replace Value(표 1, 각 [열 A], 각 [열 B]=1인 경우 "Z", 다른 [열 A] , Replacer.텍스트 바꾸기, {"열 A"})
코드는 읽기 쉽지만 한 번에 하나의 열에만 적용할 수 있습니다.
대부분 여기에 나와 있는 것처럼 UI를 사용하여 생성할 수 있습니다. http://www.thebiccountant.com/2017/07/23/transforming-a-column-with-values-from-another-column-in-powerbi-and-powerquery-in-excel/
로건에게 경의를 표합니다.스노우에이터...대답 너무 좋아요.여러 작업에 대해 확장할 수 있다고 말씀하셨고 이를 성공적으로 사용한 예를 게시하고 싶었습니다.
#"Patch Records" = Table.FromRecords(Table.TransformRows(#"Sorted Rows",
(r) => Record.TransformFields( r, {
{"Min Commit", each
if r[service_id] = "21430" then 81 else
if r[service_id] = "24000" then 230 else
if r[service_id] = "24008" then 18 else
if r[service_id] = "24009" then 46.9 else
_},
{"Installed", each
if r[service_id] = "21430" then 90 else
if r[service_id] = "24000" then 230 else
if r[service_id] = "24008" then 18 else
if r[service_id] = "24009" then 52 else
_},
{"Requested", each
if r[service_id] = "21430" then 90 else
if r[service_id] = "24000" then 230 else
if r[service_id] = "24008" then 18 else
if r[service_id] = "24009" then 52 else
_}})))
제가 유일하게 놀란 것은 모든 데이터 유형을 완료한 후 다시 설정해야 한다는 것이었습니다. 하지만 돌이켜보면 그럴 만도 합니다.
p.s. 나는 이것을 해결책에 대한 의견으로 게시하기에 충분한 평판 포인트가 없었습니다.
로건을 기반으로 하는SnowEater의 답은 표의 두 번째 인수를 사용하여 표 열 유형을 유지하는 한 가지 방법입니다.M 참조에 지정된 레코드에서:
Table1:
Column A | Column B
-------------------
X | 1
Y | 2
편집: 값을 사용하여 테이블에서 테이블 유형을 추출하는 훨씬 더 나은 방법을 사용하도록 업데이트되었습니다.입력 - 또한 여러 열을 한 번에 수정하여 완성도를 높입니다.가치에 대한 훌륭한 대화 덕분입니다.유형: https://social.technet.microsoft.com/Forums/en-US/636e9b44-6820-4ff2-ab60-5dd6a5307bd2/type-conversion-mysteries
=Table.FromRecords(
Table.TransformRows(
Table1,
(r) =>
Record.TransformFields(
r,
{
{"Column A", each if r[Column B]="1" then "Z" else _},
{"Column B", each if r[Column A]="Y" then "99" else _}
}
)
),
Value.Type(Table1)
)
공식을 잘 편집하지 못해서 죄송합니다. 이제 효과가 있습니다.
= Table.ReplaceValue( #"Removed Columns",
each [Contract Start Date],
each if [Contract Start Date] < #date(2019,01,01) then #date(2019,01,01) else
[Contract Start Date]
,Replacer.ReplaceValue,
{"Contract Start Date"})
이러한 단계로는 기존 열을 변환할 수 없습니다.새 열을 사용하고 변환한 다음 기존 열을 삭제합니다.뭐가 그리 대단한 일입니까?Excel에서는 공식이 다른 열의 값을 변경하는 것을 기대할 수 없습니다.검정력 쿼리에서는 수식의 결과도 열에 저장되며, 이 열은 수식 입력 값 중 하나를 제공하는 열이 될 수 없습니다.
언급URL : https://stackoverflow.com/questions/31548135/power-query-transform-a-column-based-on-another-column
'programing' 카테고리의 다른 글
데이터 프레임의 모든 특정 값 바꾸기 (0) | 2023.09.25 |
---|---|
MVC4 - 최적화가 true로 설정된 경우 번들링이 작동하지 않습니다. (0) | 2023.09.25 |
Jquery/PHP를 이용한 채팅방 구현 방법은? (0) | 2023.09.25 |
':' 문자(16진수 값 0x3A)는 이름에 포함할 수 없습니다. (0) | 2023.09.20 |
PowerShell을 사용하여 'date-1'을 mm-dd-yyyy로 포맷하려면 어떻게 해야 합니까? (0) | 2023.09.20 |