ต่อไปนี้คือคําตอบบางคําตอบสําหรับคําถามทั่วไปที่อาจเกิดขึ้นขณะพัฒนาตัวเชื่อมต่อ Power Query แบบกําหนดเอง
ภายนอกรูปแบบคําเตือนที่จัดทําเป็นเอกสาร ขณะนี้เรายังไม่มีวิธีการส่งกลับคําเตือนที่เป็นแถบ เช่น ตารางขนาดใหญ่หรือคําเตือนเมตาดาต้าขนาดใหญ่
เป็นไปได้หรือไม่ที่จะนําเสนอข้อมูลพาร์ติชันตารางโดยการเพิ่มระดับอื่นในลําดับชั้นการนําทางและอนุญาตให้ผู้ใช้เลือกพาร์ติชันอย่างน้อยหนึ่งพาร์ติชัน
อาจเป็นไปได้ถ้าผู้ใช้ปลายทางต้องการเรียกใช้พาร์ติชันเดียวของข้อมูลอยู่บ่อย ๆ อย่างไรก็ตาม ฟังก์ชันนี้ไม่สามารถเพิ่มลงในตัวเชื่อมต่อที่มีอยู่ได้ ดังนั้นการเปลี่ยนแปลงนี้จะทําลายตัวเชื่อมต่อที่มีอยู่
ตัวเชื่อมต่อแบบกําหนดเองที่ฉันได้รับการพัฒนาทํางานได้ดีใน Power BI Desktop แต่เมื่อฉันพยายามเรียกใช้ในบริการของ Power BI ฉันไม่สามารถตั้งค่าข้อมูลประจําตัวหรือกําหนดค่าแหล่งข้อมูลได้ มีอะไรผิดปกติ
อาจมีหลายสาเหตุที่คุณเห็นลักษณะการทํางานนี้ ข้อผิดพลาดทั่วไปบางอย่างที่อาจเกิดขึ้นขณะเรียกใช้ตัวเชื่อมต่อบนบริการของ Power BI คือ:
- การอัปเดตข้อมูลประจําตัวของแหล่งข้อมูลล้มเหลว
- มีข้อยกเว้นเกิดขึ้นขณะพยายามรับ
OAuthProvider
ข้อมูลDataSourceReference
- ไม่สนับสนุนชนิดแหล่งข้อมูลที่กําหนด
ก่อนที่คุณจะเริ่มการแก้ไขปัญหาลักษณะการทํางานนี้ ก่อนอื่นให้รวบรวมสําเนาของตัวเชื่อมต่อแบบกําหนดเอง (ไฟล์ .pq หรือ .mez) หากคุณมีไฟล์ .mez ให้เปลี่ยนชื่อไฟล์เป็น .zip และแตกไฟล์ .pq
วิธีการแก้ไขปัญหาตัวเชื่อมต่อแบบกําหนดเอง:
เปิดไฟล์ตัวเชื่อมต่อแบบกําหนดเอง (.pq) ในตัวแก้ไขข้อความที่คุณเลือก
TestConnection
ค้นหาฟังก์ชัน ฟังก์ชันTestConnection
นี้จําเป็นสําหรับการรีเฟรชตามกําหนดการในบริการของ Power BI แต่ไม่ได้ใช้ใน Power BI Desktop ตรวจสอบไฟล์ .pq สําหรับTestConnection
การดําเนินการ และยืนยันว่าพารามิเตอร์ตรงกับฟังก์ชันแหล่งข้อมูลของตัวเชื่อมต่อ ข้อมูลเพิ่มเติม: การจัดการการสนับสนุนเกตเวย์ถ้าตัวเชื่อมต่อใช้ OAuth ตรวจสอบ
state
พารามิเตอร์ สาเหตุทั่วไปของความล้มเหลวของบริการเท่านั้นเป็นพารามิเตอร์ที่ขาดหายไปstate
ในการใช้งานของStartLogin
ตัวเชื่อมต่อ พารามิเตอร์นี้ไม่ได้ถูกใช้ใน Power BI Desktop แต่จําเป็นต้องใช้ในบริการของ Power BI พารามิเตอร์state
ต้องส่งผ่านไปยังการเรียกไปยัง Uri.BuildQueryString ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้งานที่ถูกต้องของstate
StartLogin = (resourceUrl, state, display) =>
let
authorizeUrl = authorize_uri & "?" & Uri.BuildQueryString([
response_type = "code",
client_id = client_id,
state = state, //correct implementation
redirect_uri = redirect_uri,
resource = resource
])
in
[
LoginUri = authorizeUrl,
CallbackUri = redirect_uri,
WindowHeight = 720,
WindowWidth = 1024,
Context = null
];
เมื่อ Schema หรือฐานข้อมูลเปิดขึ้นในตัวนําทาง Power Query จะเริ่มต้นดึงข้อมูลตารางทั้งหมดภายใต้ฐานข้อมูลแทนที่จะรอการเลือกตาราง อะไรคือสาเหตุของพฤติกรรมนี้?
ลักษณะการทํางานนี้อาจเป็นผลข้างเคียงของวิธีการที่คุณกําลังสร้างตารางการนําทางของคุณ ถ้าคุณกําลังสร้างระเบียนใหม่ด้วย Table.TransformRows การใช้งานนี้มักจะส่งผลให้มีการประเมินเบื้องหน้าของตารางข้อมูล อย่างไรก็ตาม ค่าที่เกิดจาก Table.AddColumn มีการผลิตที่ชื่อ lazily ดังนั้น ในโค้ดตัวอย่างต่อไปนี้ "GetSchemas(url, [name])" แต่ละรายการจะไม่ถูกประเมิน เว้นแต่ว่าคิวรีผู้ใช้จะอ้างอิงข้อมูลนี้
GetShares = (server_host as text) as table =>
let
url = server_host & "/shares",
shares = GetItems(url),
withData = Table.AddColumn(shares, "Data", each GetSchemas(url, [name])),
withItemKind = Table.AddColumn(withData, "ItemKind", each "Folder"),
withItemName = Table.AddColumn(withItemKind, "ItemName", each "Folder"),
withIsLeaf = Table.AddColumn(withItemName, "IsLeaf", each false),
renamed = Table.RenameColumns(withIsLeaf, {{"name", "Name"}, {"key", "Key"}}),
navTable = Table.ToNavigationTable(renamed, {"Key"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
in
navTable;
ตารางเดียวสามารถประกอบด้วยไฟล์ที่มีการแบ่งพาร์ติชันได้หลายไฟล์ การใช้งานปัจจุบันจะดาวน์โหลดไฟล์ทั้งหมดก่อนแสดงตัวอย่าง มีวิธีหลีกเลี่ยงการดาวน์โหลดไฟล์ทั้งหมดและดาวน์โหลดไฟล์เท่านั้นจนกว่าจะมีแถวเพียงพอสําหรับตัวอย่างหรือไม่?
ลักษณะการทํางานนี้เป็นผลข้างเคียงของการใช้ Table.Combine วิธีอื่นคือการสร้าง "ตารางของตาราง" และใช้ฟังก์ชัน Table.ExpandTableColumn วิธีนี้ lazily ขยายพาร์ติชันตามความจําเป็น ตัวอย่างเช่น:
GetFiles = (tables_url as text, table_name as text) as table =>
let
// parse raw ndjson and get the list of parquet files
// resp format: line 1: protocol, line 2: schema, line 3..:file info
resp = Lines.FromBinary(SendRequest(tables_url & "/" & table_name & "/query", [
Headers= [#"Content-Type"="application/json"],
Content= Text.ToBinary("{}")
]), null, null, 1252),
protocol = resp{0}, // TODO: Add protocol version check
schema = Json.Document(Json.Document(resp{1})[metaData][schemaString])[fields],
columnNames = List.Transform(schema, each [name]),
fileInfos = List.Range(resp, 2),
fileUrls = List.Transform(fileInfos, each Json.Document(_)[file][url]),
numFiles = List.Count(fileUrls),
toTable = Table.FromList(fileUrls, Splitter.SplitByNothing(), {"FileUrl"}),
processPartition = Table.AddColumn(toTable, "Data", each Parquet.Document(Binary.Buffer(ProtectSensitiveQueryParameters([FileUrl], [ManualCredentials = true])))),
removeFileUrl = Table.RemoveColumns(processPartition, {"FileUrl"}),
expanded = Table.ExpandTableColumn(removeFileUrl, "Data", columnNames)
in
if numFiles = 0 then #table(columnNames, {}) else expanded;
ProtectSensitiveQueryParameters = (url as text, options as record) =>
let
uriParts = Uri.Parts(uri),
uriWithoutQuery = Uri.FromParts(uriParts & [Query = []]),
modifiedOptions = options & [
CredentialQuery = uriParts[Query],
]
in
Web.Contents(uriWithoutQuery, modifiedOptions);
หมายเหตุ
ปัญหาการพัฒนาตัวเชื่อมต่อแบบกําหนดเองจะตกอยู่ในขอบเขตการสนับสนุนของ Microsoft และความเชี่ยวชาญ หากคุณต้องการความช่วยเหลือในการพัฒนาตัวเชื่อมต่อแบบกําหนดเองของคุณ หรือมีคําติชม คําแนะนํา หรือข้อบกพร่องที่คุณต้องการรายงาน โปรดเยี่ยมชมที่เก็บข้อมูลสาธารณะอย่างเป็นทางการของเรา บน GitHub หรือติดต่อผู้ติดต่อของ Microsoft ของคุณหากคุณสนใจที่จะมีส่วนร่วมกับที่ปรึกษานักพัฒนาตัวเชื่อมต่อแบบกําหนดเองที่แนะนําจากบริษัทอื่น