การจัดการการรับรองความถูกต้อง

ชนิดการรับรองความถูกต้อง

ส่วนขยายสามารถสนับสนุนการรับรองความถูกต้องอย่างน้อยหนึ่งชนิด การรับรองความถูกต้องแต่ละประเภทเป็นข้อมูลรับรองความถูกต้องชนิดอื่น UI การรับรองความถูกต้องที่แสดงให้ผู้ใช้ปลายทางPower Queryควบคุมตามประเภทของข้อมูลรับรองที่ส่วนขยายสนับสนุน

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

ชนิดของการรับรองความถูกต้อง ฟิลด์ คำอธิบาย
โดยนัย ประเภทการรับรองความถูกต้องโดยนัย (ไม่ระบุชื่อ) ไม่มีเขตข้อมูล
OAuth StartLogin ฟังก์ชันที่มีข้อมูล URL และสถานะเพื่อการเริ่มต้นโฟลว์ OAuth

ดูหัวข้อ การใช้ตัวดําเนินFlow OAuthด้านล่าง
FinishLogin ฟังก์ชันที่แยกข้อมูลaccess_tokenคุณสมบัติอื่น ๆ ที่เกี่ยวข้องกับโฟลว์ OAuth
รีเฟรช (ไม่บังคับ) ฟังก์ชันที่เรียกใช้โทเค็นการเข้าถึงใหม่จากโทเค็นรีเฟรช
ออกจากระบบ (ไม่บังคับ) ฟังก์ชันที่ใช้โทเค็นการเข้าถึงปัจจุบันของผู้ใช้ไม่ถูกต้อง
ป้ายกำกับ (ไม่บังคับ) ค่าข้อความที่ช่วยให้คุณสามารถแทนที่ป้ายชื่อเริ่มต้นสว่นนี้ AuthenticationKind ได้
Aad AuthorizationUri text ค่าหรือฟังก์ชันที่ส่งกลับจุดสิ้นสุดการอนุญาต Azure AD (ตัวอย่าง: "https://login.microsoftonline.com/common/oauth2/authorize" )

ดูส่วนAzure Active Directoryการรับรองความถูกต้องของคุณที่ด้านล่าง
ทรัพยากร text value หรือฟังก์ชันที่ส่งกลับค่าทรัพยากร Azure AD ของบริการของคุณ
UsernamePassword UsernameLabel (ไม่บังคับ) ค่าข้อความที่จะแทนที่ป้ายชื่อเริ่มต้นให้กับ กล่องข้อความ ชื่อผู้ใช้ บนข้อมูลรับรอง UI
PasswordLabel (ไม่บังคับ) ค่าข้อความที่จะแทนที่ป้ายชื่อเริ่มต้นให้กับ กล่องข้อความ รหัสผ่านบนข้อมูลรับรอง UI
ป้ายกำกับ (ไม่บังคับ) ค่าข้อความที่ช่วยให้คุณสามารถแทนที่ป้ายชื่อเริ่มต้นสว่นนี้ AuthenticationKind ได้
Windows UsernameLabel (ไม่บังคับ) ค่าข้อความที่จะแทนที่ป้ายชื่อเริ่มต้นให้กับ กล่องข้อความ ชื่อผู้ใช้ บนข้อมูลรับรอง UI
PasswordLabel (ไม่บังคับ) ค่าข้อความที่จะแทนที่ป้ายชื่อเริ่มต้นให้กับ กล่องข้อความ รหัสผ่านบนข้อมูลรับรอง UI
ป้ายกำกับ (ไม่บังคับ) ค่าข้อความที่ช่วยให้คุณสามารถแทนที่ป้ายชื่อเริ่มต้นสว่นนี้ AuthenticationKind ได้
คีย์ KeyLabel (ไม่บังคับ) ค่าข้อความที่จะแทนที่ป้ายชื่อเริ่มต้นให้กับกล่องข้อความคีย์ API บนข้อมูลรับรอง UI
ป้ายกำกับ (ไม่บังคับ) ค่าข้อความที่ช่วยให้คุณสามารถแทนที่ป้ายชื่อเริ่มต้นสว่นนี้ AuthenticationKind ได้

