Power BIで業務をデータを集計しています。
添付のようなデータ(約2000行)をPower BIに入れ加工、可視化したいと考えているのですが、重複行の作業が複雑で行き詰ってしまい質問させて頂きました。
具体的には添付ファイルの上の絵のようなデータを下の絵のように整理したいと思っています。
自分が考えた作業の方向性は下記です。
前提:重複行が無ければ何もしない。
重複行に遭遇した時、
①重複行であることを認識する。
②重複行のうち片方の行にしか数字が無い場合 →数字がある方の値をセル内に残す。
両方の列に数字がある場合 →購入日が新しい方を残す。
③不要な行を削除し、1行にする。
④完了
⑤次の行に移行する。 ※重複行が3行以上ある場合もあり、①に戻り作業を開始する。
最終的に、すべて1行で表現したいと考えています。
ご助言を頂けましたら幸いです。
> 前提:重複行が無ければ何もしない。
> 重複行に遭遇した時、
> ①重複行であることを認識する。
まずここでおっしゃっている「重複行」というのが、具体的にどのような条件や
パターンに当てはまるグループ( 1 件以上のレコードの集合)であるのかを
次のような形で明確に定義して下さい。
・[購入者ID](および[顧客名])の値が同じであるグループ
・全てのレコードを[インデックス]の昇順に並べ替えた状態において、
[購入者ID](および[顧客名])の値が同じであるレコードが
1 件以上連続しているグループ
例えばもし 16 件目以降に[購入者ID]の値が 300101 である
( 1 件目で出現済みの[購入者ID]と同じである)レコードが存在する場合、
前者と後者ではグループ化の範囲が明らかに異なってきます。
もし前者であるなら、とりあえず[購入者ID]と[顧客名]でグループ化して
グループごとに[インデックス]の最小値を求めるクエリを作るところから
始めることになるはず。
コメント頂き感謝申し上げます。
重複の定義は下記でございます。
・[購入者ID](および[顧客名])の値が同じであるグループ
→おっしゃる通りです。[購入者ID]と[顧客名]は必ずイコールです。例外はありません。
・全てのレコードを[インデックス]の昇順に並べ替えた状態において、
[購入者ID](および[顧客名])の値が同じであるレコードが
1 件以上連続しているグループ
→おっしゃる通りです。[購入者ID](および[顧客名])の値が同じであるレコードが2件以上並んでいる場合、重複している、とみなします。
例えばもし 16 件目以降に[購入者ID]の値が 300101 である
( 1 件目で出現済みの[購入者ID]と同じである)レコードが存在する場合、
前者と後者ではグループ化の範囲が明らかに異なってきます。
→ありがとうございます。もし 16 件目以降に[購入者ID]の値が 300101 である( 1 件目で出現済みの[購入者ID]と同じである)レコードが出現する可能性はあります。
こちら説明不足でした。ご指摘感謝申し上げます。
大変お手数ではございますが、ご助言を賜れましたら幸いです。
何卒よろしくお願い申し上げます。
> [購入者ID](および[顧客名])の値が同じであるレコードが
> 2件以上並んでいる場合、重複している、とみなします。
つまり[購入者ID]の値が同じレコード同士であっても、
それらの間に[購入者ID]の値が異なるレコードが挟まっていれば
「シーケンスが異なる」としてみなして別々にピックアップ
しなければならない、という解釈でよろしいでしょうか。
> もし 16 件目以降に[購入者ID]の値が 300101 である
> ( 1 件目で出現済みの[購入者ID]と同じである)レコードが
> 出現する可能性はあります。
例えば [インデックス]の値が 16 であるレコードの[購入者ID]の値が 300101 である場合、
[インデックス]の値が 1 であるレコードとは[購入者ID]の値が同じであっても
シーケンスが異なるので、1 の方も 16 の方も両方抽出しなければならない、
ということになるはず。
もしそうなら、単純に「[購入者ID]ごとにグループ化する」というわけにはいきません。
> 重複行のうち片方の行にしか数字が無い場合 →数字がある方の値をセル内に残す。
> 両方の列に数字がある場合 →購入日が新しい方を残す。
> ※重複行が3行以上ある場合もあり
上記の作業だとか、そもそも「『正しい購入』と『誤った購入』を
どうやって判別するのか」といった点に関しては正直機械的に
(少なくともPowerQueryの範疇で)処理できる根拠を見い出せないのですが、
とりあえずやるべきことは「それぞれのシーケンスごとに先頭の
([インデックス]の値が最小である、あるいは[購入日]の値が最大である)
レコードを抽出するクエリを作成すること」なのではないかと。
再度ご検討をお時間を頂き、本当に感謝申し上げます。
> [購入者ID](および[顧客名])の値が同じであるレコードが
> 2件以上並んでいる場合、重複している、とみなします。
つまり[購入者ID]の値が同じレコード同士であっても、
それらの間に[購入者ID]の値が異なるレコードが挟まっていれば
「シーケンスが異なる」としてみなして別々にピックアップ
しなければならない、という解釈でよろしいでしょうか。
→ありがとうございます。シーケンスは同じとみなして一括りにしてピックアップしても大丈夫、でございました。
> もし 16 件目以降に[購入者ID]の値が 300101 である
> ( 1 件目で出現済みの[購入者ID]と同じである)レコードが
> 出現する可能性はあります。
例えば [インデックス]の値が 16 であるレコードの[購入者ID]の値が 300101 である場合、
[インデックス]の値が 1 であるレコードとは[購入者ID]の値が同じであっても
シーケンスが異なるので、1 の方も 16 の方も両方抽出しなければならない、
ということになるはず。
もしそうなら、単純に「[購入者ID]ごとにグループ化する」というわけにはいきません。
→ありがとうございます。もし16であるレコードの[購入者ID]の値が 300101 である場合、[インデックス]の値が 1 であるレコードと同じシーケンスとみなして一括りにして抽出する、で大丈夫でございました。
> 重複行のうち片方の行にしか数字が無い場合 →数字がある方の値をセル内に残す。
> 両方の列に数字がある場合 →購入日が新しい方を残す。
> ※重複行が3行以上ある場合もあり
上記の作業だとか、そもそも「『正しい購入』と『誤った購入』を
どうやって判別するのか」といった点に関しては正直機械的に
(少なくともPowerQueryの範疇で)処理できる根拠を見い出せないのですが、
とりあえずやるべきことは「それぞれのシーケンスごとに先頭の
([インデックス]の値が最小である、あるいは[購入日]の値が最大である)
レコードを抽出するクエリを作成すること」なのではないかと。
→ありがとうございます。詳しくは書いていないのですが、ここまでお話しいただいた条件を満たせれば、『正しい購入』と『誤った購入』を判別することはできると考えておりました。
ここまでお話しいただいた条件で、Power Queryの書き方をお教えて頂くことは可能でしょうか。
大変お手数ではございますが、何卒よろしくお願い申し上げます。

回答2件
あなたの回答
tips
プレビュー