Leggere in inglese

Condividi tramite


Parametri per Odbc.DataSource

La funzione Odbc.DataSource accetta due parametri, un connectionString per il driver e un options record che consente di eseguire l'override di vari comportamenti del driver. Tramite il record delle opzioni è possibile eseguire l'override delle funzionalità e altre informazioni segnalate dal driver, controllare il comportamento dello strumento di navigazione e influire sulle query SQL generate dal motore M.

I campi delle opzioni supportate rientrano in due categorie: quelle pubbliche e sempre disponibili e quelle disponibili solo in un contesto di estendibilità.

Nella tabella seguente vengono descritti i campi pubblici nel record delle opzioni.

Campo Descrizione
CommandTimeout Valore di durata che controlla per quanto tempo è consentita l'esecuzione della query sul lato server prima dell'annullamento.

Impostazione predefinita: 10 minuti
ConnectionTimeout Valore di durata che controlla per quanto tempo attendere prima di abbandonare un tentativo di stabilire una connessione al server.

Impostazione predefinita: 15 secondi
CreateNavigationProperties Valore logico che imposta se generare proprietà di navigazione nelle tabelle restituite. Le proprietà di navigazione sono basate su relazioni di chiave esterna segnalate dal driver. Queste proprietà vengono visualizzate come colonne "virtuali" che possono essere espanse nell'editor di query, creando il join appropriato.

Se il calcolo delle dipendenze di chiave esterna è un'operazione costosa per il driver, è possibile impostare questo valore su false.

Valore predefinito: true
HierarchicalNavigation Valore logico che imposta se visualizzare le tabelle raggruppate in base ai nomi degli schemi. Se impostato su false, le tabelle vengono visualizzate in un elenco flat in ogni database.

Impostazione predefinita: false
SqlCompatibleWindowsAuth Valore logico che determina se produrre un stringa di connessione compatibile con SQL Server quando si usa l'autenticazioneTrusted_Connection=Yes di Windows.

Se il driver supporta l'autenticazione di Windows, ma richiede impostazioni aggiuntive o alternative nella stringa di connessione, è necessario impostare questo valore su false e usare il campo del CredentialConnectionString record delle opzioni descritto nella tabella successiva.

Valore predefinito: true

Nella tabella seguente vengono descritti i campi dei record delle opzioni disponibili solo tramite l'estendibilità. I campi che non sono semplici valori letterali sono descritti nelle sezioni successive.

Campo Descrizione
AstVisitor Record contenente una o più sostituzioni per controllare la generazione di query SQL. L'utilizzo più comune di questo campo consiste nel fornire logica per generare una clausola LIMIT/OFF edizione Standard T per i driver che non supportano TOP.

I campi includono Constant e LimitClause.

Altre informazioni: Override di AstVisitor
CancelQueryExplicitly Valore logico che indica al motore M di annullare in modo esplicito le chiamate in esecuzione tramite il driver ODBC prima di terminare la connessione al server ODBC.

Questo campo è utile nelle situazioni in cui l'esecuzione di query viene gestita indipendentemente dalle connessioni di rete al server, ad esempio in alcune distribuzioni Spark. Nella maggior parte dei casi, questo valore non deve essere impostato perché la query nel server viene annullata quando la connessione di rete al server viene terminata.

Impostazione predefinita: false
ClientConnectionPooling Valore logico che abilita il pool di connessioni lato client per il driver ODBC. La maggior parte dei driver vuole impostare questo valore su true.

Impostazione predefinita: false
CredentialConnectionString Valore di testo o record utilizzato per specificare le proprietà di stringa di connessione correlate alle credenziali.
HideNativeQuery Valore logico che controlla se il connettore mostra o meno istruzioni SQL generate nell'esperienza utente di Power Query. Questa impostazione deve essere impostata su true solo se l'origine dati back-end supporta in modo nativo SQL-92.

Impostazione predefinita: false
ImplicitTypeConversions Valore di tabella contenente conversioni di tipi implicite supportate dal driver o dal server back-end. I valori in questa tabella sono additivi per le conversioni segnalate dal driver stesso.

Questo campo viene in genere usato con il campo quando si eseguono l'override SQLGetTypeInfo delle informazioni sul tipo di dati segnalate dal driver.
OnError Funzione di gestione degli errori che riceve un errorRecord parametro di tipo record.