ตัวอย่างด้านล่างแสดงระเบียนการรับรองความถูกต้องของตัวเชื่อมต่อที่สนับสนุน OAuth คีย์ Windows พื้นฐาน (ชื่อผู้ใช้และรหัสผ่าน) และข้อมูลรับรองความถูกต้องแบบไม่ระบุชื่อ

ตัว อย่าง เช่น:

Authentication = [
    OAuth = [
        StartLogin = StartLogin,
        FinishLogin = FinishLogin,
        Refresh = Refresh,
        Logout = Logout
    ],
    Key = [],
    UsernamePassword = [],
    Windows = [],
    Implicit = []
]

การเข้าถึงข้อมูลรับรองปัจจุบัน

สามารถเรียกข้อมูลรับรองปัจจุบันโดยใช้ Extension.CurrentCredential() ฟังก์ชัน

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

  • การส่งผ่านข้อมูลรับรองในส่วนหัวแบบปรับแต่งหรือพารามิเตอร์สตริงของแบบสอบถาม (เช่น เมื่อคุณใช้ชนิดการรับรองความถูกต้องคีย์ API)
  • การตั้งค่าคุณสมบัติสตริงการเชื่อมต่อของ ODBC ADO.NET ส่วนขยาย
  • ตรวจสอบคุณสมบัติแบบเองบนโทเค็น OAuth
  • การใช้ข้อมูลรับรองเป็นส่วนหนึ่งของโฟลว์ OAuth v1

Extension.CurrentCredential()ฟังก์ชันจะส่งกลับวัตถุระเบียน เขตข้อมูลที่มีจะเป็นชนิดการรับรองความถูกต้องที่เฉพาะเจาะจง ดูตารางต่อไปนี้เพื่อดูรายละเอียด

ฟิลด์ คำอธิบาย ใช้โดย
AuthenticationKind ประกอบด้วยชื่อของประเภทการรับรองความถูกต้องที่มอบหมายให้กับข้อมูลรับรองนี้ (UsernamePassword, OAuth และอื่น ๆ) ทั้งหมด
ชื่อผู้ใช้ ค่าชื่อผู้ใช้ UsernamePassword, Windows
รหัสผ่าน ค่ารหัสผ่าน โดยทั่วไปแล้วจะใช้กับ UsernamePassword แต่จะถูกตั้งค่าไว้ใช้กับคีย์ คีย์, ชื่อผู้ใช้Password, Windows
access_token ค่าโทเค็นการเข้าถึง OAuth OAuth
คุณสมบัติ ระเบียนที่มีคุณสมบัติแบบปรับแต่งเองอื่นๆ ของข้อมูลรับรองที่มอบให้ โดยทั่วไปแล้วจะใช้กับ OAuth เพื่อจัดเก็บคุณสมบัติเพิ่มเติม (เช่น refresh_token) ที่ส่งกลับaccess_tokenในระหว่างขั้นตอนการรับรองความถูกต้อง OAuth
คีย์ ค่าคีย์ API หมายเหตุ ค่าคีย์จะพร้อมใช้งานในเขตข้อมูลรหัสผ่านเช่นกัน ตามค่าเริ่มต้น กลไกจัดการ mashup จะแทรกสิ่งนี้ในส่วนหัว Authorization เหมือนกับว่าค่านี้เป็นรหัสผ่านการรับรองความถูกต้องพื้นฐาน (โดยไม่มีชื่อผู้ใช้) หากไม่ใช่ลักษณะการตามที่คุณต้องการ คุณต้องระบุตัวเลือก ManualCredentials = true ในเรกคอร์ดตัวเลือก คีย์
EncryptConnection ค่าตรรกะที่กําหนดว่าจะต้องใช้การเชื่อมต่อแบบเข้ารหัสกับแหล่งข้อมูลหรือไม่ ค่านี้จะพร้อมใช้งานกับชนิดการรับรองความถูกต้องทั้งหมด แต่จะถูกตั้งค่าเฉพาะหากมีการระบุ EncryptConnection ในนิยาม แหล่งข้อมูล ทั้งหมด

