データ ラングリングのための Power Query の変換関数
適用対象: Azure Data Factory Azure Synapse Analytics
ヒント
企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。
Azure Data Factory のデータ ラングリングを使用すると、Power Query M
スクリプトを Data Flow スクリプトに変換することにより、コード不要のアジャイルなデータ準備とラングリングをクラウド規模で実行できます。 ADF は Power Query Online と統合されており、データ フローの Spark インフラストラクチャを使用した Spark の実行を介して、Power Query M
関数をデータ ラングリングで使用できるようにします。
現時点では、Power Query M 関数は、作成中に利用可能であっても、そのすべてがデータ ラングリングでサポートされているわけではありません。 マッシュアップを作成しているとき、関数がサポートされていない場合は、次のエラー メッセージが表示されます。
UserQuery : Expression.Error: The transformation logic is not supported as it requires dynamic access to rows of data, which cannot be scaled out.
サポートされている Power Query M 関数の一覧を次に示します。
列の管理
- 選択:Table.SelectColumns
- 削除:Table.RemoveColumns
- 名前変更:Table.RenameColumns、Table.PrefixColumns、Table.TransformColumnNames
- 並べ替え:Table.ReorderColumns
行のフィルタリング
次の条件でフィルター処理するには、M 関数 Table.SelectRows を使用します。
- 等値および非等値
- 数値、テキスト、および日付の比較 (ただし DateTime は除く)
- Number.IsEven/Odd などの数値情報
- Text.Contains、Text.StartsWith、または Text.EndsWith を使用したテキストの包含
- すべての 'IsIn' 日付関数を含む日付範囲
- and、or、または not 条件を使用したこれらの組み合わせ
列の追加と変換
次の M 関数は、列を追加または変換します。Table.AddColumn、Table.TransformColumns、Table.ReplaceValue、Table.DuplicateColumn。 サポートされている変換関数を以下に示します。
- 数値演算
- テキスト連結
- 日付と時刻の演算 (算術演算子、Date.AddDays、Date.AddMonths、Date.AddQuarters、Date.AddWeeks、Date.AddYears)
- Duration は日付と時刻の演算に使用できますが、シンクに書き込まれる前に別の型に変換する必要があります (算術演算子、#duration、Duration.Days、Duration.Hours、Duration.Minutes、Duration.Seconds、Duration.TotalDays、Duration.TotalHours、Duration.TotalMinutes、Duration.TotalSeconds)
- ほとんどの標準、科学的、および三角関数の数値関数 (Number.Factorial、Number.Permutations、および Number.Combinations を除く演算、丸め、および三角関数の下のすべての関数)
- 置換 (Replacer.ReplaceText、Replacer.ReplaceValue、Text.Replace、Text.Remove)
- 位置指定テキスト抽出 (Text.PositionOf、Text.Length、Text.Start、Text.End、Text.Middle、Text.ReplaceRange、Text.RemoveRange)
- 基本的なテキストの書式設定 (Text.Lower、Text.Upper、Text.Trim/Start/End、Text.PadStart/End、Text.Reverse)
- 日付/時刻関数 (Date.Day、Date.Month、Date.YearTime.Hour、Time.Minute、Time.Second、Date.DayOfWeek、Date.DayOfYear、Date.DaysInMonth)
- If 式 (ただし分岐は一致する型を持つ必要があります)
- 論理列としての行フィルター
- 数値、テキスト、論理、日付、および日時の定数
テーブルのマージ/結合
- Power Query は入れ子になった結合を生成します (Table.NestedJoin。ユーザーは Table.AddJoinColumn を手動で書き込むこともできます)。 ユーザーはその後、入れ子になった結合列を入れ子になっていない結合に展開する必要があります (Table.ExpandTableColumn、他のコンテキストではサポートされていない)。
- M 関数 Table.Join を直接記述することで、追加の拡張手順は不要になりますが、結合されるテーブル間に重複する列名がないことをユーザーが確認する必要があります
- サポートされている結合の種類: Inner、LeftOuter、RightOuter、FullOuter
- Value.Equals と Value.NullableEquals はどちらも、重要な等値比較関数としてサポートされています
グループ化
Table.Group を使用して値を集計します。
- 集計関数と共に使用する必要があります
- サポートされている集計関数: List.Sum、List.Count、List.Average、List.Min、List.Max、List.StandardDeviation、List.First、List.Last
並べ替え
Table.Sort を使用して値を並べ替えます。
行の削減
上位の保持と削除、範囲の保持 (対応する M 関数、条件ではなくカウントのみサポート:Table.FirstN、Table.Skip、Table.RemoveFirstN、Table.Range、Table.MinN、Table.MaxN)
既知のサポートされていない関数
機能 | Status |
---|---|
Table.PromoteHeaders | サポートされていません。 データセット内で "1 行目をヘッダーとして" 設定することにより、同じ結果を得ることができます。 |
Table.CombineColumns | これは、直接サポートされてはいなくても、特定の 2 つの列を連結する新しい列を追加することによって実現できる一般的なシナリオです。 例: Table.AddColumn(RemoveEmailColumn, "Name", each [FirstName] & " " & [LastName]) |
Table.TransformColumnTypes | ほとんどの場合、これはサポートされています。 次のシナリオはサポートされていません: 文字列から通貨型への変換、文字列から時刻型への変換、文字列からパーセント型への変換、およびロケールに関する変換。 |
Table.NestedJoin | 結合を行うだけでは、検証エラーが発生します。 機能させるには、列を展開する必要があります。 |
Table.RemoveLastN | 下端の行の削除はサポートされていません。 |
Table.RowCount | サポートされていませんが、値 1 が含まれるカスタム列を追加した後、その列を List.Sum で集計することによって実現できます。 Table.Group はサポートされています。 |
行レベルのエラー処理 | 行レベルのエラー処理は現在サポートされていません。 たとえば、列から数値以外の値を除外する方法の 1 つは、テキスト列を数値に変換することです。 変換が失敗したすべてのセルはエラー状態になり、フィルター処理する必要があります。 このシナリオは、スケールアウトされた M では実現できません。 |
Table.Transpose | サポートされていません |
M スクリプトの回避策
SplitColumn
長さおよび位置で分割する代替方法を以下に示します。
- Table.AddColumn(Source, "First characters", each Text.Start([Email], 7), type text)
- Table.AddColumn(#"Inserted first characters", "Text range", each Text.Middle([Email], 4, 9), type text)
このオプションは、リボンの [抽出] オプションからアクセスできます
Table.CombineColumns
- Table.AddColumn(RemoveEmailColumn, "Name", each [FirstName] & " " & [LastName])
ピボット
- PQ エディターから [ピボット変換] を選択し、ピボット列を選択します。
- 次に、値列と集計関数を選択します。
- [OK] をクリックすると、ピボット値でエディターのデータが更新されます
- 変換がサポートされていない可能性があるという警告メッセージも表示されます
- この警告を修正するには、PQ エディターを使用して、ピボットの一覧を手動で展開します。
- リボンから [詳細エディター] オプションを選択します。
- ピボット値の一覧を手動で展開します。
- List. Distinct () を次のような値の一覧に置き換えます。
#"Pivoted column" = Table.Pivot(Table.TransformColumnTypes(#"Changed column type 1", {{"genres", type text}}), {"Drama", "Horror", "Comedy", "Musical", "Documentary"}, "genres", "Rating", List.Average)
in
#"Pivoted column"
日付/時刻列の書式設定
Power Query ADF を使用するときに日付/時刻の書式を設定するには、次の設定に従って設定してください。
- Power Query の UI で列を選択し、[型の変更] > [日付/時刻] を選択します
- 警告メッセージが表示されます
- 詳細エディターを開き、
TransformColumnTypes
をTransformColumns
に変更します。 入力データに基づいて書式とカルチャを指定します。
#"Changed column type 1" = Table.TransformColumns(#"Duplicated column", {{"start - Copy", each DateTime.FromText(_, [Format = "yyyy-MM-dd HH:mm:ss", Culture = "en-us"]), type datetime}})
関連するコンテンツ
ADF でデータ ラングリング Power Query を作成する方法について説明します。