Gli usi comuni di questa funzione includono la gestione degli errori di connessione SSL, fornendo un collegamento di download se il driver non viene trovato nel sistema e segnalando errori di autenticazione.
SoftNumbers Consente al motore M di selezionare un tipo di dati compatibile quando la conversione tra due tipi numerici specifici non viene dichiarata come supportata nelle funzionalità SQL_CONVERT_*.

Impostazione predefinita: false
SqlCapabilities Record che fornisce varie sostituzioni delle funzionalità del driver e un modo per specificare le funzionalità non espresse tramite ODBC 3.8.

Altre informazioni: Override di SqlCapabilities
SQLColumns Funzione che consente di modificare i metadati della colonna restituiti dalla SQLColumns funzione.

Altre informazioni: Override di SQLColumns
SQLGetFunctions Record che consente di eseguire l'override dei valori restituiti dalle chiamate a SQLGetFunctions.

Un uso comune di questo campo consiste nel disabilitare l'uso dell'associazione di parametri o per specificare che le query generate devono usare CAST anziché CONVERT.

Altre informazioni: Override di SQLGetFunctions
SQLGetInfo Record che consente di eseguire l'override dei valori restituiti dalle chiamate a SQLGetInfo.

Altre informazioni: Override di SQLGetInfo
SQLGetTypeInfo Tabella o funzione che restituisce una tabella che esegue l'override delle informazioni sul tipo restituite da SQLGetTypeInfo.

Quando il valore è impostato su una tabella, il valore sostituisce completamente le informazioni sul tipo segnalate dal driver. SQLGetTypeInfo non verrà chiamato.

Quando il valore è impostato su una funzione, la funzione riceverà il risultato della chiamata originale a SQLGetTypeInfo, consentendo di modificare la tabella.

Questo campo viene in genere usato quando si verifica una mancata corrispondenza tra i tipi di dati segnalati da SQLGetTypeInfo e SQLColumns.

Altre informazioni: Override di SQLGetTypeInfo
SQLTables Funzione che consente di modificare i metadati della tabella restituiti da una chiamata a SQLTables.
TolerateConcatOverflow Consente la concatenazione dei valori di testo anche se il risultato potrebbe essere troncato per rientrare nell'intervallo di un tipo disponibile.

Ad esempio, quando si concatena un campo VARCHAR(4000) con un campo VARCHAR(4000) in un sistema che supporta una dimensione VARCHAR ingrandita di 4000 e nessun tipo CLOB, la concatenazione viene piegata anche se il risultato potrebbe essere troncato.

Impostazione predefinita: false
UseEmbeddedDriver (uso interno): valore logico che controlla se il driver ODBC deve essere caricato da una directory locale (usando nuove funzionalità definite nella specifica ODBC 4.0). Questo valore è in genere impostato solo dai connettori creati da Microsoft che vengono forniti con Power Query.

Se impostato su false, viene usato gestione driver ODBC di sistema per individuare e caricare il driver.

La maggior parte dei connettori non deve impostare questo campo.

Impostazione predefinita: false

Override di AstVisitor

Il AstVisitor campo viene impostato tramite il record delle opzioni Odbc.DataSource . Viene usato per modificare le istruzioni SQL generate per scenari di query specifici.

Nota

I driver che supportano le clausole LIMIT e OFF edizione Standard T (anziché TOP) dovranno fornire un LimitClause override per AstVisitor.

Costante

Fornire un override per questo valore è stato deprecato e può essere rimosso dalle implementazioni future.

LimitClause

Questo campo è una funzione che riceve due Int64.Type argomenti (skip, take) e restituisce un record con due campi di testo (Text, Location).

LimitClause = (skip as nullable number, take as number) as record => ...

Il skip parametro è il numero di righe da ignorare, ovvero l'argomento su OFF edizione Standard T. Se non viene specificato un offset, il valore skip sarà Null. Se il driver supporta LIMIT, ma non supporta OFF edizione Standard T, la LimitClause funzione deve restituire un errore non implementato (...) quando skip è maggiore di 0.

Il take parametro è il numero di righe da accettare, ovvero l'argomento su LIMIT.

Il Text campo del risultato contiene il testo SQL da aggiungere alla query generata.

Il Location campo specifica dove inserire la clausola . Nella tabella seguente vengono descritti i valori supportati.

