カテゴリー別アーカイブ: Power Query

M言語に慣れる_10回目~グループ毎に連番作成~

【M言語は難しくない】今回はデータをグループ化した際に、1から始まる連番をグループ毎に作成する方法について解説します。この処理の仕方を覚えると、エクセルの使い方の幅が広がります

コードの採番や顧客の2回目のリピート状況把握など、使いみちは沢山あります!

しかも知られざるグループ化機能を使えば、1つのM関数を入力するだけでできてしまいます

まさに魔法です

ぜひ、実際に手を動かしてこの魔法を体験してください!

目次

今回のポイント

今回の使用データ

グループ化の実施

M関数の入力

<まとめ>

今回のポイント

今回のポイントは2つあります

グループ化

グループ化する際に、よく選択される操作は「合計」などです

今回は「すべての行」という操作を選択します

 この「すべての行」を選択して操作を行うと、グループ毎テーブルが作成されます

M関数作成

連番は「列の追加」タブの「インデックス列」のメニューから、クリック操作で簡単に作成できます

 今回は、既存のメニューは使用せず、カスタム列の作成画面から「Table.AddIndexColumn」というM関数を使用して「連番」を作成します

 M関数で作成することで、ポイントの1点目で作成されたグループ毎のテーブルを、関数の引数として指定できるようになります

今回の使用データ

今回は下の画像にあるデータの「部門」列をグループ化します

グループ化した後は、グループ毎に連番を振ります

以下が実際に使用するサンプルデータです

グループ化の実施

解説は、前述のデータをテーブル化し、エディタを開いたところから行います

エディタを開いたらまずは、グループ化を行います

グループ化は「ホームタブ」の「グループ化」メニューから行います

次に開いた画面では、前述のように操作を「全ての行」で設定します

・グループ化対象列 ➡ 「部門」列

・新しい列名 ➡ 「部門列」

・操作 ➡ 「すべての行」

空欄のままでOKです

上の内容で指定してOKボタンをクリックすると、エディタ内では次の画像のように、テーブルがグループ別に作成されています

続きを読む M言語に慣れる_10回目~グループ毎に連番作成~

M言語に慣れる_11回目_前行を参照して計算

【M言語は難しくない】今回は連番波括弧:{}を組み合わせて活用して、前行を参照する仕組みを作成します。前行を参照する仕組みを作成したら、下の図のように「前行との差額」を計算します。

この処理はエクセルシート上であれば、四則演算の式を挿入すれば簡単に行えます

=(列名/N行目)-(列名/N-1行目)

但しセル単位/1つの値単位の操作になるので、M言語を使用しなければPower Queryでは行えません

M言語を使用すればできるといっても、とても難しい処理なのでは?

いえ、決してそんなことはありません!

 エクセルシート上の行番号/レコードに相当する波括弧:{}を、連番/0,1,2・・・とうまく組み合わせて使いこなせば、簡単にできます

 実際に手を動かして前行を参照した計算が行えるようになった時には、M言語の活用に大き自信を持てるようになっているはずです!

目次

今回のポイント

今回使用するデータ

連番の追加

レコードの参照

カスタム列・作成画面で連番を操作

<まとめ>

今回のポイント

過去の記事で、丸括弧と波括弧を組み合わせてエディタ内のデータを参照する方法について解説しました

 括弧を使用して参照する方法は、下のGIF画像のように<前ステップ名 + 波括弧/レコード位置 + 角括弧/リスト>を組み合わせる方法でした

今回は、この「括弧の組み合わせて参照する仕組み」を、更に「連番 /0,1,2,3・・・」と組み合わせて活用します!

今回使用するデータ

今回使用するデータは次の画像のデータです

上の画像のB列にある「株価」を使用して、計算を行います

各行にて、前行との株価の差額を計算します

続きを読む M言語に慣れる_11回目_前行を参照して計算

【豆知識】どこの行と列が変わったかを調べる方法

大量のデータを扱っていると、2つの表を比べて「一体、どこの行が変わったのか?」を調べる時がたまにありますよね?

1万行を超すデータだと、関数を使ってもとても面倒な作業です

