Bagikan melalui


Menangani navigasi

Tabel Navigasi (atau tabel navigasi) adalah bagian inti dari memberikan pengalaman yang mudah digunakan untuk konektor Anda. Pengalaman Power Query menampilkannya kepada pengguna setelah mereka memasukkan parameter yang diperlukan untuk fungsi sumber data Anda, dan telah diautentikasi dengan sumber data.

Tabel navigasi TripPin.

Di balik layar, tabel navigasi hanyalah nilai Tabel M biasa dengan bidang metadata tertentu yang ditentukan pada Jenisnya. Saat fungsi sumber data Anda mengembalikan tabel dengan bidang ini yang ditentukan, Power Query akan menampilkan dialog navigator. Anda benar-benar dapat melihat data yang mendasar sebagai nilai Tabel dengan mengklik kanan pada simpul akar dan memilih Edit.

Table.ToNavigationTable

Anda dapat menggunakan Table.ToNavigationTable fungsi untuk menambahkan metadata jenis tabel yang diperlukan untuk membuat tabel navigasi.

Catatan

Saat ini Anda perlu menyalin dan menempelkan fungsi ini ke ekstensi M Anda. Di masa depan kemungkinan akan dipindahkan ke pustaka standar M.

Tabel berikut menjelaskan parameter untuk fungsi ini:

Parameter Detail
tabel Tabel navigasi Anda.
keyColumns Daftar nama kolom yang bertindak sebagai kunci utama untuk tabel navigasi Anda.
nameColumn Nama kolom yang harus digunakan sebagai nama tampilan di navigator.
dataColumn Nama kolom yang berisi Tabel atau Fungsi yang akan ditampilkan.
itemKindColumn Nama kolom yang akan digunakan untuk menentukan tipe ikon yang akan ditampilkan. Lihat di bawah ini untuk daftar nilai yang valid untuk kolom.
itemNameColumn Nama kolom yang akan digunakan untuk menentukan perilaku pratinjau. Ini biasanya diatur ke nilai yang sama dengan itemKind.
isLeafColumn Nama kolom yang digunakan untuk menentukan apakah ini adalah simpul daun, atau apakah simpul dapat diperluas untuk berisi tabel navigasi lain.

Fungsi menambahkan metadata berikut ke jenis tabel:

Bidang Parameter
NavigationTable.NameColumn nameColumn
NavigationTable.DataColumn dataColumn
NavigationTable.ItemKindColumn itemKindColumn
NavigationTable.IsLeafColumn isLeafColumn
Preview.DelayColumn itemNameColumn

Nilai untuk ItemKind

Setiap nilai jenis item berikut ini menyediakan ikon yang berbeda dalam tabel navigasi.

  • Feed
  • Database
  • DatabaseServer
  • Dimensi
  • Tabel
  • Folder
  • Fungsi
  • Tampilan
  • Seprai
  • DefinedName
  • Rekaman

Contoh

Tabel navigasi datar

Sampel kode berikut menampilkan tabel navigasi datar dengan tiga tabel dan fungsi.

shared NavigationTable.Simple = () =>
    let
        objects = #table(
            {"Name",       "Key",        "Data",                           "ItemKind", "ItemName", "IsLeaf"},{
            {"Item1",      "item1",      #table({"Column1"}, {{"Item1"}}), "Table",    "Table",    true},
            {"Item2",      "item2",      #table({"Column1"}, {{"Item2"}}), "Table",    "Table",    true},
            {"Item3",      "item3",      FunctionCallThatReturnsATable(),  "Table",    "Table",    true},            
            {"MyFunction", "myfunction", AnotherFunction.Contents,       "Function", "Function", true}
            }),
        NavTable = Table.ToNavigationTable(objects, {"Key"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
    in
        NavTable;

shared FunctionCallThatReturnsATable = () =>
    #table({"DynamicColumn"}, {{"Dynamic Value"}});

Kode ini akan menghasilkan tampilan Navigator berikut di Power BI Desktop:

Sampel tabel navigasi datar.

Tabel navigasi multi-tingkat

Dimungkinkan untuk menggunakan tabel navigasi berlapis untuk membuat tampilan hierarkis di atas himpunan data Anda. Anda melakukan ini dengan mengatur nilai untuk baris tersebut IsLeaf ke false (yang menandainya sebagai simpul yang dapat diperluas), dan memformat Data kolom menjadi tabel navigasi lain.

shared NavigationTable.Nested = () as table =>
    let
        objects = #table(
            {"Name",       "Key",  "Data",                "ItemKind", "ItemName", "IsLeaf"},{
            {"Nested A",   "n1",   CreateNavTable("AAA"), "Table",    "Table",    false},
            {"Nested B",   "n2",   CreateNavTable("BBB"), "Table",    "Table",    false},
            {"Nested C",   "n3",   CreateNavTable("CCC"), "Table",    "Table",    false}
        }),
        NavTable = Table.ToNavigationTable(objects, {"Key"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
    in
        NavTable;

CreateNavTable = (message as text) as table => 
    let
        objects = #table(
            {"Name",  "Key",   "Data",                           "ItemKind", "ItemName", "IsLeaf"},{
            {"Item1", "item1", #table({"Column1"}, {{message}}), "Table",    "Table",    true},
            {"Item2", "item2", #table({"Column1"}, {{message}}), "Table",    "Table",    true}
        }),
        NavTable = Table.ToNavigationTable(objects, {"Key"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
    in
        NavTable;

Kode ini akan menghasilkan tampilan Navigator berikut di Power BI Desktop:

Sampel tabel navigasi hierarkis.

Tabel navigasi dinamis

Fungsionalitas yang lebih kompleks dapat dibangun dari dasar-dasar ini. Meskipun semua contoh di atas menunjukkan entitas yang dikodekan secara permanen dalam tabel navigasi, mudah untuk melihat bagaimana tabel navigasi dapat dihasilkan secara dinamis berdasarkan entitas yang tersedia untuk pengguna tertentu. Beberapa pertimbangan utama untuk tabel navigasi dinamis meliputi:

  • Penanganan kesalahan untuk memastikan pengalaman yang baik bagi pengguna yang tidak memiliki akses ke titik akhir tertentu.
  • Evaluasi node malas secara default; simpul daun tidak dievaluasi sampai node induk diperluas. Implementasi tertentu dari tabel navigasi dinamis multi-tingkat dapat mengakibatkan evaluasi yang bersemangat pada seluruh pohon. Pastikan untuk memantau jumlah panggilan yang dilakukan Power Query karena awalnya merender tabel navigasi. Misalnya, Table.InsertRows adalah 'lazier' daripada Table.FromRecords, karena tidak perlu mengevaluasi argumennya.