ตัวอย่างรหัสต่อไปนี้เข้าถึงข้อมูลรับรองปัจจุบันของคีย์ API และใช้ในการเติมส่วนหัวแบบปรับแต่ง ( x-APIKey )

ตัว อย่าง เช่น:

MyConnector.Raw = (_url as text) as binary =>
let
    apiKey = Extension.CurrentCredential()[Key],
    headers = [

        #"x-APIKey" = apiKey,
        Accept = "application/vnd.api+json",
        #"Content-Type" = "application/json"
    ],
    request = Web.Contents(_url, [ Headers = headers, ManualCredentials = true ])
in
    request

การดําเนินการFlow OAuth

ประเภทการรับรองความถูกต้อง OAuth อนุญาตให้ส่วนขยายใช้ตรรกะแบบปรับแต่งเองเพื่อบริการของตน ในการสิ่งนี้ ส่วนขยายจะให้ฟังก์ชัน (ส่งคืน URI การอนุญาตเพื่อเริ่มโฟลว์ OAuth) และ (แทนรหัสการให้ StartLogin FinishLogin สิทธิ์เป็นโทเค็นการเข้าถึง) ส่วนขยายสามารถใช้ (ใช้ Refresh โทเค็นการรีเฟรชแทนโทเค็นการเข้าถึงใหม่) และ Logout (หมดอายุการรีเฟรชและโทเค็นการเข้าถึงในปัจจุบัน) เช่นกัน

หมายเหตุ

Power Queryจะได้รับการประเมินในแอปพลิเคชันที่เรียกใช้บนเครื่องไคลเอ็นต์ ตัวเชื่อมต่อข้อมูล ไม่ควรใช้ความลับ ที่เป็นความลับในโฟลว์ OAuth ของพวกเขา เนื่องจากผู้ใช้อาจตรวจสอบปริมาณการใช้งานส่วนขยายหรือเครือข่ายเพื่อเรียนรู้ข้อมูลลับ ดู Proof Key for Code Exchange โดย OAuth Public Clients RFC (หรือที่เรียกว่า PKCE) เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับจัดหาโฟลว์ที่ไม่ขึ้นอยู่กับความลับที่ใช้ร่วมกัน สามารถพบการใช้งานตัวอย่างของโฟลว์นี้บนไซต์GitHubของเรา

มีลายเซ็นฟังก์ชัน OAuth สองชุด ลายเซ็นเดิมที่มีจํานวนพารามิเตอร์น้อยที่สุด และลายเซ็นขั้นสูงที่ยอมรับพารามิเตอร์เพิ่มเติม โฟลว์ OAuth ส่วนใหญ่สามารถใช้งานโดยใช้ลายเซ็นเดิมได้ นอกจากนี้ คุณยังสามารถผสมและจับคู่ชนิดลายเซ็นในการใช้งานของคุณ การเรียกฟังก์ชันจะถูกจับคู่ตามจํานวนพารามิเตอร์ (และชนิดของฟังก์ชัน) ชื่อพารามิเตอร์จะไม่ถูกพิจารณา

ดู ตัวอย่าง Github เพื่อดูรายละเอียดเพิ่มเติม

ลายเซ็น OAuth ต้นฉบับ

StartLogin = (dataSourcePath, state, display) => ...;

FinishLogin = (context, callbackUri, state) => ...;

Refresh = (dataSourcePath, refreshToken) =>  ...;

Logout = (accessToken) => ...;

ลายเซ็น OAuth ขั้นสูง

หมายเหตุเกี่ยวกับลายเซ็นขั้นสูง:

  • ลายเซ็นทั้งหมดยอมรับ clientApplication ค่าระเบียน ซึ่งสงวนไว้ใช้ในอนาคต
  • ลายเซ็นทั้งหมดยอมรับ dataSourcePath (หรือที่เรียกว่า resourceUrl ในตัวอย่างส่วนใหญ่)
  • ฟังก์ชัน Refresh จะยอมรับพารามิเตอร์ oldCredential ซึ่งเป็นค่าที่ฟังก์ชัน record ของคุณส่งกลับก่อนหน้านี้ FinishLogin (หรือการเรียกไปยัง Refresh ก่อนหน้า)
