Udostępnij przez


Obsługa ścieżki źródła danych

Silnik M identyfikuje źródło danych, używając kombinacji jego rodzaju i ścieżki. Gdy podczas oceny zapytania napotkano źródło danych, aparat języka M próbuje znaleźć pasujące poświadczenia. Jeśli nie znaleziono poświadczeń, aparat zwraca specjalny błąd, który powoduje wyświetlenie komunikatu o podanie poświadczeń w programie Power Query.

Wartość Kind pochodzi z definicji Rodzaj źródła danych .

Wartość Path pochodzi z wymaganych parametrówfunkcji źródła danych. Parametry opcjonalne nie są uwzględniane w identyfikatorze ścieżki źródła danych. W związku z tym wszystkie funkcje źródła danych skojarzone z rodzajem źródła danych muszą mieć te same parametry. Istnieje specjalna obsługa funkcji, które mają jeden parametr typu Uri.Type. Aby uzyskać szczegółowe informacje, przejdź do pozycji Funkcje z parametrem URI .

Przykład przechowywania poświadczeń można znaleźć w oknie dialogowym Ustawienia źródła danych w programie Power BI Desktop. W tym oknie dialogowym rodzaj jest reprezentowany przez ikonę, a wartość ścieżki jest wyświetlana jako tekst.

Zrzut ekranu ustawień poświadczeń źródła danych.

Uwaga / Notatka

Jeśli podczas programowania zmienisz wymagane parametry funkcji źródła danych, wcześniej przechowywane poświadczenia nie będą już działać (ponieważ wartości ścieżek nie są już zgodne). Wszelkie przechowywane poświadczenia należy usunąć za każdym razem, gdy zmienisz parametry funkcji źródła danych. W przypadku znalezienia niezgodnych poświadczeń może wystąpić błąd podczas wykonywania.

Format ścieżki źródła danych

Wartość Ścieżka dla źródła danych pochodzi z wymaganych parametrów funkcji źródła danych. Wymagane parametry można wykluczyć ze ścieżki, dodając DataSource.Path = false do metadanych funkcji. Aby uzyskać więcej informacji, zobacz Wykluczanie wymaganych parametrów ze ścieżki źródła danych.

Domyślnie rzeczywista wartość ciągu jest widoczna w oknie dialogowym Ustawienia źródła danych w programie Power BI Desktop i w wierszu polecenia poświadczeń. Jeśli definicja rodzaju źródła danych zawiera Label wartość, zostanie wyświetlona wartość etykiety.

Na przykład funkcja źródła danych w przykładzie HelloWorldWithDocs ma następujący podpis:

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

Funkcja ma jeden wymagany parametr (message) typu texti służy do obliczania ścieżki źródła danych. Opcjonalny parametr (count) jest ignorowany. Ścieżka będzie wyświetlana w następujący sposób:

Monit o podanie poświadczeń

Zrzut ekranu przedstawiający monit o podanie poświadczeń ze ścieżką.

Interfejs użytkownika ustawień źródła danych

Zrzut ekranu przedstawiający interfejs użytkownika ustawień źródła danych.

Po zdefiniowaniu wartości Etykiety, wartość ścieżki źródła danych nie jest wyświetlana.

Zrzut ekranu przedstawiający ustawienia źródła danych ze zdefiniowaną etykietą.

Uwaga / Notatka

Obecnie zalecamy, aby nie dołączać etykiety dla źródła danych, jeśli funkcja ma wymagane parametry, ponieważ użytkownicy nie będą mogli odróżnić wprowadzonych poświadczeń. Mamy nadzieję, że poprawimy to w przyszłości (czyli umożliwimy łącznikom danych wyświetlanie własnych niestandardowych ścieżek źródła danych).

Wykluczanie wymaganych parametrów ze ścieżki źródła danych

Jeśli chcesz, aby parametr funkcji był wymagany, ale nie należy go dołączać w ramach ścieżki źródła danych, możesz dodać DataSource.Path = false do metadanych dokumentacji funkcji. Tę właściwość można dodać do co najmniej jednego parametru funkcji. To pole usuwa wartość ze ścieżki źródła danych (co oznacza, że nie jest już przekazywane do TestConnection funkcji), dlatego powinno być używane tylko dla parametrów, które nie są wymagane do identyfikowania źródła danych lub rozróżniania poświadczeń użytkownika.

Na przykład łącznik w przykładzie HelloWorldWithDocs wymaga różnych poświadczeń dla różnych message wartości. Dodanie DataSource.Path = false do parametru message powoduje jego usunięcie z obliczeń ścieżki źródła danych, co skutecznie czyni łącznik "singletonem". Wszystkie wywołania do HelloWorldWithDocs.Contents programu są traktowane jako to samo źródło danych, a użytkownik udostępnia poświadczenia tylko raz.

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""}})"
        ]}
    ];

Funkcje z parametrem identyfikatora URI

Ponieważ źródła danych z identyfikatorem opartym na identyfikatorze URI są tak powszechne, w interfejsie użytkownika dodatku Power Query istnieje specjalna obsługa podczas pracy ze ścieżkami źródła danych opartymi na identyfikatorze URI. Po napotkaniu źródła danych opartego na identyfikatorze URI okno dialogowe poświadczeń zawiera listę rozwijaną, która umożliwia użytkownikowi wybranie ścieżki podstawowej zamiast pełnej ścieżki (i wszystkich ścieżek między).

Zrzut ekranu przedstawiający okno dialogowe poświadczeń ze ścieżką ustawień, do których mają zastosowanie poświadczenia.

Jako że Uri.Type jest typem przypisanym, a nie typem prymitywnym w języku M, należy użyć funkcji Value.ReplaceType, aby wskazać, że parametr tekstowy powinien być traktowany jako identyfikator URI.

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