TripPin bagian 3 - Tabel navigasi
Tutorial multi-bagian ini mencakup pembuatan ekstensi sumber data baru untuk Power Query. Tutorial ini dimaksudkan untuk dilakukan secara berurutan—setiap pelajaran dibangun pada konektor yang dibuat dalam pelajaran sebelumnya, secara bertahap menambahkan kemampuan baru ke konektor Anda.
Dalam pelajaran ini, Anda akan:
- Membuat tabel navigasi untuk sekumpulan kueri tetap
- Menguji tabel navigasi di Power BI Desktop
Pelajaran ini menambahkan tabel navigasi ke konektor TripPin yang dibuat dalam pelajaran sebelumnya. Saat konektor Anda menggunakan OData.Feed
fungsi (Bagian 1), Anda menerima tabel navigasi "gratis", seperti yang berasal dari dokumen $metadata layanan OData. Saat Anda pindah ke Web.Contents
fungsi (Bagian 2), Anda kehilangan tabel navigasi bawaan. Dalam pelajaran ini, Anda mengambil sekumpulan kueri tetap yang Anda buat di Power BI Desktop dan menambahkan metadata yang sesuai untuk Power Query untuk memunculkan dialog Navigator untuk fungsi sumber data Anda.
Lihat dokumentasi Tabel Navigasi untuk informasi selengkapnya tentang menggunakan tabel navigasi.
Menentukan kueri tetap di konektor
Konektor sederhana untuk REST API dapat dianggap sebagai serangkaian kueri tetap, masing-masing mengembalikan tabel. Tabel ini dibuat dapat ditemukan melalui tabel navigasi konektor. Pada dasarnya, setiap item dalam navigator dikaitkan dengan URL dan set transformasi tertentu.
Anda mulai dengan menyalin kueri yang Anda tulis di Power BI Desktop (dalam pelajaran sebelumnya) ke dalam file konektor Anda. Buka proyek TripPin di Visual Studio Code, dan tempelkan kueri Maskapai dan Bandara ke dalam file TripPin.pq. Anda kemudian dapat mengubah kueri tersebut menjadi fungsi yang mengambil parameter teks tunggal:
GetAirlinesTable = (url as text) as table =>
let
source = TripPin.Feed(url & "Airlines"),
value = source[value],
toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode", "Name"})
in
expand;
GetAirportsTable = (url as text) as table =>
let
source = TripPin.Feed(url & "Airports"),
value = source[value],
#"Converted to Table" = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"Name", "IcaoCode", "IataCode", "Location"}, {"Name", "IcaoCode", "IataCode", "Location"}),
#"Expanded Location" = Table.ExpandRecordColumn(#"Expanded Column1", "Location", {"Address", "Loc", "City"}, {"Address", "Loc", "City"}),
#"Expanded City" = Table.ExpandRecordColumn(#"Expanded Location", "City", {"Name", "CountryRegion", "Region"}, {"Name.1", "CountryRegion", "Region"}),
#"Renamed Columns" = Table.RenameColumns(#"Expanded City",{{"Name.1", "City"}}),
#"Expanded Loc" = Table.ExpandRecordColumn(#"Renamed Columns", "Loc", {"coordinates"}, {"coordinates"}),
#"Added Custom" = Table.AddColumn(#"Expanded Loc", "Latitude", each [coordinates]{1}),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Longitude", each [coordinates]{0}),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"coordinates"}),
#"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Name", type text}, {"IcaoCode", type text}, {"IataCode", type text}, {"Address", type text}, {"City", type text}, {"CountryRegion", type text}, {"Region", type text}, {"Latitude", type number}, {"Longitude", type number}})
in
#"Changed Type";
Selanjutnya Anda akan mengimpor kueri tabel navigasi tiruan yang Anda tulis yang membuat tabel tetap yang ditautkan ke kueri himpunan data ini. Sebut saja TripPinNavTable
:
TripPinNavTable = (url as text) as table =>
let
source = #table({"Name", "Data"}, {
{ "Airlines", GetAirlinesTable(url) },
{ "Airports", GetAirportsTable(url) }
})
in
source;
Akhirnya Anda mendeklarasikan fungsi bersama baru, TripPin.Contents
, yang digunakan sebagai fungsi sumber data utama Anda. Anda juga menghapus Publish
nilai agar TripPin.Feed
tidak lagi muncul dalam dialog Dapatkan Data .
[DataSource.Kind="TripPin"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);
[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Contents = Value.ReplaceType(TripPinNavTable, type function (url as Uri.Type) as any);
Catatan
Ekstensi Anda dapat menandai beberapa fungsi sebagai shared
, dengan atau tanpa mengaitkannya dengan DataSource.Kind
. Namun, ketika Anda mengaitkan fungsi dengan fungsi tertentu DataSource.Kind
, setiap fungsi harus memiliki set parameter yang diperlukan yang sama, dengan nama dan jenis yang sama. Ini karena parameter fungsi sumber data digabungkan untuk membuat 'kunci' yang digunakan untuk mencari kredensial yang di-cache.
Bangun konektor Anda setelah menyelesaikan semua perubahan dan menguji fungsi Anda TripPin.Contents
menggunakan file TripPin.query.pq. Anda bisa terus menggunakan kredensial yang dibuat sebelumnya atau Anda bisa mengatur yang baru lalu mengevaluasi file Power Query Anda saat ini.
TripPin.Contents("https://services.odata.org/v4/TripPinService/")
Membuat tabel navigasi
Gunakan fungsi Table.ToNavigationTable yang berguna untuk memformat tabel statis Anda menjadi sesuatu yang dikenali Power Query sebagai tabel navigasi. Karena fungsi ini bukan bagian dari pustaka standar Power Query, Anda perlu menyalin kode sumbernya ke dalam file .pq Anda.
Dengan fungsi pembantu ini di tempat, perbarui fungsi Anda TripPinNavTable
berikutnya untuk menambahkan bidang tabel navigasi.
TripPinNavTable = (url as text) as table =>
let
source = #table({"Name", "Data", "ItemKind", "ItemName", "IsLeaf"}, {
{ "Airlines", GetAirlinesTable(url), "Table", "Table", true },
{ "Airports", GetAirportsTable(url), "Table", "Table", true }
}),
navTable = Table.ToNavigationTable(source, {"Name"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
in
navTable;
Menjalankan kueri pengujian lagi, setelah membangun konektor lagi, memberi Anda hasil yang sama seperti terakhir kali—dengan beberapa kolom lagi ditambahkan.
Catatan
Anda tidak melihat jendela Navigator muncul di jendela hasil PQTest Visual Studio Code. Jendela Output Kueri M selalu menampilkan tabel yang mendasar.
Jika Anda menyalin ekstensi ke konektor kustom Power BI Desktop Anda dan memanggil fungsi baru dari dialog Dapatkan Data , navigator Anda akan muncul.
Jika Anda memilih kanan pada akar pohon navigasi dan memilih Edit, Anda akan melihat tabel yang sama seperti yang Anda lakukan dalam Visual Studio.
Kesimpulan
Dalam tutorial ini, Anda menambahkan Tabel Navigasi ke ekstensi Anda. Tabel Navigasi adalah fitur utama yang membuat konektor lebih mudah digunakan. Dalam contoh ini tabel navigasi Anda hanya memiliki satu tingkat, tetapi UI Power Query mendukung tampilan tabel navigasi yang memiliki beberapa dimensi (bahkan saat dikacau).