Valore Descrizione Esempio
AfterQuerySpecification La clausola LIMIT viene inserita alla fine del codice SQL generato.

Si tratta della sintassi LIMIT più comunemente supportata.
edizione Standard LECT a, b, c

Tabella FROM

WHERE a > 10

LIMITE 5
BeforeQuerySpecification La clausola LIMIT viene inserita prima dell'istruzione SQL generata. LIMITARE 5 RIGHE

edizione Standard LECT a, b, c

Tabella FROM

WHERE a > 10
AfterSelect LIMIT segue l'istruzione edizione Standard LECT e dopo qualsiasi modificatori(ad esempio DISTINCT). edizione Standard LECT DISTINCT LIMIT 5 a, b, c

Tabella FROM

WHERE a > 10
AfterSelectBeforeModifiers LIMIT segue l'istruzione edizione Standard LECT, ma prima di qualsiasi modificatori( ad esempio DISTINCT). edizione Standard LECT LIMIT 5 DISTINCT a, b, c

Tabella FROM

WHERE a > 10

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che prevede una clausola LIMIT, con un OFF facoltativo edizione Standard T, nel formato seguente:[OFFSET <offset> ROWS] LIMIT <row_count>

LimitClause = (skip, take) =>
    let
        offset = if (skip > 0) then Text.Format("OFFSET #{0} ROWS", {skip}) else "",
        limit = if (take <> null) then Text.Format("LIMIT #{0}", {take}) else ""
    in
        [
            Text = Text.Format("#{0} #{1}", {offset, limit}),
            Location = "AfterQuerySpecification"
        ]

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che supporta LIMIT, ma non OFF edizione Standard T. Formato: LIMIT <row_count>.

LimitClause = (skip, take) =>
    if (skip > 0) then error "Skip/Offset not supported"
    else
    [
        Text = Text.Format("LIMIT #{0}", {take}),
        Location = "AfterQuerySpecification"
    ]

Override di SqlCapabilities

Campo Dettagli
FractionalSecondsScale Valore numerico compreso tra 1 e 7 che indica il numero di posizioni decimali supportate per i valori millisecondi. Questo valore deve essere impostato dai connettori che vogliono abilitare la riduzione delle query sui valori datetime.

Impostazione predefinita: null
PrepareStatements Valore logico che indica che le istruzioni devono essere preparate usando SQLPrepare.

Impostazione predefinita: false
SupportsTop Valore logico che indica che il driver supporta la clausola TOP per limitare il numero di righe restituite.

Impostazione predefinita: false
StringLiteralEscapeCharacters Elenco di valori di testo che specificano i caratteri da usare durante l'escape di valori letterali stringa ed espressioni LIKE.

Esempio: {""}

Impostazione predefinita: null
SupportsDerivedTable Valore logico che indica che il driver supporta le tabelle derivate (selezioni secondarie).

