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 และวางคิวรีสายการบินและสนามบินลงในไฟล์ 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 ของคุณ การเรียกใช้คิวรีการทดสอบต่อไปนี้จะให้พรอมท์ข้อมูลประจําตัวและการแสดงผลตารางอย่างง่าย

TripPin.Contents("https://services.odata.org/v4/TripPinService/")

TripPin Table.

การสร้างตารางนําทาง

คุณจะใช้ ฟังก์ชัน 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;

เรียกใช้คิวรีทดสอบของคุณอีกครั้งจะให้ผลลัพธ์ที่คล้ายกันเป็นครั้งสุดท้าย พร้อมกับเพิ่มคอลัมน์อีกสองสามคอลัมน์ TripPin Table2.

หมายเหตุ

คุณจะไม่เห็น หน้าต่าง ตัว นําทาง ปรากฏใน Visual Studio หน้าต่างเอาต์พุตคิวรี M จะแสดงตารางพื้นฐานเสมอ

ถ้าคุณคัดลอกส่วนขยายของคุณไปยังตัวเชื่อมต่อแบบกําหนดเองของ Power BI Desktop และเรียกใช้ฟังก์ชันใหม่จาก กล่องโต้ตอบรับข้อมูล คุณจะเห็นตัวนําทางของคุณปรากฏขึ้น

TripPin Navigator.

ถ้าคุณคลิกขวาบนรากของทรีการนําทาง และเลือก แก้ไข คุณจะเห็นตารางเดียวกันกับที่คุณทําภายใน Visual Studio

TripPin Query.

บทสรุป

ในบทช่วยสอนนี้ คุณได้เพิ่ม ตาราง นําทางไปยังส่วนขยายของคุณ ตารางการนําทางเป็นคุณลักษณะหลักที่ทําให้ตัวเชื่อมต่อใช้งานได้ง่ายขึ้น ในตัวอย่างนี้ ตารางการนําทางของคุณมีเพียงระดับเดียว แต่ UI ของ Power Query สนับสนุนการแสดงตารางการนําทางที่มีหลายมิติ (แม้ว่าจะไม่มีความคลาดกัน)

ขั้นตอนถัดไป

TripPin ส่วนที่ 4 - เส้นทางของแหล่งข้อมูล