StartLogin = (clientApplication, dataSourcePath, state, display) => ...;

FinishLogin = (clientApplication, dataSourcePath, context, callbackUri, state) => ...;

Refresh = (clientApplication, dataSourcePath, oldCredential) =>  ...;

Logout = (clientApplication, dataSourcePath, accessToken) => ...;

Azure Active Directoryรับรองความถูกต้อง

ชนิด Aad การรับรองความถูกต้องเป็นเวอร์ชันพิเศษของ OAuth Azure Active Directoryผลิตภัณฑ์ ใช้ไคลเอ็นต์ Azure AD เดียวกันกับตัวเชื่อมต่อที่มีอยู่ภายในPower Queryตัวที่สนับสนุนการรับรองความถูกต้องบัญชีองค์กร

หมายเหตุ

ถ้าแหล่งข้อมูลของคุณต้องการขอบเขต user_impersonation อื่นนอกเหนือจาก หรือเข้ากันไม่ได้กับการใช้ แล้ว user_impersonation คุณควรใช้ชนิด OAuth การรับรองความถูกต้อง

หมายเหตุ

ถ้าคุณใช้โฟลว์ OAuth ของคุณเองกับ Azure AD ผู้ใช้ที่เปิดใช้งานการเข้าถึงแบบมี เงื่อนไข for ผู้เช่าของพวกเขา อาจพบปัญหาเมื่อรีเฟรชโดยใช้บริการของ Power BIดังกล่าว การรีเฟรชจะไม่ส่งผลกระทบต่อการรีเฟรชตามเกตเวย์ แต่จะส่งผลต่อตัวเชื่อมต่อที่ได้รับการรับรองที่สนับสนุนการรีเฟรชจากบริการของ Power BIเชื่อมต่อ ผู้ใช้อาจประสบปัญหาที่เกิดจากตัวเชื่อมต่อโดยใช้แอปพลิเคชันไคลเอ็นต์ สาธารณะเมื่อ กําหนดค่าข้อมูลรับรองบนเว็บผ่านบริการของ Power BIดังกล่าว โทเค็นการเข้าถึงที่สร้างขึ้นโดยโฟลว์นี้ จะถูกใช้บนคอมพิวเตอร์คนอื่นๆ (นั่นคือ บริการของ Power BI ในศูนย์ข้อมูล Azure ไม่ใช่บนเครือข่ายของบริษัท) นอกเหนือจากเครือข่ายที่ใช้ในการรับรองความถูกต้องครั้งแรก (นั่นคือคอมพิวเตอร์ของผู้ใช้ที่กําหนดค่าข้อมูลรับรองแหล่งข้อมูลบนเครือข่ายของบริษัท) ชนิด built-in Aad จะแก้ปัญหานี้ โดยใช้ไคลเอ็นต์ Azure AD อื่นเมื่อกําหนดค่าข้อมูลบริการของ Power BIบริการ ตัวเลือกนี้จะไม่พร้อมใช้งานกับตัวเชื่อมต่อที่ใช้ชนิด OAuth การรับรองความถูกต้อง

ตัวเชื่อมต่อส่วนใหญ่จะต้องให้ค่าต่าง ๆ กับ AuthorizationUri Resource เขตข้อมูล และ เขตข้อมูลทั้งสองสามารถ text เป็นค่า หรือฟังก์ชันอาร์กิวเมนต์เดียวซึ่ง text value ส่งกลับ

AuthorizationUri = "https://login.microsoftonline.com/common/oauth2/authorize"
AuthorizationUri = (dataSourcePath) => FunctionThatDeterminesAadEndpointFromDataSourcePath(dataSourcePath)
Resource = "77256ee0-fe79-11ea-adc1-0242ac120002"   // Azure AD resource value for your service - Guid or URL
Resource = (dataSourcePath) => FunctionThatDeterminesResourceFromDataSourcePath(dataSourcePath)

