การจัดการการแปลง
สําหรับสถานการณ์ที่การตอบสนองของแหล่งข้อมูลไม่แสดงในรูปแบบที่ Power BI สามารถใช้ได้โดยตรง Power Query สามารถใช้เพื่อดําเนินการแปลงชุดได้
การแปลงแบบคงที่
ในกรณีส่วนใหญ่ ข้อมูลจะแสดงในลักษณะที่สอดคล้องกันตามแหล่งข้อมูล: ชื่อคอลัมน์ ชนิดข้อมูล และโครงสร้างแบบลําดับชั้นจะสอดคล้องกันสําหรับจุดสิ้นสุดที่กําหนด ในสถานการณ์นี้ การนําชุดการแปลงเดียวกันนี้ไปใช้เพื่อรับข้อมูลในรูปแบบที่ยอมรับได้สําหรับ Power BI เสมอ
ตัวอย่างของการแปลงแบบคงที่สามารถพบได้ใน TripPin Part 2 - เชื่อมต่อ or ข้อมูลสําหรับบทช่วยสอนบริการ 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
จุดสิ้นสุด
ความเฉพาะเจาะจงในระดับสูงนี้อาจจําเป็นสําหรับการส่งข้อมูลไปยังตารางนําทาง แต่สําหรับฟังก์ชันการเข้าถึงข้อมูลทั่วไปขอแนะนําให้คุณดําเนินการแปลงที่เหมาะสมกับจุดสิ้นสุดทั้งหมดเท่านั้น
หมายเหตุ
ตรวจสอบให้แน่ใจว่าได้ทดสอบการแปลงภายใต้สถานการณ์ข้อมูลที่หลากหลาย ถ้าผู้ใช้ไม่มีข้อมูลใด ๆ ที่ /airlines
ปลายทาง การแปลงของคุณจะส่งผลให้ตารางว่างที่มีเค้าร่างที่ถูกต้องหรือไม่ หรือพบข้อผิดพลาดในระหว่างการประเมินหรือไม่ ดู TripPin ส่วนที่ 7: เค้าร่างขั้นสูงที่มีชนิด M สําหรับการสนทนาเกี่ยวกับการทดสอบหน่วย
การแปลงข้อมูลแบบไดนามิก
ในบางครั้งจําเป็นต้องใช้ตรรกะที่ซับซ้อนมากขึ้นเพื่อแปลงการตอบสนอง API เป็นฟอร์มที่เสถียรและสอดคล้องกันที่เหมาะสมสําหรับแบบจําลองข้อมูล Power BI
การตอบสนอง API ที่ไม่สอดคล้องกัน
โฟลว์การควบคุม M พื้นฐาน (ถ้าคําสั่ง รหัสสถานะ HTTP ลอง... ตรวจจับบล็อก และอื่น ๆ) มักเพียงพอที่จะจัดการสถานการณ์ต่าง ๆ ที่มีหลายวิธีที่ API ตอบสนอง
การกําหนดสคีมาในทันที
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
กับคอลัมน์ที่คุณทราบว่าจะถูกแสดงเป็นคอลัมน์แรกเสมอ - ถัดไป คุณสามารถกําหนดฟังก์ชันที่ช่วยให้คุณสามารถแยกวิเคราะห์แถวลงใน รายการของเซลล์
value
ได้ คุณสามารถเติมข้อมูลล่วงหน้าrowNumber
ได้อีกครั้ง - นําฟังก์ชันของคุณ
RowAsList()
ไปใช้กับ s แต่ละรายการที่row
ส่งกลับในการตอบสนอง API - แปลง รายการ เป็นตารางโดยระบุส่วนหัวของคอลัมน์
คำติชม
https://aka.ms/ContentUserFeedback
เร็วๆ นี้: ตลอดปี 2024 เราจะขจัดปัญหา GitHub เพื่อเป็นกลไกคำติชมสำหรับเนื้อหา และแทนที่ด้วยระบบคำติชมใหม่ สำหรับข้อมูลเพิ่มเติม ให้ดู:ส่งและดูข้อคิดเห็นสำหรับ