実はPower Queryの「クエリのマージ」において、結合種類を「完全結合(両方の行すべて)」に指定した上で、「条件列」を組み合わせると、簡単にできます

使用データと行いたいこと

下の図のように、「元データ」と「修正後」の2つの表があったとします

元データと修正後の間で「金額」が変わった行を「OK」「×」で判定して、新たな列に出力します

この「金額」が変わったという判定に当たっては、「ID」「客先」の組み合わせも考慮します

ですので、判定すべき個所は次の画像のようになります

今回のポイント

通常、クエリのマージを行った場合、結合の種類は次の画像の方法を使用するのが一般的だと思います

この場合は、2つのクエリの結合関係は次の画像のようになります

ところが、マージ方法を「完全外部」とすると次の画像のようになります

このマージ方法の場合、「片方の円しか無いものはどう出力されるか?」が今回の大きなポイントです!

では、それぞれの表からクエリ名が「元データ」「修正後」という2つのクエリが作成してあることを前提として、本格的な解説を始めます

2つのクエリのマージ

今回、2つのクエリをマージする際に気を付けることは、次の画像(列名の右横に番号が採番されていることに注目)のように照合列を複数指定することです

でないと、行の列の中で「客先」が変わっていても「判定」されません

照合列を複数指定する時は、Ctrlキーを押しながら選択を行ってください

条件列の追加

前述のクエリのマージを、展開する際には2つのクエリの違いが分かるように「元の列名のプレフィックス」にチェックを入れておきます

そして、マージしたクエリを展開すると次の画像のようになります

ちょっと上の画像だと見づらいので、1つのクエリの列だけ表示したのが次の画像です

「元データ」のクエリにしかない行は、プレフィックスが「修正後」の列では全て「null/空欄」となります

逆に「修正後」のクエリにしかない行は、プレフィックスが無い列が「null」になります

今回のポイントでも前述しましたが、金額が変わった行とは「金額自体」が変わった行と、「ID」や「客先」などの「行の情報」が変わった行の2つのケースがあります

「金額の列」はプレフィックスが「無し」と「有り」の2つがありますが、「行の情報」が変わった場合はどちらかが「null」になります

つまり、条件列を挿入して「金額」を比べれば、金額変更の2のケースが網羅できます

ですので、次のように条件列を指定します

まず条件設定です

上の条件が満たされた場合は「OK」を出力します

条件が満たされない場合には「×」を出力します

条件列を指定してエクセルシートに出力すると、次の画像のようになります

IDに注目して、「×」を見ていくと変わった行が一目瞭然です

<まとめ>

 今回は、マージの結合にて「完全結合」の仕組みを活用して2つの表から「変化した行」を判定する方法を解説しました

 Power Queryでは「元の列名のプレフィックス」を指定すれば、マージしたク エリを展開した際に「どのクエリ」の分なのかが列名で分かるのも便利です

今回紹介したのはキー列と金額の一番簡単なパターンでした

では、下の画像のような複数列がある場合に変更がある箇所を特定する場合はどうしたらいいか?

この場合は、1列を指定するパターンをまずは作ってクエリを複製してください

まずは電話番号を判定するクエリを作成します

その後に、クエリを複製します

そして、住所を判定するクエリに変更します 

今回はクイズやパズルのような内容でしたが、Power Queryの便利さに触れるにはとても良い内容だったと思います

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ


にほんブログ村

M言語に慣れる_12回目_例外処理

【M言語は難しくない】M言語でも、もちろん例外処理はあります!今回は、エラーが出た場合に「try ~ otherwise ~」文を使用してエラーを回避する方法について解説します。但し、今回は「try ~ otherwise ~」文だけの紹介ですので、前回の記事の追加としての位置づけになります。

目次

前回の内容

例外処理について

例外処理の記述

前回の内容

前回は、前行との差額を「括弧と連番」を組み合わせて算出しました

差額を算出する際は、1行目は前行が無いので、エラー対策を行わないとエラーになりました

ですので、if文を下の図のように入れることでエラーを回避し、「空欄/null」を出力するようにしました

続きを読む M言語に慣れる_12回目_例外処理

【M言語に慣れる】_13回_ダイナミックに連続した日付作成

