อ่านในภาษาอังกฤษ แก้ไข

แชร์ผ่าน


คําถามที่ถามบ่อยเกี่ยวกับการพัฒนาตัวเชื่อมต่อแบบกําหนดเอง

ต่อไปนี้คือคําตอบบางคําตอบสําหรับคําถามทั่วไปที่อาจเกิดขึ้นขณะพัฒนาตัวเชื่อมต่อ Power Query แบบกําหนดเอง

ทั่วไป

มันเป็นไปได้ที่จะแสดงคําเตือนถ้า ... ?

ภายนอกรูปแบบคําเตือนที่จัดทําเป็นเอกสาร ขณะนี้เรายังไม่มีวิธีการส่งกลับคําเตือนที่เป็นแถบ เช่น ตารางขนาดใหญ่หรือคําเตือนเมตาดาต้าขนาดใหญ่

เป็นไปได้หรือไม่ที่จะนําเสนอข้อมูลพาร์ติชันตารางโดยการเพิ่มระดับอื่นในลําดับชั้นการนําทางและอนุญาตให้ผู้ใช้เลือกพาร์ติชันอย่างน้อยหนึ่งพาร์ติชัน

อาจเป็นไปได้ถ้าผู้ใช้ปลายทางต้องการเรียกใช้พาร์ติชันเดียวของข้อมูลอยู่บ่อย ๆ อย่างไรก็ตาม ฟังก์ชันนี้ไม่สามารถเพิ่มลงในตัวเชื่อมต่อที่มีอยู่ได้ ดังนั้นการเปลี่ยนแปลงนี้จะทําลายตัวเชื่อมต่อที่มีอยู่

การแก้ไขปัญหา

ตัวเชื่อมต่อแบบกําหนดเองที่ฉันได้รับการพัฒนาทํางานได้ดีใน Power BI Desktop แต่เมื่อฉันพยายามเรียกใช้ในบริการของ Power BI ฉันไม่สามารถตั้งค่าข้อมูลประจําตัวหรือกําหนดค่าแหล่งข้อมูลได้ มีอะไรผิดปกติ

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

  • การอัปเดตข้อมูลประจําตัวของแหล่งข้อมูลล้มเหลว
  • มีข้อยกเว้นเกิดขึ้นขณะพยายามรับ OAuthProvider ข้อมูล DataSourceReference
  • ไม่สนับสนุนชนิดแหล่งข้อมูลที่กําหนด

ก่อนที่คุณจะเริ่มการแก้ไขปัญหาลักษณะการทํางานนี้ ก่อนอื่นให้รวบรวมสําเนาของตัวเชื่อมต่อแบบกําหนดเอง (ไฟล์ .pq หรือ .mez) หากคุณมีไฟล์ .mez ให้เปลี่ยนชื่อไฟล์เป็น .zip และแตกไฟล์ .pq

วิธีการแก้ไขปัญหาตัวเชื่อมต่อแบบกําหนดเอง:

  1. เปิดไฟล์ตัวเชื่อมต่อแบบกําหนดเอง (.pq) ในตัวแก้ไขข้อความที่คุณเลือก

  2. TestConnectionค้นหาฟังก์ชัน ฟังก์ชันTestConnectionนี้จําเป็นสําหรับการรีเฟรชตามกําหนดการในบริการของ Power BI แต่ไม่ได้ใช้ใน Power BI Desktop ตรวจสอบไฟล์ .pq สําหรับ TestConnection การดําเนินการ และยืนยันว่าพารามิเตอร์ตรงกับฟังก์ชันแหล่งข้อมูลของตัวเชื่อมต่อ ข้อมูลเพิ่มเติม: การจัดการการสนับสนุนเกตเวย์

  3. ถ้าตัวเชื่อมต่อใช้ 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 ของคุณหากคุณสนใจที่จะมีส่วนร่วมกับที่ปรึกษานักพัฒนาตัวเชื่อมต่อแบบกําหนดเองที่แนะนําจากบริษัทอื่น