หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
สําหรับสถานการณ์ที่การตอบสนองของแหล่งข้อมูลไม่ได้แสดงในรูปแบบที่ Power BI สามารถใช้ได้โดยตรง Power Query สามารถใช้เพื่อดําเนินการแปลงชุดได้
การแปลงแบบคงที่
ในกรณีส่วนใหญ่ แหล่งข้อมูลจะแสดงข้อมูลในลักษณะที่สอดคล้องกัน: ชื่อคอลัมน์ ชนิดข้อมูล และโครงสร้างลําดับชั้นจะสอดคล้องกันสําหรับจุดสิ้นสุดที่กําหนด ในสถานการณ์นี้ เป็นการเหมาะสมที่จะใช้ชุดการแปลงเดียวกันเสมอเพื่อรับข้อมูลในรูปแบบที่ Power BI ยอมรับได้
ตัวอย่างของการแปลงแบบคงที่สามารถพบได้ในบทช่วยสอน TripPin ส่วนที่ 2 - ตัวเชื่อมต่อข้อมูลสําหรับบริการ REST เมื่อแหล่งข้อมูลได้รับการปฏิบัติเป็นบริการ REST มาตรฐาน:
let
Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/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
การแปลงในตัวอย่างนี้คือ:
-
Sourceเป็นระเบียนที่ส่งคืนจากการโทรไปยังTripPin.Feed(...) - คุณดึงค่าจากคู่คีย์-ค่าคู่ใดคู่
Sourceหนึ่ง ชื่อของคีย์คือvalueและคุณเก็บผลลัพธ์ไว้ในตัวแปรที่เรียกว่าvalue -
valueคือรายการที่คุณแปลงเป็นตาราง แต่ละองค์ประกอบจะvalueกลายเป็นแถวในตาราง ซึ่งคุณสามารถเรียกtoTable - แต่ละองค์ประกอบใน
valueตัวเองเป็นระเบียนtoTableมีทั้งหมดนี้ในคอลัมน์เดียว:"Column1"ขั้นตอนนี้จะดึงข้อมูลทั้งหมดที่มีคีย์"AirlineCode"ลงในคอลัมน์ที่เรียกว่า"AirlineCode"และข้อมูลทั้งหมดที่มีคีย์"Name"ลงในคอลัมน์ที่เรียกว่า"Name"สําหรับแต่ละแถวในtoTable."Column1"ถูกแทนที่ด้วยคอลัมน์ใหม่สองคอลัมน์นี้
ในตอนท้ายของวัน คุณจะเหลือข้อมูลในรูปแบบตารางอย่างง่ายที่ Power BI สามารถใช้และแสดงผลได้อย่างง่ายดาย:
สิ่งสําคัญคือต้องทราบว่าลําดับของการแปลงแบบคงที่ของความจําเพาะนี้ใช้ได้กับจุดสิ้นสุด เดียว เท่านั้น ในตัวอย่างก่อนหน้านี้ ลําดับของการแปลงนี้จะทํางานเฉพาะเมื่อ "AirlineCode" มี "Name" อยู่ในการตอบสนองปลายทาง REST เนื่องจากมีการฮาร์ดโค้ดลงในโค้ด M ลําดับของการแปลงนี้อาจไม่ทํางานหากคุณพยายามไปที่ /Event จุดสิ้นสุด
ความจําเพาะในระดับสูงนี้อาจจําเป็นสําหรับการพุชข้อมูลไปยังตารางการนําทาง แต่สําหรับฟังก์ชันการเข้าถึงข้อมูลทั่วไป เราขอแนะนําให้คุณทําการแปลงที่เหมาะสมกับปลายทางทั้งหมดเท่านั้น
Note
อย่าลืมทดสอบการแปลงภายใต้สถานการณ์ข้อมูลต่างๆ หากผู้ใช้ไม่มีข้อมูลใดๆ ที่ /airlines ปลายทาง การแปลงของคุณส่งผลให้ตารางว่างเปล่าที่มี Schema ที่ถูกต้องหรือไม่ หรือพบข้อผิดพลาดระหว่างการประเมิน? ดู TripPin ส่วนที่ 7: สคีมาขั้นสูงพร้อมประเภท M สําหรับการอภิปรายเกี่ยวกับการทดสอบหน่วย
การแปลงแบบไดนามิก
บางครั้งจําเป็นต้องใช้ตรรกะที่ซับซ้อนมากขึ้นเพื่อแปลงการตอบสนอง API เป็นฟอร์มที่เสถียรและสอดคล้องกันซึ่งเหมาะสมกับแบบจําลองข้อมูล Power BI
การตอบสนอง API ที่ไม่สอดคล้องกัน
โฟลว์การควบคุม M พื้นฐาน (คําสั่ง if, รหัสสถานะ HTTP, ลอง... บล็อกจับ และอื่นๆ) โดยทั่วไปจะเพียงพอที่จะจัดการกับสถานการณ์ที่มีวิธีตอบสนองของ API เพียงไม่กี่วิธี
การกําหนด Schema On-The-Fly
API บางตัวได้รับการออกแบบมาเพื่อให้ต้องรวมข้อมูลหลายชิ้นเพื่อให้ได้รูปแบบตารางที่ถูกต้อง พิจารณา/sheetsของ Smartsheet ซึ่งประกอบด้วยอาร์เรย์ของชื่อคอลัมน์และอาร์เรย์ของแถวข้อมูล ตัวเชื่อมต่อ Smartsheet สามารถแยกวิเคราะห์การตอบสนองนี้ได้ด้วยวิธีต่อไปนี้:
raw = Web.Contents(...),
columns = raw[columns],
columnTitles = List.Transform(columns, each [title]),
columnTitlesWithRowNumber = List.InsertRange(columnTitles, 0, {"RowNumber"}),
RowAsList = (row) =>
let
listOfCells = row[cells],
cellValuesList = List.Transform(listOfCells, each if Record.HasFields(_, "value") then [value]
else null),
rowNumberFirst = List.InsertRange(cellValuesList, 0, {row[rowNumber]})
in
rowNumberFirst,
listOfRows = List.Transform(raw[rows], each RowAsList(_)),
result = Table.FromRows(listOfRows, columnTitlesWithRowNumber)
- ขั้นแรกให้จัดการกับข้อมูลส่วนหัวของคอลัมน์ คุณสามารถดึงเรกคอร์ด
titleของแต่ละคอลัมน์ลงในรายการ โดยนําหน้าด้วยRowNumberคอลัมน์ที่คุณรู้ว่าจะแสดงเป็นคอลัมน์แรกนี้เสมอ - ถัดไปคุณสามารถกําหนดฟังก์ชันที่ช่วยให้คุณสามารถแยกวิเคราะห์แถวเป็นรายการเซลล์
values คุณสามารถเพิ่มrowNumberข้อมูลล่วงหน้าได้อีกครั้ง - ใช้ฟังก์ชันของคุณ
RowAsList()กับแต่ละrows ที่ส่งคืนในการตอบกลับ API - แปลงรายการเป็นตาราง โดยระบุส่วนหัวของคอลัมน์