【M言語は難しくない】今回は、M関数を使用して連続した日付を作成する方法を解説します。2つ連続した日付を作成する方法を解説した後に、ダイナミックに日付を作成する方法を解説します。下のGIF画像のように、ある表の最小・最大日と連動させて、連続した日付が入った表を作成する方法を解説します。

上のGIF画像では、画像左の最大値を「2021/04/04」から「2021/04/06」で入力し直しています

その後、「更新処理」を行います

すると、画像右にある表の最終行が「2021/04/04」から「2021/04/06」に拡大します

この回は、過去の記事で解説した波括弧:{}を使用した「連続データを作成する技術」をフルに活用します!

目次

今回のポイント

今回使用するデータ

連続した日付の作成

ダイナミックに連続データを作成

<まとめ>

今回のポイント

今回も前述のように、過去記事で紹介した括弧の使い方が最大のポイントになります

後、これまで紹介してこなかったM関数も使用します

括弧の使い方

過去記事にて、1から10まで連続した数字を空のクエリに作成する方法を解説しました

今回はこの波括弧 / {}(最小..最大)から作成される連続データを使用して、連続した日付を作成します

フィルタリング

日付が入ったテーブルは下の図のようにフィルタをかけて、最小日と最大日は特定できるようにしておきあす

上の図のようにフィルタリングを行うと、下の図のようなテーブルができます

1行目が最小日、2行目が最大日です

こちらは、連続した日付を作成するときに使用します

M関数

今回使用するM関数はこちらです

事前に概要を紹介しておきます

#date

「年、月、日」から日付を作成します

#duration

「日、時間、分、秒」から期間値を作成します

List.Dates

「開始日、リスト個数、増分」から日付のリストを作成します

#dateと#durationと組み合わせて作成します

Number.From

値を数値型式にして返します

今回使用するデータ

 今回は、記事の冒頭でも前述したように、まずは2つ連続した日付を作成する方法を解説します

その後、次の画像のデータを使用します

上の画像の「最小と最大の日付」を変えたら、連動して連続した日付を入れた表が作成されるようにします

連続した日付の作成

 これから2つ作成方法を解説しますが、どちらもまずは空のクエリから作成します

  エクセル画面の上にある「データタブ」➡「データの取得」の順でクリックします

その後、下の画像にて黄色に印をつけた箇所を上から順にクリックします

そして、下の画像にある「空のクエリ」をクリックします

するとエディタが開き、空のクエリが立ち上がります

M関数 / List.Datesで作成する方法

既に今回のポイントで解説済みの内容になります

前述の通り、#dateと#durationを組み合わせて作成します

では、以下の条件で連続データを作成してみます

・開始日 / 2021/05/01

・個数 / 5個

・増分 / 7日

関数は次のように記述します

