アクセスリストというテーブルに”コンテンツの場所”という列があり
除外ワードリストというテーブルには除外ワードという列があり
”コンテンツの場所”の列にある要素で除外ワードを一部でも含むかどうかの判定列の作成方法
PowerQuery
1let
2 //除外ワードを含むか否かを判定する関数を作る
3 IsExcluded = (Expression as text) =>
4 let
5 //テーブル[除外ワードリスト]の[除外ワード]列をドリルダウンしてリスト化
6 ExcludedWords = 除外ワードリスト[除外ワード],
7 //引数 Expression に渡されたテキストと部分一致する要素をリストから抽出
8 MatchedWords = List.Select(ExcludedWords, each Text.Contains(Expression, _)),
9 //抽出後のリストの要素の数が 0 を超える場合は true を、超えない場合は false を返す
10 Judgement = if List.Count(MatchedWords) > 0 then true else false
11 in
12 Judgement,
13 //評価対象となるテーブルを参照
14 Source = アクセスリスト,
15 //それぞれのレコードの[コンテンツの場所]の値を上記の関数によって評価した結果を新たな列として追加する
16 AddedConditionalColumn = Table.AddColumn(Source, "いずれかの除外ワードを含んでいる", each IsExcluded([コンテンツの場所]))
17in
18 AddedConditionalColumn
IsExcluded の各ステップに関しては、List.MatchesAny 関数を用いて 1 つにまとめてもよいでしょう。
PowerQuery
1let
2 //除外ワードを含むか否かを判定する関数を作る
3 IsExcluded = (Expression as text) =>
4 let
5 //テーブル[除外ワードリスト]の[除外ワード]列に、引数 Expression に渡されたテキストと部分一致する要素が存在する場合は true を、存在しない場合は false を返す
6 Judgement = List.MatchesAny(除外ワードリスト[除外ワード], each Text.Contains(Expression,_))
7 in
8 Judgement,
9 //評価対象となるテーブルを参照
10 Source = アクセスリスト,
11 //それぞれのレコードの[コンテンツの場所]の値を上記の関数によって評価した結果を新たな列として追加する
12 AddedConditionalColumn = Table.AddColumn(Source, "いずれかの除外ワードを含んでいる", each IsExcluded([コンテンツの場所]))
13in
14 AddedConditionalColumn
2024.06.27 14:59 追記
詳細エディターは以下のようになっています。
現在のクエリに合わせるなら次のようになさればよいでしょう。
PowerQuery
1let
2 //除外ワードを含むか否かを判定する関数を作る
3 IsExcluded = (Expression as text) =>
4 let
5 //テーブル[除外ワードリスト]の[除外ワード]列に、引数 Expression に渡されたテキストと部分一致する要素が存在する場合は true を、存在しない場合は false を返す
6 Judgement = List.MatchesAny(除外ワードリスト[除外ワード], each Text.Contains(Expression,_))
7 in
8 Judgement,
9 //ワークブックの参照
10 ソース = Excel.Workbook(File.Contents("C:\Users\My_Data\アクセス履歴\Test\新しいフォルダー\全ユーザー結果_01.xlsm"), null, true),
11 //ワークシートの参照
12 データ_Sheet = ソース{[Item="データ",Kind="Sheet"]}[Data],
13 //1行目をヘッダー行として使用
14 昇格されたヘッダー数 = Table.PromoteHeaders(データ_Sheet, [PromoteAllScalars=true]),
15 //各列のデータ型を変換
16 変更された型 = Table.TransformColumnTypes(昇格されたヘッダー数,{{"アクセス日時", type datetime}, {"ユーザー", type text}, {"コンテンツの場所", type text}}),
17 //それぞれのレコードの[コンテンツの場所]の値を上記の IsExcluded 関数によって評価した結果を新たなカスタム列として追加する
18 追加されたカスタム = Table.AddColumn(変更された型, "いずれかの除外ワードを含んでいる", each IsExcluded([コンテンツの場所]))
19in
20 追加されたカスタム
これだと2つのクエリに分かれてしまうので、1つのクエリの中で判定できるようにしたいです。
他のクエリ上でも同様の処理を実行する可能性があるならば、別途 IsExcluded で行なっている処理を切り出してカスタム関数として作成した上、任意のクエリ上から呼び出すようにされた方が使い勝手が良いと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/06/26 07:20
2024/06/26 07:30
2024/06/27 04:24
2024/06/27 06:12
2024/06/27 22:45
2024/06/28 02:00