次の方法で共有


データ ソース パスの処理

M エンジンは、 その種類 とパスの組み合わせを使用してデータ ソースを識別 します。 クエリの評価中にデータ ソースが検出されると、M エンジンは一致する資格情報を検索しようとします。 資格情報が見つからない場合、エンジンは特別なエラーを返します。その結果、Power Query で資格情報プロンプトが表示されます。

Kind 値は、データ ソースの種類の定義から取得されます。

Path 値は、データ ソース関数必須パラメーターから派生します。 省略可能なパラメーターは、データ ソース パス識別子に組み込まれません。 その結果、データ ソースの種類に関連付けられているすべてのデータ ソース関数は、同じパラメーターを持つ必要があります。 Uri.Type型の単一のパラメーターを持つ関数には、特別な処理があります。 詳細については、 Uri パラメーターを使用して Functions に移動します。

Power BI Desktop の [ データ ソース設定 ] ダイアログで資格情報を格納する方法の例を確認できます。 このダイアログでは、種類はアイコンで表され、[パス] の値がテキストとして表示されます。

データ ソース設定の資格情報のスクリーンショット。

開発中にデータ ソース関数の必須パラメーターを変更した場合、以前に保存された資格情報は機能しなくなります (パス値が一致しなくなったためです)。 データ ソース関数パラメーターを変更するたびに、保存されている資格情報を削除する必要があります。 互換性のない資格情報が見つかった場合は、実行時にエラーが発生する可能性があります。

データ ソース パスの形式

データ ソースの Path 値は、データ ソース関数の必須パラメーターから派生します。 関数のメタデータに DataSource.Path = false を追加することで、必要なパラメーターをパスから除外できます。 詳細については、「 データ ソース パスから必要なパラメーターを除外する」を参照してください。

既定では、Power BI Desktop の [データ ソース設定 ] ダイアログと資格情報プロンプトで、実際の文字列値を確認できます。 データ ソースの種類の定義に Label 値が含まれている場合は、代わりにラベルの値が表示されます。

たとえば、 HelloWorldWithDocs サンプル のデータ ソース関数には、次のシグネチャがあります。

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

この関数には、message型の 1 つの必須パラメーター (text) があり、データ ソース パスの計算に使用されます。 省略可能なパラメーター (count) は無視されます。 パスは次のように表示されます。

資格情報プロンプト

パスを含む資格情報プロンプトのスクリーンショット。

データ ソース設定 UI

データ ソース設定 UI のスクリーンショット。

Label 値が定義されている場合、データ ソース パスの値は表示されません。

ラベルが定義されているデータ ソース設定のスクリーンショット。

現在、関数に必要なパラメーターがある場合は、データ ソースのラベルを含 めないことを お勧めします。ユーザーは入力したさまざまな資格情報を区別できないためです。 今後、これを改善したいと考えています (つまり、データ コネクタが独自のカスタム データ ソース パスを表示できるようにする)。

データ ソース パスから必要なパラメーターを除外する

関数パラメーターを必須にするが、データ ソース パスの一部として含めないようにする場合は、関数ドキュメントメタデータに DataSource.Path = false を追加できます。 このプロパティは、関数の 1 つ以上のパラメーターに追加できます。 このフィールドは、データ ソース パス (つまり、 TestConnection 関数に渡されなくなった) から値を削除するため、データ ソースを識別したり、ユーザー資格情報を区別したりする必要のないパラメーターにのみ使用する必要があります。

たとえば、 HelloWorldWithDocs サンプル のコネクタでは、異なる message 値に対して異なる資格情報が必要になります。 DataSource.Path = false パラメーターにmessageを追加すると、データ ソース パスの計算から削除され、コネクタが実質的に "シングルトン" になります。 HelloWorldWithDocs.Contentsに対するすべての呼び出しは同じデータ ソースとして扱われ、ユーザーは資格情報を 1 回だけ提供します。

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 ベースの識別子を持つデータ ソースは非常に一般的であるため、Uri ベースのデータ ソース パスを処理する場合、Power Query UI には特別な処理があります。 URI ベースのデータ ソースが検出されると、資格情報ダイアログにドロップダウンが表示されます。これにより、ユーザーは完全なパス (およびその間のすべてのパス) ではなくベース パスを選択できます。

資格情報が適用される設定パスを示す資格情報ダイアログのスクリーンショット。

Uri.Typeは M 言語のプリミティブ型ではなく、接する型であるため、Value.ReplaceType 関数を使用して、テキスト パラメーターを Uri として扱う必要があることを示す必要があります。

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