LuckyTemplates で複数の列を動的にアンピボットする

このチュートリアルでは、List.Zip を使用して Power Query の複数の列をアンピボットする方法について以前に説明したトピックを再取り上げます。LuckyTemplates のメンバーが、そのメソッドを動的にする方法についてこのチュートリアルの完全なビデオは、このブログの下部でご覧いただけます。

これを上級とラベル付けしたのは、これから多数の M 関数を作成することになるためであり、そのうちのいくつかはあなたにとって初めてのものである可能性もあります。

そうは言っても、Power Query に移りましょう。

目次

表形式のデータ

ご覧のとおり、このデータは分析に適した適切なタブレット形式に変換されています。このプロセスは非常に重要ですが、ここでは説明しませんが、各ステップについて簡単に説明します。

LuckyTemplates で複数の列を動的にアンピボットする

ソース ステップでは、上記の各属性の時間と連絡先である値のペアが継続的に繰り返されています。

LuckyTemplates で複数の列を動的にアンピボットする

[適用されたステップ]で、残りのステップを確認できます。上部の行をいくつか削除し、空の列を削除し、テキスト値をクリーンアップして埋め込みました。次に、データを転置し、空のレコードを削除し、列 1 と列 2 をマージし、テキスト値を再度クリーンアップして、データを転置して戻しました。

後で詳しく説明するカスタム ステップを作成し、リストから値を抽出し、最後にタイプを変更しました。

LuckyTemplates で複数の列を動的にアンピボットする

コード全体を見てみましょう。ここで注目するのはList.Zip関数です。簡単にまとめると、単一のリストをパラメータとして受け取り、リストを返します。結果として、このインスタンスのこの 1 つのリストには 3 つの別個のリストが含まれていることがわかります。

最初のリストを調べると、ハードコーディングされた属性名が含まれており、入力されたテキスト値だけが含まれています。 2 番目のリストには、時間値のハードコーディングされた列参照が含まれています。最後のリストには、連絡先値のハードコードされた列参照が含まれています。

List.Zip は、これら 3 つのリストのそれぞれから要素を取得し、それらを新しいリスト内の位置に基づいて結合します。たとえば、これらのリストの最初の各要素が新しいリストに結合されます。同じことが、そのリストの 2 番目にリストされているすべての値にも起こります。

属性が時間の経過とともに変化する可能性が低い場合は、ハードコードされた値が問題になる可能性があります。したがって、次回、すべてのアイテムが存在しなかったり、新しいアイテムが存在したりすると、問題が発生する可能性があります。

コードを変更して複数の列を動的にアンピボットする

では、これをダイナミックにするにはどうすればよいでしょうか?

最初にコードをステップ実行して、それを達成するための別のステップを設計することなく、これらの属性値を取得できる場所があるかどうかを確認します。したがって、コードをステップバックして説明します。このRemoveNullステップは完璧です。

LuckyTemplates で複数の列を動的にアンピボットする

すべての属性値が列 1 にリストされていることがわかります。ユーザー インターフェイスを使用してそれらを抽出できます。

LuckyTemplates で複数の列を動的にアンピボットする

そのヘッダーを右クリックし、その下で[新しいクエリとして追加]を選択します。

LuckyTemplates で複数の列を動的にアンピボットする

このリストを取得しました。これは良いニュースです。前に見たハードコードされたリストを動的なリストに置き換えたいからです。私たちがしなければならないのは、値を整理することだけです。

LuckyTemplates で複数の列を動的にアンピボットする

これらの null を削除することから始めましょう。そこで、数式バー内にList.RemoveNullsを追加します。ご覧のとおり、すべての項目が繰り返されていますが、これは値のペアによるものです。時間ごとに 1 回リストされます。

LuckyTemplates で複数の列を動的にアンピボットする

そして、連絡先についても、それらの重複を削除するために、List.Distinctを追加できます。このロジックを作成したので、あとはそれをコピーしてサンプル クエリに貼り付けるだけです。

LuckyTemplates で複数の列を動的にアンピボットする

サンプル クエリで、詳細エディタを開いて新しい変数名を作成します。それをAttributeListと呼びましょう。次に、コードを貼り付けてカンマを入力します。

LuckyTemplates で複数の列を動的にアンピボットする

次に、カスタム ステップに戻りましょうList.Zip 内で、最初のリストを変数名 (AttributeList) に置き換えることができます。

LuckyTemplates で複数の列を動的にアンピボットする

次に、2 番目のリストを詳しく見てみましょう。これが列名を参照していることがわかっており、それらの列名はそれぞれ、そのリストに既に存在するものと同じ属性で始まり、その後にスペースとテキスト「時間」が続きます。

各項目に接尾辞を追加するだけです。それでは、1 つ前のステップに戻り、カスタム列を追加してロジックを作成しましょう。

複数の列を動的にアンピボット: カスタム列ロジックの追加

これは単なる一時的な列なので、適切な名前を付ける必要はありません。完了したら削除します。

LuckyTemplates で複数の列を動的にアンピボットする

リスト内の値を変更するには、List.Transform関数を使用できます。AttributeListの値を変換する必要があるので、それを貼り付けます。

ここのヘッダーでは、テキスト値が大文字で始まり、残りが小文字であることがわかります。属性には大文字の単語のみが含まれているため、そのテキスト値も変換する必要があります。そして、アンダースコアを使用してリストの各項目にアクセスし、そのサフィックスを追加します。