ตัวเชื่อมต่อที่ใช้ตัว ระบุที่ยึดตาม Uri ไม่าเป็นต้อง Resource ระบุค่า ตามค่าเริ่มต้น ค่าจะเท่ากับเส้นทางรากของพารามิเตอร์ Uri ของตัวเชื่อมต่อ ถ้าทรัพยากร Azure AD ของแหล่งข้อมูลแตกต่างจากค่าโดเมน (ตัวอย่างเช่น ใช้ GUID) จากนั้น Resource ต้องระบุค่า

ตัวอย่างประเภทการรับรองความถูกต้อง Aad

ในกรณีนี้ แหล่งข้อมูลสนับสนุนระบบคลาวด์ Azure AD ส่วนกลางโดยใช้ผู้เช่าทั่วไป (ไม่มีการสนับสนุน Azure B2B)

Authentication = [
    Aad = [
        AuthorizationUri = "https://login.microsoftonline.com/common/oauth2/authorize",
        Resource = "77256ee0-fe79-11ea-adc1-0242ac120002" // Azure AD resource value for your service - Guid or URL
    ]
]

ในกรณีนี้ แหล่งข้อมูลสนับสนุนการค้นหาผู้เช่าโดยยึดตาม OpenID เชื่อมต่อ (OIDC) หรือโพรโทคอลที่คล้ายกัน ซึ่งช่วยให้ตัวเชื่อมต่อเพื่อพิจารณาจุดสิ้นสุด Azure AD ที่ถูกต้องเพื่อใช้ตามพารามิเตอร์อย่างน้อยหนึ่งตัวในเส้นทางแหล่งข้อมูล วิธีการค้นพบแบบไดนามิกนี้ช่วยให้ตัวเชื่อมต่อสนับสนุน Azure B2B


// Implement this function to retrieve or calculate the service URL based on the data source path parameters
GetServiceRootFromDataSourcePath = (dataSourcePath) as text => ...;