Questo valore viene considerato true per i driver che impostano il livello di conformità su SQL_SC_SQL92_FULL (segnalato dal driver o sottoposto a override con l'impostazione Sql92Conformance. Per tutti gli altri livelli di conformità, il valore predefinito è false.

Se il driver non segnala il livello di conformità SQL_SC_SQL92_FULL, ma supporta le tabelle derivate, impostare questo valore su true.

Per molti scenari DirectQuery è necessario supportare le tabelle derivate.
SupportsNumericLiterals Valore logico che indica se sql generato deve includere valori letterali numerici. Se impostato su false, i valori numerici vengono sempre specificati usando l'associazione di parametri.

Impostazione predefinita: false
SupportsStringLiterals Valore logico che indica se sql generato deve includere valori letterali stringa. Se impostato su false, i valori stringa vengono sempre specificati usando l'associazione di parametri.

Impostazione predefinita: false
SupportsOdbcDateLiterals Valore logico che indica se sql generato deve includere valori letterali data. Se impostato su false, i valori di data vengono sempre specificati usando l'associazione di parametri.

Impostazione predefinita: false
SupportsOdbcTimeLiterals Valore logico che indica se sql generato deve includere valori letterali temporali. Se impostato su false, i valori di ora vengono sempre specificati usando l'associazione di parametri.

Impostazione predefinita: false
SupportsOdbcTimestampLiterals Valore logico che indica se sql generato deve includere valori letterali timestamp. Se impostato su false, i valori timestamp vengono sempre specificati usando l'associazione di parametri.

Impostazione predefinita: false

Override di SQLColumns

SQLColumns è un gestore di funzioni che riceve i risultati di una chiamata ODBC a SQLColumns. Il parametro di origine contiene una tabella con le informazioni sul tipo di dati. Questa override viene in genere usata per correggere le mancate corrispondenze del tipo di dati tra le chiamate a SQLGetTypeInfo e SQLColumns.

Per informazioni dettagliate sul formato del parametro della tabella di origine, vedere Funzione SQLColumns.

Override di SQLGetFunctions

Questo campo viene utilizzato per eseguire l'override dei SQLFunctions valori restituiti da un driver ODBC. Contiene un record i cui nomi di campo sono uguali alle FunctionId costanti definite per la funzione ODBC SQLGetFunctions . Le costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC.

Campo Dettagli
SQL_CONVERT_FUNCTIONS Indica quali funzioni sono supportate durante l'operazione di conversione dei tipi. Per impostazione predefinita, il motore M tenta di usare la funzione CONVERT. I driver che preferiscono l'uso di CAST possono eseguire l'override di questo valore per segnalare che è supportato solo SQL_FN_CVT_CAST (valore numerico di 0x2).
SQL_API_SQLBINDCOL Valore logico (true/false) che indica se il motore mashup deve usare l'API SQLBindCol durante il recupero dei dati. Se impostato su false, viene invece usato SQLGetData .

Impostazione predefinita: false

Il frammento di codice seguente fornisce un esempio che indica in modo esplicito al motore M di usare CAST anziché CONVERT.

SQLGetFunctions = [
    SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]

Override di SQLGetInfo

Questo campo viene utilizzato per eseguire l'override dei SQLGetInfo valori restituiti da un driver ODBC. Contiene un record i cui campi sono nomi uguali alle InfoType costanti definite per la funzione ODBC SQLGetInfo . Le costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC. L'elenco completo di che vengono controllati è disponibile nei file di InfoTypes traccia del motore mashup.

La tabella seguente contiene proprietà comunemente sottoposte a SQLGetInfo override:

Campo Dettagli
SQL_SQL_CONFORMANCE Valore intero che indica il livello di SQL-92 supportato dal driver:

(1) SQL_SC_SQL92_ENTRY: conforme a SQL-92 di livello di ingresso.
(2) SQL_SC_FIPS127_2_TRANSITIONAL: conforme al livello transitorio FIPS 127-2.
(4) SQL_SC_ SQL92_INTERMEDIATE" Conforme a SQL-92 di livello intermedio.
(8) SQL_SC_SQL92_FULL: conforme a SQL-92 di livello completo.

Negli scenari di Power Query il connettore viene usato in modalità di sola lettura. La maggior parte dei driver vuole segnalare un livello di conformità SQL_SC_SQL92_FULL ed eseguire l'override di un comportamento di generazione SQL specifico usando le SQLGetInfo proprietà e SQLGetFunctions .
SQL_SQL92_PREDICATES Maschera di bit che enumera i predicati supportati in un'istruzione edizione Standard LECT, come definito in SQL-92.

Passare a SQL_SP_* costanti nella specifica ODBC.
SQL_AGGREGATE_FUNCTIONS Supporto dell'enumerazione della maschera di bit per le funzioni di aggregazione.

SQL_AF_ALL
SQL_AF_AVG
SQL_AF_COUNT
SQL_AF_DISTINCT
SQL_AF_MAX
SQL_AF_MIN
SQL_AF_SUM

Passare a SQL_AF_* costanti nella specifica ODBC.
SQL_GROUP_BY Valore intero che specifica la relazione tra le colonne nella clausola GROUP BY e le colonne non aggregate nell'elenco di selezione:

SQL_GB_COLLATE: è possibile specificare una clausola COLLATE alla fine di ogni colonna di raggruppamento.

SQL_GB_NOT_SUPPORTED: le clausole GROUP BY non sono supportate.

SQL_GB_GROUP_BY_EQUALS_edizione Standard LECT: la clausola GROUP BY deve contenere tutte le colonne non aggregate nell'elenco di selezione. Non può contenere altre colonne. Ad esempio, edizione Standard LECT DEPT, MAX(SALARY) FROM EMPLOY edizione Enterprise GROUP BY DEPT.

SQL_GB_GROUP_BY_CONTAINS_edizione Standard LECT: la clausola GROUP BY deve contenere tutte le colonne non aggregate nell'elenco di selezione. Può contenere colonne che non sono presenti nell'elenco di selezione. Ad esempio, edizione Standard LECT DEPT, MAX(SALARY) FROM EMPLOY edizione Enterprise GROUP BY DEPT, AGE.

SQL_GB_NO_RELATION: le colonne nella clausola GROUP BY e l'elenco di selezione non sono correlate. Il significato delle colonne non raggruppate e non aggregate nell'elenco di selezione è dipendente dall'origine dati. Ad esempio, edizione Standard LECT DEPT, SALARY FROM EMPLOY edizione Enterprise GROUP BY DEPT, AGE.

Passare a SQL_GB_* costanti nella specifica ODBC.

La funzione helper seguente può essere usata per creare valori di maschera di bit da un elenco di valori integer:

Flags = (flags as list) =>
    let
        Loop = List.Generate(
                  ()=> [i = 0, Combined = 0],
                  each [i] < List.Count(flags),
                  each [i = [i]+1, Combined =*Number.BitwiseOr([Combined], flags{i})],
                  each [Combined]),
        Result = List.Last(Loop, 0)
    in
        Result;

Override di SQLGetTypeInfo

SQLGetTypeInfo può essere specificato in due modi:

  • Valore fisso table che contiene le stesse informazioni sul tipo di una chiamata ODBC a SQLGetTypeInfo.
  • Funzione che accetta un argomento di tabella e restituisce una tabella. L'argomento contiene i risultati originali della chiamata ODBC a SQLGetTypeInfo. L'implementazione della funzione può modificare o aggiungere a questa tabella.

Il primo approccio viene usato per eseguire completamente l'override dei valori restituiti dal driver ODBC. Il secondo approccio viene usato se si desidera aggiungere o modificare questi valori.

Per informazioni dettagliate sul formato del parametro di tabella dei tipi e sul valore restituito previsto, vedere riferimento alla funzione SQLGetTypeInfo.

SQLGetTypeInfo con una tabella statica

Il frammento di codice seguente fornisce un'implementazione statica per SQLGetTypeInfo.

SQLGetTypeInfo = #table(
    { "TYPE_NAME",      "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREF", "LITERAL_SUFFIX", "CREATE_PARAS",           "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE", "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX", "INTERNAL_PRECISION", "USER_DATA_TYPE" }, {

    { "char",           1,          65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "char",            null,            null,            -8,              null,               null,             0,                    0                }, 
    { "int8",           -5,         19,             "'",            "'",              null,                     1,          0,                2,            0,                    10,                 0,                   "int8",            0,               0,               -5,              null,               2,                0,                    0                },
    { "bit",            -7,         1,              "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "bit",             null,            null,            -7,              null,               null,             0,                    0                },
    { "bool",           -7,         1,              "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "bit",             null,            null,            -7,              null,               null,             0,                    0                },
    { "date",           9,          10,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "date",            null,            null,            9,               1,                  null,             0,                    0                }, 
    { "numeric",        3,          28,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "numeric",         0,               0,               2,               null,               10,               0,                    0                },
    { "float8",         8,          15,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "float8",          null,            null,            6,               null,               2,                0,                    0                },
    { "float8",         6,          17,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "float8",          null,            null,            6,               null,               2,                0,                    0                },
    { "uuid",           -11,        37,             null,           null,             null,                     1,          0,                2,            null,                 0,                  null,                "uuid",            null,            null,            -11,             null,               null,             0,                    0                },
    { "int4",           4,          10,             null,           null,             null,                     1,          0,                2,            0,                    0,                   0,                  "int4",            0,               0,               4,               null,               2,                0,                    0                },
    { "text",           -1,         65535,          "'",            "'",              null,                     1,          1,                3,            null,                 0,                  null,                "text",            null,            null,            -10,             null,               null,             0,                    0                },
    { "lo",             -4,         255,            "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "lo",              null,            null,            -4,              null,               null,             0,                    0                }, 
    { "numeric",        2,          28,             null,           null,             "precision, scale",       1,          0,                2,            0,                    10,                 0,                   "numeric",         0,               6,               2,               null,               10,               0,                    0                },
    { "float4",         7,          9,              null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "float4",          null,            null,            7,               null,               2,                0,                    0                }, 
    { "int2",           5,          19,             null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "int2",            0,               0,               5,               null,               2,                0,                    0                }, 
    { "int2",           -6,         5,              null,           null,             null,                     1,          0,                2,            0,                    10,                 0,                   "int2",            0,               0,               5,               null,               2,                0,                    0                }, 
    { "timestamp",      11,         26,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "timestamp",       0,               38,              9,               3,                  null,             0,                    0                }, 
    { "date",           91,         10,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "date",            null,            null,            9,               1,                  null,             0,                    0                }, 
    { "timestamp",      93,         26,             "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "timestamp",       0,               38,              9,               3,                  null,             0,                    0                }, 
    { "bytea",          -3,         255,            "'",            "'",              null,                     1,          0,                2,            null,                 0,                  null,                "bytea",           null,            null,            -3,              null,               null,             0,                    0                }, 
    { "varchar",        12,         65535,          "'",            "'",              "max. length",            1,          0,                2,            null,                 0,                  null,                "varchar",         null,            null,           -9,               null,               null,             0,                    0                }, 
    { "char",           -8,         65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "char",            null,            null,           -8,               null,               null,             0,                    0                }, 
    { "text",           -10,        65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "text",            null,            null,           -10,              null,               null,             0,                    0                }, 
    { "varchar",        -9,         65535,          "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "varchar",         null,            null,           -9,               null,               null,             0,                    0                },
    { "bpchar",         -8,         65535,           "'",            "'",              "max. length",            1,          1,                3,            null,                 0,                  null,                "bpchar",          null,            null,            -9,               null,               null,            0,                    0                } }
);

SQLGetTypeInfo con una funzione

I frammenti di codice seguenti aggiungono il bpchar tipo ai tipi esistenti restituiti dal driver.

SQLGetTypeInfo = (types as table) as table =>
   let
       newTypes = #table(
           {
               "TYPE_NAME",
               "DATA_TYPE",
               "COLUMN_SIZE",
               "LITERAL_PREF",
               "LITERAL_SUFFIX",
               "CREATE_PARAS",
               "NULLABLE",
               "CASE_SENSITIVE",
               "SEARCHABLE",
               "UNSIGNED_ATTRIBUTE",
               "FIXED_PREC_SCALE",
               "AUTO_UNIQUE_VALUE",
               "LOCAL_TYPE_NAME",
               "MINIMUM_SCALE",
               "MAXIMUM_SCALE",
               "SQL_DATA_TYPE",
               "SQL_DATETIME_SUB",
               "NUM_PREC_RADIX",
               "INTERNAL_PRECISION",
               "USER_DATA_TYPE"
            },
            // we add a new entry for each type we want to add
            {
                {
                    "bpchar",
                    -8,
                    65535,
                    "'",
                    "'",
                    "max. length",
                    1,
                    1,
                    3,
                    null,
                    0,
                    null,
                    "bpchar",
                    null,
                    null,
                    -9,
                    null,
                    null,
                    0,
                    0
                }
            }),
        append = Table.Combine({types, newTypes})
    in
        append;

Impostazione del stringa di connessione

Il stringa di connessione per il driver ODBC viene impostato usando il primo argomento per le funzioni Odbc.DataSource e Odbc.Query. Il valore può essere di testo o di un record M. Quando si usa il record, ogni campo del record diventerà una proprietà nella stringa di connessione. Tutti i stringa di connessione richiedono un Driver campo (o DSN un campo se è necessario che gli utenti preconfigurino un DSN a livello di sistema). Le proprietà correlate alle credenziali vengono impostate separatamente. Altre proprietà sono specifiche del driver.

Il frammento di codice seguente mostra la definizione di una nuova funzione origine dati, la ConnectionString creazione del record e la chiamata della funzione Odbc.DataSource .

[DataSource.Kind="SqlODBC", Publish="SqlODBC.Publish"]
shared SqlODBC.Contents = (server as text) =>
    let
        ConnectionString = [
            Driver = "SQL Server Native Client 11.0",
            Server = server,
            MultiSubnetFailover = "Yes",
            ApplicationIntent = "ReadOnly",
            APP = "PowerBICustomConnector"
        ],
        OdbcDatasource = Odbc.DataSource(ConnectionString)
    in
        OdbcDatasource;

Passaggi successivi