값이 변경될 때까지 열 값을 기준으로 여러 행 내의 여러 열을 결합합니다.

값이 변경될 때까지 열 값을 기준으로 여러 행 내의 여러 열을 결합합니다.

첨부된 이미지와 샘플 데이터를 참고하여 여러 행의 날짜, 사람, 메모를 결합된 값 집합별로 줄 바꿈을 사용하여 1행으로 결합하고 싶습니다. 각 메모는 이름과 ID가 비어 있는 행을 차지하므로 값이 있는 기본 행 아래의 모든 행을 결합해야 합니다. 데이터 및 원하는 출력은 첨부된 이미지를 참조하세요.

샘플 데이터:

+-------+--------------+------------------+---------+-----------------------+
| Name  |      ID      |       Date       | Person  |         Notes         |
+-------+--------------+------------------+---------+-----------------------+
| Danny | UID11224512  | 11/5/2019        | Joe     | <p>Note for Danny</p> |
|       |              | 11/5/2019        | John    | <p>Note 2</p>         |
| Joe   | UID11224956  | 11/5/2019 18:54  | Someone | <p>Note 1</p>         |
|       |              | 11/5/2019 18:54  | Someone | <p>Note 2</p>         |
| Jane  | UID11224959  | 11/5/2019 18:54  | Danny   | <p>Note 1 </p>        |
|       |              | 11/5/2019 17:33  | Shawn   | <p>Note 3</p>         |
|       |              | 11/6/2019 18:54  | Jane    | <p>Note 2</p>         |
| Tom   | UID115466652 |                  |         |                       |
| Eric  | UID168998955 |                  |         |                       |
| Paula | UID166559885 |                  |         |                       |
| Frank | UID112249569 | 11/5/2019 18:54  | Someone | <p>Note 1</p>         |
|       |              | 11/6/2019 18:54  | Someone | <p>Note 2</p>         |
|       |              | 11/7/2019 18:54  | Someone | <p>Note 3</p>         |
|       |              | 11/8/2019 18:54  | Someone | <p>Note 4</p>         |
|       |              | 11/9/2019 18:54  | Someone | <p>Note 5</p>         |
|       |              | 11/10/2019 18:54 | Someone | <p>Note 6</p>         |
| Paul  | UID1665588   |                  |         |                       |
+-------+--------------+------------------+---------+-----------------------+

원하는 출력:

+-------+--------------+-----------------------------------+
| Name  |      ID      |               Notes               |
+-------+--------------+-----------------------------------+
| Danny | UID11224512  | "11/5/2019 (Joe) - Note for Danny |
|       |              | 11/5/2019 (John) - Note 2"        |
| Joe   | UID11224956  | "11/5/2019 (Someone) - Note 1     |
|       |              | 11/5/2019 (Someone) - Note 2"     |
| Jane  | UID11224959  | "11/5/2019 (Danny) - Note 1       |
|       |              | 11/5/2019 (Shawn) - Note 2        |
|       |              | 11/5/2019 (Jane) - Note 3"        |
| Tom   | UID115466652 |                                   |
| Eric  | UID168998955 |                                   |
| Paula | UID166559885 |                                   |
| Frank | UID112249569 | "11/5/2019 (Someone) - Note 1     |
|       |              | 11/6/2019 (Someone) - Note 2      |
|       |              | 11/7/2019 (Someone) - Note 3      |
|       |              | 11/8/2019 (Someone) - Note 4      |
|       |              | 11/9/2019 (Someone) - Note 5      |
|       |              | 11/10/2019 (Someone) - Note 6"    |
| Paul  | UID1665588   |                                   |
+-------+--------------+-----------------+---------+-----------------------------------+


    

샘플 데이터:
샘플 데이터

원하는 출력:
원하는 출력

답변1

이를 수행하는 한 가지 방법은 Windows Excel 2010+ 및 Office 365에서 사용할 수 있는 파워 쿼리를 사용하는 것입니다.

  • 데이터 테이블에서 일부 셀을 선택하세요.
    • Data => Get&Transform => from Table/Range
    • 파워 쿼리 UI에서:Home => Advanced Editor
    • 2행의 테이블 이름을 기록해 두세요.
    • 아래 MCode를 창에 붙여넣으세요.
    • 2행의 테이블 이름을 실제 테이블 이름으로 변경합니다.
    • 코드와 주석을 읽고 Applied Steps창을 검사하여 무슨 일이 일어나고 있는지 이해하세요.

간략한 알고리즘

  • Fill down이름 및 ID 열의 공백
  • Group이름 및 ID 열 기준
  • 추출첫 번째날짜, 사람, 메모를 별도의 열에 표시
  • 마지막 열의 모든 날짜/사람/메모(줄 바꿈으로 구분)를 결합합니다.

M코드
아래 코드에서 Line2의 테이블 이름을 실제 테이블 이름으로 변경해야 합니다.

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Name", type text}, {"ID", type text}, {"Date", type datetime}, {"Person", type text}, {"Notes", type text}}),
    
//Fill down to fill in the blanks for Name and ID columns
    #"Filled Down" = Table.FillDown(#"Changed Type",{"Name", "ID"}),

//Group on Name and ID -- should be the same so this is a double check.
    #"Grouped Rows" = Table.Group(#"Filled Down", {"Name", "ID"}, {

//For each Name/ID
    //Extract first Date as a date string if it has no time component, otherwise leave it as a datetime 
        {"Date", each if DateTime.Time([Date]{0}) = #time(0,0,0)
                            then DateTime.ToText([Date]{0},"MM/dd/yy")
                            else [Date]{0}},
    //Extract first Person
        {"Person", each [Person]{0}},

    //extract first Note
        {"Notes.1", each [Notes]{0}},

    //Extract and combine, for each note, the Date, person, and note
    //  Then split the combination for each entry by linefeed.
        {"Notes.2", (t)=> Text.Combine(
                            List.Generate(() => [Count=1, 
                            dt =DateTime.ToText(t[Date]{0},"MM/dd/yyyy") & " (" & 
                                t[Person]{0} & 
                                ") - " & t[Notes]{0}],
                         each [Count] <= Table.RowCount(t), 
                         each [Count = [Count] + 1, dt = DateTime.ToText(t[Date]{[Count]},"MM/dd/yyyy") & 
                                    " (" & t[Person]{[Count]} & 
                                    ") - " & t[Notes]{[Count]}],
                         each [dt]),"#(lf)")
                    }
        })
in
    #"Grouped Rows"

데이터
여기에 이미지 설명을 입력하세요

결과
여기에 이미지 설명을 입력하세요

Excel에서는 열 형식을 다음 과 Notes.2같이 지정해야 하며 열 형식은 (Wrap TextDatemm/dd/yyyy hh:mm날짜 열에서 시간이 없는 날짜는 텍스트 문자열로 반환되므로 질문에 표시된 것과 같은 형식을 갖지 않습니다.)

답변2

전체 설명 열에 대해 홈 리본에서 "텍스트 줄 바꿈"을 설정해야 합니다. 다음 공식을 사용하여 텍스트 값을 줄 바꿈과 결합합니다.

="comment1" & CHAR(10) & "Comment2"

두 개의 별도 테이블을 결합하는 경우 Excel에서 파워 쿼리를 조사해 볼 가치가 있습니다.

관련 정보