web-dev-qa-db-ja.com

(行を保持しながら)データをインポートした後、すべての列のすべてのエラー値を置き換えます

データソースとしてのExcelテーブルにエラー値(#NA、#DIV/0)が含まれている可能性があります。これにより、 Power Query の変換プロセス中のいくつかのステップが妨げられる可能性があります。
次の手順によっては、出力が表示されずにエラーが発生する場合があります。では、このケースをどのように処理するのでしょうか?

それらをキャッチするためのPowerQueryの2つの標準的な手順を見つけました。

  • エラーの削除 (UI:ホーム/行の削除/エラーの削除)->エラーのあるすべての行が削除されます
  • エラー値の置換 (UI:エラーの変換/置換)->この操作を実行するには、最初に列を選択する必要があります。

最初の可能性は私にとって解決策ではありません。行を保持し、エラー値を置き換えるだけだからです。

私の場合、データテーブルは時間の経過とともに変化します。つまり、列名が変更されるか(年など)、新しい列が表示されます。したがって、スクリプトを毎回変更したくないので、2番目の可能性は静的すぎます。

そのため、列名(および列数)に関係なく、すべての列を動的にクリーンアップする方法を試してみました。エラーをnull値に置き換えます。

let
    Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],

    //Remove errors of all columns of the data source. ColumnName doesn't play any role
    Cols = Table.ColumnNames(Source),
    ColumnListWithParameter = Table.FromColumns({Cols, List.Repeat({""}, List.Count(Cols))}, {"ColName" as text, "ErrorHandling" as text}),
    ParameterList = Table.ToRows(ColumnListWithParameter ),
    ReplaceErrorSource = Table.ReplaceErrorValues(Source, ParameterList)
in
    ReplaceErrorSource

ソースに2つの新しい列(エラーあり)を追加した後の、さまざまな3つのクエリメッセージを次に示します。

この種のデータクリーニングを行うための別の解決策がある場合は、ここに投稿を書き込んでください。

8
visu-l
let
    src = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
    cols = Table.ColumnNames(src),
    replace = Table.ReplaceErrorValues(src, List.Transform(cols, each {_, "!"}))
in
    replace
10
Sergey Lossev