購入履歴のデータを読み込むと、途中で間違いに気付いてキャンセルされた履歴も混じってきますよね。集計する際にはいらない情報なんで、今回はこれを取り除いてみようと思います。
Image may be NSFW.
Clik here to view.
今回の購入履歴データについては、下記を前提としています。
- 当日中のキャンセルには購入の後に返金履歴が入る
- キャンセルは、注文番号を指定して行う
また左の購入履歴テーブルは、接続のみでクエリを作成しているものとします。
この場合、「購入日」「注文番号」「商品」でグループ化して(2の条件がない場合は、グループ化の条件から「注文番号」を除く)、「購入行を抽出し、そこから返金行の数だけ行を削除」すればいいです。
行のグループ化 = Table.Group(
ソース, {"購入日", "注文番号", "商品"},
{
"グループ",
each Table.Skip(
Table.SelectRows(_, each [種別]="購入"),
Table.RowCount(Table.SelectRows(_, each [種別]="返金"))
),
type table [価格=Int64.Type, 種別=text]
}
)
このようにグループ化してやれば、後は「価格」「種別」列を展開して、価格行が「null以外」の行を抽出してやるだけでよくなります。
グループ列の展開 = Table.ExpandTableColumn(
行のグループ化, "グループ",
{"価格", "種別"}
),
行の抽出 = Table.SelectRows(
グループ列の展開, each [価格]<>null
)
こんな感じです。
最後の抽出が必要なくなれば、もう少し無駄がなくなるんですけど、ピンとくる方法が思い浮かびませんでした。