8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

記事投稿キャンペーン 「2024年!初アウトプットをしよう」

【PowerBI】DAX関数のUNIONの謎結合について

Last updated at Posted at 2024-01-19

概要

複数のテーブルを縦に結合したいときは以下のようにUNION関数を用いることで解決します。

結合テーブル = UNION('テーブル1', 'テーブル2')

ただこれだけの処理なんですが、ここの結合周りの仕様で結構躓いたので備忘録として残しておきます。

具体例を用いて確認

UNIONの仕様確認

image.png image.png

例として二つの食べ物テーブルを用意しました。
この二つのテーブルをUNION関数で結合すると以下のようになります。

image.png

テーブルビューでの並びをそのままに縦に結合します。

同じカラム名同士で結合してくれたりはしません

躓いた仕様

じゃあ、列の並びを揃えればいいじゃないかとなるんですが、PowerBIのテーブルビューでは列の並び替えを行うことはできません。

テーブルビュー
image.png

テーブルビューでの列の並び替えは不可

じゃあ、クエリを発行する際に並び替えをすれば良いじゃないかとなるんですが、クエリを発行する際の列の並び順はテーブルビューの並びに影響を与えません。

クエリ発行画面でのむなしい抵抗
image.png

クエリを発行する際の列の並び順とテーブルビューの並びは関係無い

解決方法(旧)

いろいろ試しましたが、元のファイル(xlsxやcsv等)の並び順を直すしか見つかりませんでした。
追記:コメントで解決方法を教えていただいたため、後述します。

インポート元のエクセルファイル
image.png

UNIONで結合するファイル群は、読み込み前から列の並びを揃えておく

また、元データの並び順を揃えるだけではテーブルビューに並び順の反映がされないので、現在使っているデータ取得のクエリを消して再度作り直す必要があります。

元ファイルのデータの並びを揃えたら、
クエリの再発行も忘れずに!

解決方法(新)

結合テーブル=UNION(GROUPBY('テーブル1','テーブル1'[番号],'テーブル1'[名前],'テーブル1'[色]),GROUPBY('テーブル2','テーブル2'[番号],'テーブル2'[名前],'テーブル2'[色]))

UNIONで結合する際にGROUPBYで各テーブルのカラムを明示してあげると、対応関係を紐づけて結合することができます。

まとめ

今回の教訓としては、

結合する際にはGROUPBYでカラム名を明示する。

インポート前のデータを整形できるのであれば、なるべくきれいな並び順にしてから読み込ませよう

UNIONを使って同じく躓きをした人の一助になれば幸いです。

8
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?