=List.Dates(#date(2021,5,1),5,#duration(7,0,0,0))

上の関数を数式バーに入力すると、下のGIF画像のように2021年5月1日から始まる日付リストが「7日」おきに「5個」作成されます

波括弧 / {} を使用して作成する方法

前述の通り、波括弧 / {}(最小..最大)から作成された連番を利用して連続した日付を作成します

この方法の場合には、作成した連番を一旦テーブル形式に変換した後、日付形式に直すのがポイントです

ちなみに、エディタ画面からも「空クエリ」は作成できます

まず、下の画像のようにエディタ画面の左で右クリックします

その後に、上の画像の「新しいクエリ」右横にある▶マークをクリックします

すると「空のクエリ」を選択する画面がでます

さて、話を連続データの作成に戻します

まずは、次のように数式バーに入力して連続データを作成します

= {Number.From(#date(2021,4,1))..Number.From(#date(2021,4,30))}

数値型式を返す「Number.From関数」の中は、「#date関数」にて日付を作成しています

上の数式を入力した段階では、ただの「値」の羅列になっています

こちらはあくまで「リスト型式」なので、このままだと日付形式に変換できません

ですので、こちらをテーブルに変換します

すると次の画面のようになり、データ形式を指定できるようになります

こちらの画面で列名と合わせて、データ形式を直します

これで、連続した日付が作成できました

こちらのクエリは、後で表と連動させますので、クエリ名を「連続日付2」として保存します

この連続したデータを作成する方法の「2つ目」として解説した方法は、次の数式を空のクエリの数式バーに入力するところからはじめました

={最小日..最大日}

この数式は表と連動させてダイナミックに連続データを作成する際、応用して活用します

ダイナミックに連続データを作成

過去の記事にて、ダミーの値でフィルタリングしてステップを作成した後に、ダミーの値を後から置き換えて、「ダイナミックフィルタリング」を行いました

上の画像の赤印は一度、フィルターした値を「最高値」として算出した値/変数で置き換えています

今回は全く違うアプローチを行います

日付の最小値と最大値でフィルタリングした内容を、前述の「波括弧 / {} を使用して作成する方法」で作成した数式の中に組み込みます

では、日付の「最小値」と「最大値」の2つの値でフィルタリングを行いますので、まずは下の画像の元のデータをエディタで開きます

エディタを開いたら、まずはクエリを参照して別クエリ「担当者」を作成しておきます

こちらは、後でまたクエリの結合に使用します

そして、フィルタリングを行う前に「担当者」の列は削除します

「日付」の列だけ残したところで、フィルタリングを行います

フィルタリングは「カスタムフィルター」という仕組みを利用して、2つの値を「OR条件/また」にて指定できるようにします

上のGIF画像では、「日付フィルター」を選択した後に、新たに表示された列を最後までスクロールして「カスタムフィルター」を選択しています

こちらのカスタムフィルターの画面で「また」を選択した上で、2つの値を次の画像のように「最も早い」「最も遅い」と指定します

すると日付の「最小値」と「最大値」の2行が出力されます

これで日付の「最小値」と「最大値」のフィルタリングは終了です

一旦、クエリの名前 / 最小最大_日付を設定して「接続のみ」にて読込ます

次に、前述の連続データを作成したクエリを複製します

複製したクエリの「ソース」ステップを選択すると、数式バーには連続データを作成するための「最小値」と「最大値」が指定されています

上の画像の「最小値」と「最大値」を、1つ前で作成したクエリ「 最小最大_日付 」の1行目/最小値と2行目/最大値に置き換えます

置き換える際には、角括弧 / []波括弧 / {}を組み合わせて「クエリ名(テーブル名)[列名]{行位置}」の数式で指定します

上の画像だと分かりずらいと思いますので、以下に数式バーの部分は記述し直します

= {Number.From(最小最大_日付[日付]{0})..

           Number.From(最小最大_日付[日付]{1})}

上の式で最小最大_日付クエリの1行目と2行目をそれぞれ、0と1で表現しているのは、Power Queryが「0」をベースとしているからです

これで、表の値(元データ)に応じて連続データが最終ステップに作成されています

更にここから元データのクエリ「担当者」と日付をキーにして結合を行い、「担当者」の列を追加します

こちらは上の画像のように、「空欄/null」があるので、フィル作業を行います

変換タブの「フィル」にて下の空欄を上の値で埋めます

これで完成です

元の表と最小値と最大値を連動する仕組みも組み込まれています

<まとめ>

今回は、M関数を数種類使用して連続する日付データを作成しました

日付データを作成する方法は2種類解説しました

1つ目は、List.Dates関数を使用する方法です

こちらは、List.Dates関数の中に2つの関数を更に組み込みました

画像に alt 属性が指定されていません。ファイル名: List.Dates_.gif

2つ目は、波括弧 / {}を使用して連続データを作成する方法です

こちらは、括弧の中に最小の日付と最大の日付を指定しました

= {Number.From(#date(2021,4,1))..Number.From(#date(2021,4,30))}

こちらの仕組みは、表をもとにしてダイナミックに連続データを作成する仕組みに応用しました

元の表をエディタで開き、日付の最小値と最大値をフィルタリングして、上の数式に組み込みました

= {Number.From(最小最大_日付[日付]{0})..

           Number.From(最小最大_日付[日付]{1})}

この組み込み処理により、ダイナミックな連続データが作成できるようになりました

今回はM関数が多く出て来たので、骨のある内容だったと思いますが、M関数の便利さも紹介できたと思います

ぜひ、実際に手を動かして、M関数の便利さに触れてみてください

記事を最後までお読み下さり、誠にありがとうございます

参考までに今回使用したファイルを添付します

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ


にほんブログ村

【M言語に慣れる】_14回目_複数行を1つのセルにまとめる

【M言語は難しくない】今回は複数行に拡散している値を、次のGIF画像のように「記号」をつなぎ目にして、1つのセルにまとめます

今回のポイント

今回のポイントは2つあります

1つ目は過去記事で紹介した「すべての行」によるグループ化です

この「すべての行」によるグループ化により、グループ別にテーブルを作成します

2つ目はリストの「値の抽出 / 1つのセルにリスト化」機能の活用です

こちらは、実際の例で見てみましょう!

空のクエリで次の画像のように、2つのリストを作成したとします

上の画像のリストを一旦、テーブル化した後、黄色に印を付けた「展開マーク」をクリックをすると「値を抽出する」が選択できます

上のGIF画像のように「値を抽出する」を選択した後は、リストの「区切り記号」を指定できます

「区切り記号」を指定した後は、下の画像のように1つのセルにリストの値が出力されます

今回使用するデータ

今回使用するデータは、次の画像のデータです

名前の列をグループ化し、グループ毎に「商品列に含まれる商品」を1つのセルに出力します

グループ化の実施

今回の解説は、使用データをエディタで開くところから始めます

上の画像にて、黄色の印を付けた「グループ化」をクリックします

なお、事前に「注文日」の列は削除しておきます

グループ化の内容は次の画像のように指定します

・グループ化項目:名前の列をグループ化します

・新しい列名:詳細

・操作:前述のように「すべての行」を指定します

・列:空欄のままでOKです

上記のように指定してOKボタンを押すと、エディタ画面は次のようになります

グループ化された名前毎に、テーブルが作成されています

次はグループ毎に、上の画像の商品列の内容をリスト化します

カスタム列の追加

前述のグループ毎にリスト化するには、カスタム列・作成画面を開くところから始めます

カスタム列・作成画面で、次の画面のように詳細列を指定すると、過去の記事の通りグループ毎にテーブルが作成されます

次の画像の「詳細.1」列が、上の画像から出力されたカスタム列の内容です

今回はテーブルではなく、各テーブル内の商品リストを出力します

リストを出力するには、カスタム列・作成画面にて次の画像のようにリストになる列を加えます

これで、商品リストが各テーブル毎に出力されます

各リストにカーソルをあてると「リストの中味」が次の画像のように見れます

こちらを前述の「今回のポイント」にて紹介したように、「展開マーク」をクリックし、「値を抽出する」から1つのセルにリストを出力します

値を抽出する」をクリックした後は次の画像のように、値を区切る記号を指定する画面が出てきますので、そちらで「記号」を指定してください

記号を指定したら、次の画像のようにグループ毎に1つのセルにリストが出力されています

応用編

仮に変換対象のデータが1列のケースも解説します

この場合は、一旦、カスタム列作成画面で「ダミー列」を追加します

こうすることで「グループ化」機能を前述のようにうまく活用することができます

<まとめ>

今回は複数の行の内容を、1つのセルに出力する方法を解説しました

ポイントは2つあり、まず1つ目はグループ化において「すべての行」を指定することです

この「すべての行」を指定すると、グループ毎にテーブルが作成されます

グループ毎にテーブルを作成したら、「カスタム列・作成画面」にて各テーブルからリストを作成しておきます

2つ目のポイントは、各リストの内容を「値を抽出する」機能にて1つのセルにリストを出力することです

今回紹介した方法は、それほど使用頻度は高くないと思います

ただ、今回の内容は、M言語の重要概念であるテーブルとリストを体感するのにいい内容だったと思います

 特にグループ化において、「すべての行」を指定してグループ毎にテーブルを作成するパターンは色々と応用できそうです!

ぜひ、実際に手を動かしてみて試してみてください

記事を最後まで見て頂き誠にありがとうございました

参考までに今回使用したファイルを添付します

次回は、M関数のText関数について2つ事例を紹介します

にほんブログ村 資格ブログ ビジネススキルへ
にほんブログ村 IT技術ブログ VBAへ


にほんブログ村

【M言語に慣れる】_15回目_TEXT関数/文字列関数

【M言語は難しくない】今回は、TEXT関数の中から、2つの事例を紹介したいと思います。通常のエクセル関数と同じ様に、M言語でも文字列を操作する関数は多数あります。興味のある方はぜひ、こちらのMicrosoft社のページも参照してみてください

目次

文字列の有無を判定する関数

文字列を置き換える関数

<まとめ>

文字列の有無を判定する関数

 Text.Contains関数は、ある文字列の中に指定した文字列があるかとうかを判定し、「TRUE」か「FALSE」で返す関数です

以下の一文は、Microsoft社のページからの抜粋になります

Text.Contains(“Hello World”, “Hello”)

上の ように記述した場合には、「TRUE」を返します

次もMicrosoft社のページからの抜粋になりますが、この場合は「FALSE」を返します

Text.Contains(“Hello World”, “hello”)

ちなみに、

 M言語では、大文字と小文字の違いは考慮されますので、この点は注意が必要です

では、実際にPower Queryエディタ(以降、エディタ)で実際にこの関数を操作してみます

使用するデータは、「抽出」という1列だけがあるこちらのデータになります

 上の画像のデータから、Text.Contains関数で文字列「0」を含む行を判定し、「TRUE」もしくは「FALSE」を返してみます

まず、「列の追加」タブからカスタム列・作成画面を開きます

こちらの画面でカスタム列の式に「Text.Contains」と入力します

上のGIF画像のように「Text.Con・・・」と入力する途中で、該当の関数が出てきますので、Tabキーで確定します

次にText.Contains関数の丸括弧の中を、以下の画像のように確定します

すると、エディタ内に「0」が含まれる行を判定した列が追加されます

続きを読む 【M言語に慣れる】_15回目_TEXT関数/文字列関数

M言語に慣れる_16回目_List関数

【M言語は難しくない】今回は、List関数について1つ事例を解説します。内容自体としては「M言語に慣れる_3回目~ダイナミックフィルタリング~」と同じ様な事を行います。

この3回目の時には、まずは変換タブにて最高値を算出しました

 そして、こちらの「”Cal-Max”ステップ」を参照してダイナミックフィルタリングを行いました

今回は、最高値を「変換タブ」からではなく、カスタム列・作成画面からList関数で計算します

目次

今回使用するデータと行いたい事

カスタム列の作成

まとめ

今回使用するデータと行いたい事

今回は、前述の3回目と同じデータを使用します

こちらのデータで各行に、「最高値-各受注金額」の列を作成します

続きを読む M言語に慣れる_16回目_List関数

ピボット解除を複数シートで一気に行う

ピボット解除は、Power Queryの中でも人気の機能だと思います

そのピボット解除を、複数シートに対して一気に行いたくなるようなシーンは多いと思います

今回はカスタム関数を使用し、複数シートの内容を「一番てっとり早く」ピボット解除を行う方法を紹介します

ポイント

詳細エディタ

下の画像は、あるシートの内容をピボット解除した時の詳細エディタの内容です

各行が繋がっているのが分かりますでしょうか?(ソース➡#”2018_Sheet”➡変更された型・・・)

後で、この仕組みをカスタム関数の作成の際に利用します

列➡一括データ取得

下の画像は複数のシートがあるファイルから一気に全てのシートを取得した場合のソースステップです

上の画像の「Data」列を指定すれば、ファイル内の全てのデータを取得できます

こちらも、後でこちらの仕組みを利用します

カスタム関数を作成

データの取得

元データはこちらのデータになります

各シートが年別になっており、それぞれのシートに4月~翌3月のデータがあります

この元データとは別のファイルからまずはデータを取得します

データ取得の際には、1年分のみを指定します

行の調整

下の画像のように1行目と最終行は調整が必要です

1行目は、ヘッダーとして繰り上げます

最終行については、行の削除を行います

一番下位の行を指定すれば最終行が削除されます

行の調整を行ったら、最終列のTOTAL列を削除して「ピボット解除」を行います

詳細エディタで関数作成

それでは、詳細エディターを開いてみましょう!

下の画像のように、各ステップが記載されています

画像に alt 属性が指定されていません。ファイル名: image.png

上の3行はシートによって可変になっていますので、こちらをカスタム関数にまとめます

作成したカスタム関数は「myTable」と名前を変えておきましょう!

画面下にある「完了」ボタンを押すと、下の画面のようにカスタム関数が表示されているはずです

他シートのデータを呼出し

表示されているカスタム関数の下あたりで、右クリックをしましょう!

そして、再び元データがあるファイルのデータを取得します

取得するのは全てのシートにします

記事の冒頭のポイントでも解説したように、「Data」の列には全てのシートのデータが詰まっています

こちらの列を活用してカスタム列を作成しますので、カスタム列・作成画面を開きます

そして、上の画像のように前章で作成したカスタム関数/myTableの中に「Data」列を指定します

すると上の画像のように「年毎にピボット解除されたデータ」が新たに作成されていますので、こちらを展開処理します

これで、全てのシートのデータがピボット解除されました

<まとめ>

今回は、複数シートの内容を一気にピボット解除する方法を解説しました

こちらは、カスタム関数を使用するのがポイントです

詳細エディタは使い慣れない方も多いと思いますが、今回の題材は慣れるのにいい題材だと思います

各ステップが繋がっていることを理解するのがとても大事です

ぜひ、実際に手を動かして慣れを作成しましょう!


にほんブログ村

列名をダイナミックにしたピボット解除を行う

ピボット解除はパワークエリの協力な武器です。縦横/↓→並びを縦縦/↓↓並びに変えてくれます

但し、新たに列を加えた場合には、並び替えの対象列が狂ってしまいます

 上のGIF画像では「評価」という列を加えると、当然、「評価」列は軸として固定されずに並べ替えの対象となってしまいます

本来であれば、下の画像のようにしたいところでした

他の言い方に変えると、列の追加を行ったとしても「日付」の列のみ、並び替えを行って欲しいのです

これにはいい方法があります

ポイント

ピボット解除のM関数

下の画像は「その他の列のピボット解除」を行ったステップの数式バーです

Table.UnpivotOtherColumnsというM関数が使用されており、カテゴリー列*以外の列が並び替えられているのがよく分かります 

逆に言えば「並び替えない列」を上のM関数内でリストにて指定してしまえば、それ以外の列が並び替えの対象となります

エラーを敢えて発生させる

今回は、日付のみを並び替えの対象とします

エラーと絡めて言うと、日付形式にした場合にエラーになるものは並び替えの対象としないようにすればよいのです

更に前述のM関数との絡みで言うと、M関数内の「ピボット解除を行わない列名」を「日付形式にした場合にエラーになる列名」のみにしてしまえばいいのです

並び替えない列名リストの作成

まずは、ピボット解除を行ったクエリを複製します

そして、ソース以外のステップを削除した後にM関数/Table.ColumnNamesを使用して「列名」をリスト化します

そして、テーブル化した後に、以下の画像のようにカスタム列の作成画面で列を複製します

ここから、ポイントで前述した敢えてエラーを発生させる話になります

カスタム列を日付形式に変えます

すると、日付以外はエラーになります

次に、ホームタブで「エラーの保持」を行います

すると、日付以外の列名だけが残ります

ここから2つ作業を行います①カスタム列の削除、②リスト化

リスト化は変換タブの「リストに変換」で行います

リストに変換したら、リスト名を覚えやすいようにつけておきます

今回は列名リストとしました

M関数にリストを組み込み

並び替えない列名のリストができたので、M関数/Table.UnpivotOtherColumnsの中に組み入れます

こうしておけば、列を追加しても日付のみが並び替えされます

<まとめ>

今回は、ピボット解除において列を追加した場合でも日付のみが並び替えられるようにしました

ポイントは、並び替えを行わない列名のリストを作成して、ピボット解除を行うM関数の中に組み入れることです

リストを作成する際には、敢えてエラーを発生させるのもポイントです

でも、日付以外の月などの場合にはどうするのか?

その場合には、条件列を使います

上の画像の場合には、月で終わらないものはnullになります

そして、nullだけフィルタで残す、という風にすれば対応できます


にほんブログ村