함수말고
파워쿼리로 일부단어가 포함된 목록찾기 입니다.
포함될 단어가 하나인 경우 text.contains코드로 가능한데
포함될 단어가 여러개일 경우 해결이 안되네요...
한번에 해결하는 방법보다는
하나 하나 찾아가는 방법으로 알려주시면 감사하겠습니다.
함수말고
파워쿼리로 일부단어가 포함된 목록찾기 입니다.
포함될 단어가 하나인 경우 text.contains코드로 가능한데
포함될 단어가 여러개일 경우 해결이 안되네요...
한번에 해결하는 방법보다는
하나 하나 찾아가는 방법으로 알려주시면 감사하겠습니다.
인덱스추가한후
사용자지정열에서
=포함할 단어쿼리
한후 확장하고
포함인지 조건열 처리후
피벗열 하면 됨
답변 감사합니다.
안녕하세요~
하나 하나 UI로 보여드리면서 설명을 드리고 싶은데,
UI방식은 동적 열 생성 연결이 안됩니다.
질문자님께서 아마도 개별 열 추가로
이렇게 하나씩 열 추가를 하시면 되는데,
만약에 포함단어 시트의 단어들이 동적으로 늘어나는 것을 반영하고자 한다면,
M코드로 List.Accumulate 반복 열 생성을 하셔야 합니다.
let // 1. 원본 src = Excel.CurrentWorkbook(){[Name="목록"]}[Content], words = Excel.CurrentWorkbook(){[Name="포함단어"]}[Content][포함될 단어], // 2. 각 단어를 열로 추가 addCols = List.Accumulate( words, // 반복할 목록 "포함단어" src, // 시작 테이블 "목록" (st, w) => Table.AddColumn( st, Text.From(w), // 생성 열 이름 each if Text.Contains(Text.From([목록]), Text.From(w), Comparer.OrdinalIgnoreCase) then 1 else null ) ) in addColsList.Accumulate 함수는
포함단어 목록을 하나씩 돌며 새로운 열 추가합니다.
(st, w)는
List.Accumulate가 반복을 돌면서,
st에 계속 지금까지 테이블을 만들고
w는 "포함단어"쿼리에서 이번 처리할 단어를 꺼냅니다.
즉,
List.Accumulate 가 words 목록의 각 단어(w)에 대해
st (현재 테이블)에 새 열을 추가하며 누적해 나가는 함수입니다.
Table.AddColumn함수는
각 단어 이름으로 열 생성 합니다.
st(현재테이블)에 w로 지금 처리 중인 단어(mo, th, st)로 열을 만들때,
행단위로,
포함여부를 판단해 개별 값을 넣도록 합니다.
그 판단을
Text.Contains함수로 [목록]에 포함 여부를 결정합니다.
아울러 Comparer.OrdinalIgnoreCase함수는
대소문자를 무시합니다.
네..저도 개별 열 추가까지는 해봤는데...
오늘은 수메리안님 답글로 열공해보겠습니다...
파일로 봐야지 글로는 이해가 안되네요..ㅠㅠ
장문으로 한번에 하는 코드는 아직 봐도 모르겠고
list.accumulate코드도 어렵고
제 스스로
순전히 <사용자 지정열> 로만
추가하면서 해본 결과 여기까지 이르게 되었습니다.
list.transform으로도 가능한데
list.accumulate와는 무슨 차이인가요?
아주 잘 하셨네요^^

파일을 첨부하니 살펴보시구요, 결과는 동일하게 작동합니다~
아~~ 배움에는 끝이 없네요..b^^
잘만들었네요..
if ~else 로 1/0로 바꾸고.. true/false 값바꾸는 부분 제거
let 원본 = Excel.CurrentWorkbook(){[Name="표1"]}[Content], #"추가된 사용자 지정 항목1" = Table.AddColumn(원본, "사용자 지정.1", each List.Transform(filter, (tt) => if Text.Contains([목록],tt) then 1 else 0 )), #"추출된 값" = Table.TransformColumns(#"추가된 사용자 지정 항목1", {"사용자 지정.1", each Text.Combine(List.Transform(_, Text.From), ","), type text}), #"구분 기호에 따라 열 분할" = Table.SplitColumn(#"추출된 값", "사용자 지정.1", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), filter) in #"구분 기호에 따라 열 분할"
저도 이 부분이 가려웠는데...시원하게 해결해주셨네요...감사합니다.
저도 궁금해서 물어보니 이렇게 알려 주네요.
let Source = Table.FromRecords({ [Text = "오늘은 날씨가 참 좋다."], [Text = "Excel 파워쿼리 함수 공부 중."], [Text = "VB.NET으로 ExcelDNA 개발 중."] }), WordList = {"Excel", "VB.NET", "PowerQuery"}, AddedColumn = Table.AddColumn( Source, "ContainsWord", each List.AnyTrue( List.Transform(WordList, each Text.Contains([Text], _, Comparer.OrdinalIgnoreCase)) ), type logical ) in AddedColumn정규식을 이용한 수식도 가능하다고 하고요.
=REGEXTEST(B2:B4, "(?i).*(" & TEXTJOIN("|",,C2:C4) & ").*")(?!)가 대소문자를 무시하도록 한다고 합니다.
=LET(검사영역, B2:B4, 단어목록, C2:C4, REGEXTEST(검사영역, "(?i).*(" & TEXTJOIN("|",,단어목록) & ").*" ))
저도 AI 도움을 받는데...더 어렵게 알려주더라구요..그래서 어떻게 풀어가는지 착안사항으로만 저는 참고합니다. 답변 감사합니다.
IF(COUNT(SEARCH($F$2:$F$4,B2)),1,"")
함수는 해결방법을 아는데...저는 파워쿼리로 하는 방법을...
파워쿼리 공부중이라..
함수 등으로 쉽게 해결되는 것도 모두 파워쿼리로 적용해보고 있는 중입니다.