これで、列にリスト値が得られます。どれを選択しても問題ありませんが、ここでいずれかの空白部分の横をクリックしてください。

LuckyTemplates で複数の列を動的にアンピボットする

ページの下に、作成したリストのプレビューが表示されます。これらの列ヘッダーの大文字と小文字が適切に区別され、このリストで表示される列ヘッダーと一致することがわかります。

これで、アクセスしたいフィールドをレコードから特定する手段ができました。そこで、カスタム列ダイアログ ボックスを再度開き、Record.SelectFieldsを追加しましょう。レコードをレコードとして必要とするので、そのアンダースコアを使用して現在のレコードにアクセスできます。そして、これらすべてのフィールド名のリストを指定したので、右括弧を追加してOKを押します。

LuckyTemplates で複数の列を動的にアンピボットする

したがって、リストはもうありませんが、レコードは取得できるようになりました。もう一度空白の横をクリックして、そのレコードの内容を表示してみましょう。ここでは、レコード フィールド名とレコード フィールド値がリストされていることがわかります。

LuckyTemplates で複数の列を動的にアンピボットする

ただし、関心があるのはレコード フィールドの値だけなので、それを抽出する必要があります。カスタム列ダイアログ ボックスに戻り、Record.FieldsValuesを追加しましょう。

LuckyTemplates で複数の列を動的にアンピボットする

再びリストを取得しましたが、記録はなくなりました。もう一度空白の横をクリックすると、それらの値だけを含むリストが表示されることがわかります。見た目は良いですね。

LuckyTemplates で複数の列を動的にアンピボットする

最後の右かっこを除いて、作成したロジック全体をコピーしましょう。一時列は不要になったので、削除できます。

LuckyTemplates で複数の列を動的にアンピボットする

数式バーで 2 番目のリストを選択し、ロジックに置き換えます。

LuckyTemplates で複数の列を動的にアンピボットする

連絡先のレコード フィールド値を含むリストを作成するには、サフィックスを変更するだけで済みます。したがって、最後のリストも選択して、ロジックに貼り付けることができます。

LuckyTemplates で複数の列を動的にアンピボットする

次に、これをhours の代わりにcontacts に変更しましょう。

LuckyTemplates で複数の列を動的にアンピボットする

エラーはなく、見た目も良好です。これは、複数の列をアンピボットするための動的なソリューションになりました。

LuckyTemplates で複数の列を動的にアンピボットする


LuckyTemplates 列のピボット解除 – Power Query チュートリアル
LuckyTemplates で列のピボットを解除する方法 LuckyTemplates の
ピボット解除とピボットの基本 – クエリ エディターのレビュー

結論

これが、 List.Zip を使用してで複数の列を動的にアンピボットする方法です。

新しい属性が入ってくると、それは AttributeList によって自動的に選択されます。そして、項目が存在しなくなると、そのリストには表示されなくなります。

楽しんでいただけたでしょうか。このチュートリアルの詳細については、以下の完全なビデオをご覧ください。LuckyTemplates での複数の列のピボット解除に関する詳細コンテンツについては、以下のリンクをご覧ください。

ではごきげんよう

メリッサ

Leave a Comment

Power Automate の文字列関数: Substring と IndexOf

Power Automate の文字列関数: Substring と IndexOf

Microsoft フローで使用できる 2 つの複雑な Power Automate String 関数、substring 関数とindexOf 関数を簡単に学習します。

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates でビジュアル ツールチップを作成する

LuckyTemplates ツールチップを使用すると、より多くの情報を 1 つのレポート ページに圧縮できます。効果的な視覚化の手法を学ぶことができます。

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を行う

Power Automate で HTTP 要求を作成し、データを受信する方法を学んでいます。

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で日付テーブルを作成する方法

LuckyTemplates で簡単に日付テーブルを作成する方法について学びましょう。データの分析と視覚化のための効果的なツールとして活用できます。

2 つの方法による SharePoint 列の検証

2 つの方法による SharePoint 列の検証

SharePoint 列の検証の数式を使用して、ユーザーからの入力を制限および検証する方法を学びます。

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel または CSV ファイルにエクスポート

SharePoint リストを Excel ファイルおよび CSV ファイルにエクスポートする方法を学び、さまざまな状況に最適なエクスポート方法を決定できるようにします。

Power Automate のオンプレミス データ ゲートウェイ

Power Automate のオンプレミス データ ゲートウェイ

ユーザーがコンピューターから離れているときに、オンプレミス データ ゲートウェイを使用して Power Automate がデスクトップ アプリケーションにアクセスできるようにする方法を説明します。

DAX 数式での LASTNONBLANK の使用

DAX 数式での LASTNONBLANK の使用

DAX 数式で LASTNONBLANK 関数を使用して、データ分析の深い洞察を得る方法を学びます。

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

CROSSJOIN 関数の使用方法 – LuckyTemplates および DAX チュートリアル

LuckyTemplates で予算分析とレポートを実行しながら、CROSSJOIN 関数を使用して 2 つのデータ テーブルをバインドする方法を学びます。

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

TREATAS 関数を使用して LuckyTemplates で仮想リレーションシップを作成する

このチュートリアルでは、LuckyTemplates TREATAS を使用して数式内に仮想リレーションシップを作成する方法を説明します。