TripPin ส่วนที่ 3 - ตารางนําทาง
บทช่วยสอนแบบหลายส่วนนี้ครอบคลุมการสร้างส่วนขยายแหล่งข้อมูลใหม่สําหรับ Power Query บทช่วยสอนมีไว้ให้ทําตามลําดับ —บทเรียนแต่ละบทจะสร้างขึ้นบนตัวเชื่อมต่อที่สร้างขึ้นในบทเรียนที่แล้ว โดยการเพิ่มความสามารถใหม่ให้กับตัวเชื่อมต่อของคุณแบบเพิ่มหน่วย
ในบทเรียนนี้ คุณจะ:
- สร้างตารางนําทางสําหรับชุดคิวรีแบบคงที่
- ทดสอบตารางการนําทางใน Power BI Desktop
บทเรียนนี้เพิ่มตารางนําทางไปยังตัวเชื่อมต่อ TripPin ที่สร้างขึ้นใน บทเรียนก่อนหน้า เมื่อตัวเชื่อมต่อของคุณใช้ฟังก์ชัน (ส่วนที่ OData.Feed
1) คุณได้รับตารางการนําทาง "ฟรี" ตามที่ได้รับมาจากเอกสาร$metadata ของบริการ OData เมื่อคุณย้ายไปยังฟังก์ชัน (ส่วนที่ Web.Contents
2) คุณได้ทําตารางการนําทางที่มีอยู่ภายในหายไป ในบทเรียนนี้ คุณจะได้ใช้ชุดของคิวรีแบบคงที่ที่คุณสร้างใน Power BI Desktop และเพิ่มเมตาดาต้าที่เหมาะสมสําหรับ Power Query เพื่อเปิดกล่องโต้ตอบตัวนําทางสําหรับฟังก์ชันแหล่งข้อมูลของคุณ
ดูเอกสาร ประกอบ ตารางการนําทางสําหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ตารางนําทาง
การกําหนดคิวรีแบบคงที่ในตัวเชื่อมต่อ
ตัวเชื่อมต่ออย่างง่ายสําหรับ REST API สามารถคิดว่าเป็นชุดคิวรีแบบคงที่ ซึ่งแต่ละรายการจะส่งกลับตาราง ตารางเหล่านี้ถูกทําให้สามารถมองเห็นได้ผ่านตารางการนําทางของตัวเชื่อมต่อ โดยพื้นฐานแล้ว แต่ละรายการในตัวนําทางจะเชื่อมโยงกับ URL เฉพาะและชุดของการแปลง
คุณเริ่มต้นโดยการคัดลอกคิวรีที่คุณเขียนใน Power BI Desktop (ในบทเรียนก่อนหน้า) ลงในไฟล์ตัวเชื่อมต่อของคุณ เปิดโครงการ TripPin ใน Visual Studio Code และวางคิวรีสายการบินและสนามบินลงในไฟล์ TripPin.pq จากนั้นคุณสามารถเปลี่ยนคิวรีเหล่านั้นเป็นฟังก์ชันที่ใช้พารามิเตอร์ข้อความเดียว:
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";
ถัดไป คุณจะนําเข้าคิวรีตารางการนําทางแบบจําลองที่คุณเขียนซึ่งสร้างตารางที่เชื่อมโยงแบบคงที่กับคิวรีชุดข้อมูลเหล่านี้ เรียกมันว่า TripPinNavTable
:
TripPinNavTable = (url as text) as table =>
let
source = #table({"Name", "Data"}, {
{ "Airlines", GetAirlinesTable(url) },
{ "Airports", GetAirportsTable(url) }
})
in
source;
ในตอนท้าย คุณสามารถประกาศฟังก์ชัน TripPin.Contents
ที่ใช้งานร่วมกันใหม่ ซึ่งใช้เป็นฟังก์ชันแหล่งข้อมูลหลักของคุณ คุณยังสามารถลบค่า Publish
ออกจาก TripPin.Feed
เพื่อให้ไม่แสดงในกล่องโต้ตอบ รับข้อมูล อีกต่อไป
[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);
หมายเหตุ
ส่วนขยายของคุณสามารถทําเครื่องหมายหลายฟังก์ชันเป็น shared
มี หรือไม่มีการเชื่อมโยงฟังก์ชันเหล่านั้นกับDataSource.Kind
อย่างไรก็ตาม เมื่อคุณเชื่อมโยงฟังก์ชันกับ เฉพาะ DataSource.Kind
แต่ละฟังก์ชัน จะต้องมี ชุด พารามิเตอร์ที่จําเป็น เดียวกันที่มีชื่อและชนิดเดียวกัน ทั้งนี้เนื่องจากพารามิเตอร์ฟังก์ชันแหล่งข้อมูลจะถูกรวมเข้าด้วยกันเพื่อสร้าง 'คีย์' ที่ใช้สําหรับการค้นหาข้อมูลประจําตัวที่แคชไว้
สร้างตัวเชื่อมต่อของคุณหลังจากเสร็จสิ้นการเปลี่ยนแปลงทั้งหมดและทดสอบฟังก์ชันของคุณ TripPin.Contents
โดยใช้ไฟล์ TripPin.query.pq คุณสามารถใช้ข้อมูลประจําตัวที่สร้างขึ้นก่อนหน้านี้หรือคุณสามารถตั้งค่าใหม่แล้วประเมินไฟล์ Power Query ปัจจุบันของคุณได้
TripPin.Contents("https://services.odata.org/v4/TripPinService/")
การสร้างตารางนําทาง
ใช้ฟังก์ชัน Table.ToNavigationTable ที่มีประโยชน์เพื่อจัดรูปแบบตารางแบบคงที่ของคุณให้เป็นสิ่งที่ Power Query รู้จักเป็นตารางนําทาง เนื่องจากฟังก์ชันนี้ไม่ใช่ส่วนหนึ่งของไลบรารีมาตรฐานของ Power Query คุณจําเป็นต้องคัดลอกโค้ดต้นฉบับลงในไฟล์ .pq ของคุณ
ด้วยฟังก์ชันผู้ช่วยเหลือนี้ให้อัปเดตฟังก์ชันของคุณ TripPinNavTable
ถัดไปเพื่อเพิ่มเขตข้อมูลตารางการนําทาง
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;
เรียกใช้คิวรีทดสอบของคุณอีกครั้ง หลังจากสร้างตัวเชื่อมต่อของคุณอีกครั้ง จะให้ผลลัพธ์ที่คล้ายกันเป็นครั้งสุดท้าย พร้อมกับเพิ่มคอลัมน์เพิ่มเติมอีกสองสามคอลัมน์
หมายเหตุ
คุณไม่เห็น หน้าต่างตัว นําทางปรากฏขึ้นในหน้าต่างผลลัพธ์ PQTest ของ Visual Studio Code หน้าต่างเอาต์พุตคิวรี M จะแสดงตารางพื้นฐานเสมอ
ถ้าคุณคัดลอกส่วนขยายของคุณไปยังตัวเชื่อมต่อแบบกําหนดเองของ Power BI Desktop และเรียกใช้ฟังก์ชันใหม่จาก กล่องโต้ตอบรับข้อมูล ตัวนําทางของคุณจะปรากฏขึ้น
ถ้าคุณเลือกขวาบนรากของทรีการนําทาง และเลือก แก้ไข คุณจะเห็นตารางเดียวกันกับที่คุณทําภายใน Visual Studio
บทสรุป
ในบทช่วยสอนนี้ คุณได้เพิ่ม ตาราง นําทางไปยังส่วนขยายของคุณ ตารางนําทางเป็นคุณลักษณะสําคัญที่ทําให้ตัวเชื่อมต่อใช้งานได้ง่ายขึ้น ในตัวอย่างนี้ ตารางการนําทางของคุณมีเพียงระดับเดียว แต่ Power Query UI สนับสนุนการแสดงตารางการนําทางที่มีหลายมิติ (แม้ว่าจะไม่มีความคลาดกัน)