GetAuthorizationUrlFromWwwAuthenticate = (url as text) as text =>
    let
        // Sending an unauthenticated request to the service returns
        // a 302 status with WWW-Authenticate header in the response. The value will
        // contain the correct authorization_uri.
        // 
        // Example:
        // Bearer authorization_uri="https://login.microsoftonline.com/{tenant_guid}/oauth2/authorize"
        responseCodes = {302, 401},
        endpointResponse = Web.Contents(url, [
            ManualCredentials = true,
            ManualStatusHandling = responseCodes
        ])
    in
        if (List.Contains(responseCodes, Value.Metadata(endpointResponse)[Response.Status]?)) then
            let
                headers = Record.FieldOrDefault(Value.Metadata(endpointResponse), "Headers", []),
                wwwAuthenticate = Record.FieldOrDefault(headers, "WWW-Authenticate", ""),
                split = Text.Split(Text.Trim(wwwAuthenticate), " "),
                authorizationUri = List.First(List.Select(split, each Text.Contains(_, "authorization_uri=")), null)
            in
                if (authorizationUri <> null) then
                    // Trim and replace the double quotes inserted before the url
                    Text.Replace(Text.Trim(Text.Trim(Text.AfterDelimiter(authorizationUri, "=")), ","), """", "")
                else
                    error Error.Record("DataSource.Error", "Unexpected WWW-Authenticate header format or value during authentication."), [
                        #"WWW-Authenticate" = wwwAuthenticate
                    ])
        else
            error Error.Unexpected("Unexpected response from server during authentication."));

<... snip ...>

Authentication = [
    Aad = [
        AuthorizationUri = (dataSourcePath) =>
            GetAuthorizationUrlFromWwwAuthenticate(
                GetServiceRootFromDataSourcePath(dataSourcePath)
            ),
        Resource = "https://myAadResourceValue.com", // Azure AD resource value for your service - Guid or URL
    ]
]

เส้นทางของแหล่งข้อมูล

โปรแกรม M จะระบุแหล่งข้อมูลโดยใช้การรวมกันของชนิด และ__เส้นทาง เมื่อพบแหล่งข้อมูลในระหว่างการประเมินคิวรี โปรแกรม M จะพยายามค้นหาข้อมูลรับรองที่ตรงกัน ถ้าไม่พบข้อมูลรับรอง กลไกจัดการจะส่งกลับข้อผิดพลาดพิเศษที่ส่งผลให้มีพร้อมท์ข้อมูลPower Queryเกิดขึ้น

ค่า ชนิด มาจากการ นิยามชนิดของ แหล่งข้อมูล

ค่า เส้นทางได้รับมาจากพารามิเตอร์ ที่ต้องใช้ ของ ฟังก์ชันแหล่งข้อมูลของคุณ พารามิเตอร์ที่เลือกได้ไม่ได้แฟกเตอร์ลงในตัวระบุเส้นทางแหล่งข้อมูล ดังนั้นฟังก์ชันแหล่งข้อมูลทั้งหมดที่เกี่ยวข้องกับชนิดแหล่งข้อมูลจะต้องมีพารามิเตอร์เดียวกัน มีการจัดการพิเศษของฟังก์ชันที่มีพารามิเตอร์ชนิด Uri.Type เดียว ดู ส่วนด้านล่าง เพื่อดูรายละเอียด

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

DataSourcePaths

หมายเหตุ

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

รูปแบบเส้นทางของแหล่งข้อมูล

ค่า เส้นทางของแหล่งข้อมูลมาจากพารามิเตอร์ที่ต้องใช้ของฟังก์ชันแหล่งข้อมูล สามารถแยกพารามิเตอร์ที่ต้องใช้ออกจากเส้นทางโดยการเพิ่มเม DataSource.Path = false ตาดาต้าของฟังก์ชัน (ดูด้านล่าง)

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

ตัวอย่างเช่น ฟังก์ชันแหล่งข้อมูลในตัวอย่าง HelloWorldWithDocs มีลายเซ็นต่อไปนี้:

HelloWorldWithDocs.Contents = (message as text, optional count as number) as table => ...

ฟังก์ชัน มีพารามิเตอร์ที่ต้องใช้เดียว message ( ) text ของชนิด และ จะถูกใช้เพื่อคํานวณเส้นทางแหล่งข้อมูล พารามิเตอร์ที่เลือกได้ count ( ) จะถูกละเว้น เส้นทางจะถูกแสดง

พร้อมท์ข้อมูลรับรอง:

DataSourceCredentials

UI การตั้งค่าแหล่งข้อมูล:

DataSourceSettings

เมื่อกําหนดค่าป้ายชื่อ ค่าเส้นทางของแหล่งข้อมูลจะไม่แสดง:

DataSourceLabel.

หมายเหตุ

ในขณะนี้เราขอแ นะเริ่ม ให้คุณไม่มี ป้ายชื่อ ให้กับแหล่งข้อมูลของคุณ ถ้าฟังก์ชันของคุณมีพารามิเตอร์ที่ต้องใช้ เนื่องจากผู้ใช้จะไม่สามารถแยกความแตกต่างระหว่างข้อมูลรับรองอื่นที่ใส่ไว้ได้ เราขออภัยในการปรับปรุงนี้ในอนาคต (นั่นคืออนุญาตให้ตัวเชื่อมต่อข้อมูลแสดงเส้นทางแหล่งข้อมูลแบบเอง)

ไม่รวมพารามิเตอร์ที่ต้องใช้จากเส้นทางแหล่งข้อมูลของคุณ

ถ้าคุณต้องการให้พารามิเตอร์ฟังก์ชันเป็นที่ต้องการ แต่ไม่ควรจะรวมเป็นส่วนหนึ่งของเส้นทางแหล่งข้อมูลของคุณ คุณสามารถเพิ่มไปยังเมตาดาต้า DataSource.Path = false ของเอกสารประกอบฟังก์ชันได้ สามารถเพิ่มคุณสมบัตินี้ลงในพารามิเตอร์อย่างน้อยหนึ่งรายการให้กับฟังก์ชันของคุณ เขตข้อมูลนี้จะลบค่าจากเส้นทางแหล่งข้อมูลของคุณ (หมายความว่าจะไม่ถูกส่งผ่านไปยังฟังก์ชันของคุณอีกต่อไป) ดังนั้นจึงควรใช้เฉพาะพารามิเตอร์ที่ไม่ต้องมีการระบุแหล่งข้อมูลของคุณ หรือแยกความแตกต่างระหว่างข้อมูล TestConnection รับรองผู้ใช้เท่านั้น

ตัวอย่างเช่น ตัวเชื่อมต่อในตัวอย่าง HelloWorldWithDocs จะต้องมี ข้อมูลรับรองที่แตกต่างกันใน message ค่าที่แตกต่างกัน เพิ่ม DataSource.Path = false ไปยัง message พารามิเตอร์เอาออกจากการคํานวณเส้นทางแหล่งข้อมูล ได้อย่างมีประสิทธิภาพสร้างตัวเชื่อมต่อ "singleton" การเรียกทั้งหมด HelloWorldWithDocs.Contents จะถือว่าเป็นแหล่งข้อมูลเดียวกัน และผู้ใช้จะป้อนข้อมูลล็อกอินเพียงครั้งเดียว

HelloWorldType = type function (
    message as (type text meta [
        DataSource.Path = false,
        Documentation.FieldCaption = "Message",
        Documentation.FieldDescription = "Text to display",
        Documentation.SampleValues = {"Hello world", "Hola mundo"}
    ]),
    optional count as (type number meta [
        Documentation.FieldCaption = "Count",
        Documentation.FieldDescription = "Number of times to repeat the message",
        Documentation.AllowedValues = { 1, 2, 3 }
    ]))
    as table meta [
        Documentation.Name = "Hello - Name",
        Documentation.LongDescription = "Hello - Long Description",
        Documentation.Examples = {[
            Description = "Returns a table with 'Hello world' repeated 2 times",
            Code = "HelloWorldWithDocs.Contents(""Hello world"", 2)",
            Result = "#table({""Column1""}, {{""Hello world""}, {""Hello world""}})"
        ],[
            Description = "Another example, new message, new count!",
            Code = "HelloWorldWithDocs.Contents(""Goodbye"", 1)",
            Result = "#table({""Column1""}, {{""Goodbye""}})"
        ]}
    ];

ฟังก์ชันที่มีพารามิเตอร์ Uri

เนื่องจากแหล่งข้อมูลที่มีตัวระบุตาม Uri เป็นเรื่องปกติ จึงมีการจัดการพิเศษใน Power Query UI เมื่อจัดการกับเส้นทางแหล่งข้อมูล Uri เมื่อพบแหล่งข้อมูล Uri กล่องโต้ตอบข้อมูลรับรองมีรายการดรอปดาวน์ที่อนุญาตให้ผู้ใช้เลือกเส้นทางพื้นฐาน แทนที่จะเป็นเส้นทางแบบเต็ม (และเส้นทางทั้งหมดในระหว่าง)

DataSourceUrl

ตามที่เป็นชนิดโดยกพามาแทนที่จะเป็นชนิดแรกเริ่มในภาษา M คุณจะต้องใช้ฟังก์ชัน Uri.Type Value.ReplaceTypeเพื่อระบุว่าพารามิเตอร์ข้อความของคุณควรถือว่าเป็น Uri

shared GithubSample.Contents = Value.ReplaceType(Github.Contents, type function (url as Uri.Type) as any);

การรับรองความถูกต้องชนิดเพิ่มเติม

ดูรายละเอียดเพิ่มเติมเกี่ยวกับการรับรองความถูกต้องชนิดที่ไม่ครอบคลุมในบทความนี้ เช่น การลงชื่อเข้าระบบแบบครั้งเดียวที่ใช้ Kerberos ไปที่บทความฟังก์ชัน การใช้งานตัวเชื่อมต่อเพิ่มเติม เพื่อเรียนรู้เพิ่มเติม