2

Excel で Power Query を使用して、同じブック内のテーブルを参照しています。そのテーブル内の特定の列を選択したい。これは、テーブルを Power Query に読み込んでから、使用する列を選択することで実現できることを知っています。結果のクエリは次のとおりです。

let
    Source = Excel.CurrentWorkbook(){[Name="Legend_Data_Merged"]}[Content],
    #"Removed Other Columns" = Table.SelectColumns(
        Source,
        {
            "Observation number",
            "First Sales Offer - Products",
            "Middle Sales Offer(s) - Products",
            "Last Sales Offer - Products"
        }
    )
in
    #"Removed Other Columns"`

だから、ここに私の質問/問題があります:

この方法は、最初にテーブル全体を Power Query に取り込み、そこから削除していると思います。私がやりたいことは、ソース テーブルを "Legend_Data_Merged" テーブルとして定義することですが、同じ操作でそのテーブルからどの列を取得するかを選択します。このように、テーブル全体を Power Query に読み込む必要はありません。その理由は、テーブル自体の長さが約 120 列であり、必要なのは 3 つの列だけであり、これらの同様のクエリが約 20 あり、メモリを占有し始めているためです。ここで私の論理は間違っていますか?そうでない場合、クエリがどうなるかについて誰か考えがありますか?

ソース操作の [content] 部分で列を定義する方法はありますか?

ありがとう。

4

3 に答える 3

1

非常に単純な試みかもしれませんが、必要な列への参照のみを設定し、この小さなテーブルを強力なクエリで読み取るワークシート「DataTransfer」を追加してみませんか?

列が近接している場合は、名前付き範囲を設定し、この範囲のみを powerquery で読み取ることもできます。

とにかく、ワークブックが開いているとき、大きなテーブルは既にメモリ内にあります。powerquery を使用してテーブルを読み取り、3 つの列を選択する場合、メモリ割り当てはあまり多くないはずです。

于 2015-09-02T17:49:12.903 に答える
0

ここで私の質問と回答を参照できます。

やりたいことはTable.SelectColumns、Remove の代わりにメソッドを使用することです。

let
    db = Sql.Databases("sqlserver.database.url"){[Name="DatabaseName"]}[Data],
    Sales_vDimCustomer = Table.SelectColumns(
        db{[Schema="Sales",Item="vDimCustomer"]}[Data],
        {
            "Name",
            "Representative",
            "Status",
            "DateLastModified",
            "UserLastModified",
            "ExtractionDate"
        }
    )
in
    Sales_vDimCustomer

Express Profiler を使用して未加工の SQL を表示する場合、1 つのステートメントで実行されます。

SELECT
       $Table.Name,
       $Table.Representative,
       $Table.Status,
       $Table.DateLastModified, 
       $Table.UserLastModified,
       $Table.ExtractionDate
FROM
       Sales.vDimCustomer as $Table

PowerBi と Power Query では、多数の列をインポートしようとすると、この推奨事項とともにエラー/警告メッセージも表示されるようになりました。

于 2016-01-29T04:51:35.060 に答える