Parametrar för Odbc.DataSource
Funktionen Odbc.DataSource tar två parametrar – en connectionString för drivrutinen och options en post som gör att du kan åsidosätta olika drivrutinsbeteenden. Via alternativposten kan du åsidosätta funktioner och annan information som rapporteras av drivrutinen, styra navigeringsbeteendet och påverka SQL frågor som genereras av M-motorn.
De alternativ som stöds innehåller fält som är indela i två kategorier– de som är offentliga och alltid tillgängliga, och de som endast är tillgängliga i en utökningskontext.
I följande tabell beskrivs de offentliga fälten i alternativposten.
| Fält | Beskrivning |
|---|---|
CommandTimeout |
Ett varaktighetsvärde som styr hur länge frågan på serversidan får köras innan den avbryts. Standard: 10 minuter |
ConnectionTimeout |
Ett varaktighetsvärde som styr hur lång tid det tar innan ett försök att upprätta en anslutning till servern övergers. Standard: 15 sekunder |
CreateNavigationProperties |
Ett logiskt värde som anger om navigeringsegenskaper ska genereras för de returnerade tabellerna. Navigeringsegenskaper baseras på externa nyckelrelationer som rapporteras av drivrutinen. Dessa egenskaper visas som "virtuella" kolumner som kan expanderas i frågeredigeraren och skapa en lämplig koppling. Om beräkning av externa nyckelberoenden är en dyr åtgärd för drivrutinen kan du ange värdet false. Standard: true |
HierarchicalNavigation |
Ett logiskt värde som anger om tabellerna ska visas grupperade efter schemanamn. När det är inställt på false (falskt) visas tabeller i en platt lista under varje databas. Standard: falskt |
SqlCompatibleWindowsAuth |
Ett logiskt värde som avgör om en kompatibel SQL Server ska produceras när du använder Windows-autentiseringTrusted_Connection=Yes.Om drivrutinen stöder Windows-autentisering, men kräver extra eller alternativa inställningar i anslutningssträngen, bör du ange värdet till false CredentialConnectionString och använda alternativpostfältet som beskrivs i nästa tabell.Standard: true |
I följande tabell beskrivs de alternativpostfält som endast är tillgängliga via utökningsbarhet. Fält som inte är enkla literalvärden beskrivs i senare avsnitt.
| Fält | Beskrivning |
|---|---|
AstVisitor |
En post som innehåller en eller flera åsidosättningar för att SQL generering av frågor. Den vanligaste användningen av det här fältet är att tillhandahålla logik för att generera en LIMIT/OFFSET-sats för drivrutiner som inte stöder TOP. Fälten inkluderar Constant och LimitClause.Mer information: Åsidosätta AstVisitor |
CancelQueryExplicitly |
Ett logiskt värde som instruerar M-motorn att uttryckligen avbryta alla anrop som körs via ODBC-drivrutinen innan anslutningen till ODBC-servern avslutas. Det här fältet är användbart i situationer där frågekörning hanteras oberoende av nätverksanslutningarna till servern, till exempel i vissa Spark-distributioner. I de flesta fall behöver det här värdet inte anges eftersom frågan på servern avbryts när nätverksanslutningen till servern avbryts. Standard: falskt |
ClientConnectionPooling |
Ett logiskt värde som möjliggör anslutningspooler på klientsidan för ODBC-drivrutinen. De flesta drivrutiner vill ange det här värdet till true. Standard: falskt |
CredentialConnectionString |
Ett text- eller postvärde som används för att ange autentiseringsrelaterade anslutningssträngsegenskaper. |
HideNativeQuery |
Ett logiskt värde som styr om anslutningsappen visar genererade SQL i Power Query användarupplevelsen. Detta ska endast anges till true om backend-datakällan har inbyggt stöd SQL-92. Standard: falskt |
ImplicitTypeConversions |
Ett tabellvärde som innehåller implicita typkonverteringar som stöds av drivrutinen eller backend-servern. Värdena i den här tabellen är additiva för de konverteringar som rapporteras av själva drivrutinen. Det här fältet används vanligtvis med fältet SQLGetTypeInfo när du åsidosätter datatypsinformation som rapporteras av drivrutinen. |
OnError |
En felhanteringsfunktion som tar emot en errorRecord parameter av typen record.Vanliga användningsområden för den här funktionen är att hantera SSL-anslutningsfel, tillhandahålla en nedladdningslänk om drivrutinen inte hittas i systemet och rapportera autentiseringsfel. |
SoftNumbers |
Gör att M-motorn kan välja en kompatibel datatyp när konvertering mellan två specifika numeriska typer inte deklareras som stöd i SQL_CONVERT_*. Standard: falskt |
SqlCapabilities |
En post som ger olika åsidosättningar av drivrutinsfunktioner och ett sätt att ange funktioner som inte uttrycks via ODBC 3.8. Mer information: Åsidosätta SqlCapabilities |
SQLColumns |
En funktion som gör att du kan ändra kolumnmetadata som returneras av SQLColumns funktionen.Mer information: Åsidosätta SQLColumns |
SQLGetFunctions |
En post som gör att du kan åsidosätta värden som returneras av anrop till SQLGetFunctions.Ett vanligt användningsfält för det här fältet är att inaktivera användningen av parameterbindning eller att ange att genererade frågor ska använda CAST i stället för CONVERT. Mer information: Åsidosätta SQLGetFunctions |
SQLGetInfo |
En post som gör att du kan åsidosätta värden som returneras av anrop till SQLGetInfo.Mer information: Åsidosätta SQLGetInfo |
SQLGetTypeInfo |
En tabell eller funktion som returnerar en tabell som åsidosätter den typinformation som returneras av SQLGetTypeInfo.När värdet anges till en tabell ersätter värdet helt den typinformation som rapporteras av drivrutinen. SQLGetTypeInfo anropas inte.När värdet är inställt på en funktion får funktionen resultatet av det ursprungliga anropet SQLGetTypeInfotill , så att du kan ändra tabellen.Det här fältet används vanligtvis när det finns ett matchningsfel mellan datatyper som rapporteras av SQLGetTypeInfo och SQLColumns.Mer information: Åsidosätta SQLGetTypeInfo |
SQLTables |
En funktion som gör att du kan ändra tabellmetadata som returneras av ett anrop till SQLTables. |
TolerateConcatOverflow |
Tillåter sammanfogning av textvärden även om resultatet kan trunkeras så att det passar inom intervallet för en tillgänglig typ. När du till exempel sammanfogar ett VARCHAR(4000)-fält med ett VARCHAR(4000)-fält i ett system som stöder en maximerad VARCHAR-storlek på 4 000 och ingen CLOB-typ, så är sammanfogningen vikt trots att resultatet kan trunkeras. Standard: falskt |
UseEmbeddedDriver |
(intern användning): Ett logiskt värde som styr om ODBC-drivrutinen ska läsas in från en lokal katalog (med nya funktioner som definieras i ODBC 4.0-specifikationen). Det här värdet anges vanligtvis bara av anslutningsappar som skapats av Microsoft och som levereras med Power Query. När det är inställt på false (falskt) används systemets ODBC-drivrutinshanterare för att hitta och läsa in drivrutinen. De flesta anslutningsappar behöver inte ange det här fältet. Standard: falskt |
Åsidosätta AstVisitor
Fältet AstVisitor anges via alternativposten Odbc.DataSource . Den används för att ändra SQL som genereras för specifika frågescenarier.
Anteckning
Drivrutiner som stöder LIMIT- och OFFSET-satser (i stället för TOP) vill tillhandahålla en åsidosättning LimitClause för AstVisitor.
Konstant
Att ange en åsidosättning för det här värdet är inaktuellt och kan tas bort från framtida implementeringar.
LimitClause
Det här fältet är en funktion som tar emot Int64.Type två argument (skip, take), och returnerar en post med två textfält (Text, Location).
LimitClause = (skip as nullable number, take as number) as record => ...
Parametern skip är antalet rader som ska hoppas över (det vill säga argumentet till OFFSET). Om en förskjutning inte anges blir värdet för hoppa över null. Om drivrutinen stöder LIMIT, men inte har stöd för OFFSET, LimitClause bör funktionen returnera ett fel som inte har implementerats (...) när hoppa över är större än 0.
Parametern take är antalet rader som ska ta (det vill säga argumentet till LIMIT).
Fältet Text i resultatet innehåller den SQL som ska läggas till i den genererade frågan.
Fältet Location anger var satsen ska infogas. I följande tabell beskrivs värden som stöds.
| Värde | Beskrivning | Exempel |
|---|---|---|
AfterQuerySpecification |
LIMIT-satsen sätts i slutet av den genererade SQL. Det här är den vanligaste LIMIT-syntaxen. |
SELECT a, b, c FROM-tabell WHERE a > 10 GRÄNS 5 |
BeforeQuerySpecification |
LIMIT-satsen läggs före den genererade SQL-instruktionen. | BEGRÄNSA 5 RADER SELECT a, b, c FROM-tabell WHERE a > 10 |
AfterSelect |
LIMIT går efter SELECT-instruktionen och efter eventuella modifierare (till exempel DISTINCT). | SELECT DISTINCT LIMIT 5 a, b, c FROM-tabell WHERE a > 10 |
AfterSelectBeforeModifiers |
LIMIT går efter SELECT-instruktionen, men före eventuella modifierare (till exempel DISTINCT). | SELECT LIMIT 5 DISTINCT a, b, c FROM-tabell WHERE a > 10 |
Följande kodfragment innehåller en LimitClause-implementering för en drivrutin som förväntar sig en LIMIT-sats, med en valfri OFFSET, i följande format: [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"
]
Följande kodfragment innehåller en implementering LimitClause för en drivrutin som stöder LIMIT, men inte OFFSET. Format: LIMIT <row_count>.
LimitClause = (skip, take) =>
if (skip > 0) then error "Skip/Offset not supported"
else
[
Text = Text.Format("LIMIT #{0}", {take}),
Location = "AfterQuerySpecification"
]
Åsidosätta SqlCapabilities
| Fält | Information |
|---|---|
FractionalSecondsScale |
Ett talvärde mellan 1 och 7 som anger antalet decimaler som stöds för millisekunders värden. Det här värdet ska anges av anslutningsappar som vill aktivera frågedekning över datetime-värden. Standard: null |
PrepareStatements |
Ett logiskt värde som anger att -instruktioner ska förberedas med SQLPrepare. Standard: falskt |
SupportsTop |
Ett logiskt värde som anger att drivrutinen stöder TOP-satsen för att begränsa antalet returnerade rader. Standard: falskt |
StringLiteralEscapeCharacters |
En lista med textvärden som anger de tecken som ska användas vid undantag för stränglitteraler och LIKE-uttryck. Exempel: {""}Standard: null |
SupportsDerivedTable |
Ett logiskt värde som anger att drivrutinen stöder härledda tabeller (underväljer). Det här värdet antas vara sant för drivrutiner som anger deras överensstämmelsenivå till SQL_SC_SQL92_FULL (rapporteras av drivrutinen eller åsidosätts med inställningen Sql92Conformance. För alla andra överensstämmelsenivåer är det här värdet falskt som standard. Om drivrutinen inte rapporterar kompatibilitetsnivån SQL_SC_SQL92_FULL har stöd för härledda tabeller anger du värdet till true. Stöd för härledda tabeller krävs för många DirectQuery-scenarier. |
SupportsNumericLiterals |
Ett logiskt värde som anger om den genererade SQL ska innehålla värden för numeriska literaler. När värdet är false anges alltid numeriska värden med parameterbindning. Standard: falskt |
SupportsStringLiterals |
Ett logiskt värde som anger om den genererade SQL ska innehålla stränglitteralvärden. När värdet är false anges strängvärden alltid med parameterbindning. Standard: falskt |
SupportsOdbcDateLiterals |
Ett logiskt värde som anger om den genererade SQL ska innehålla värden för datumlitteraler. När värdet är false anges alltid datumvärden med parameterbindning. Standard: falskt |
SupportsOdbcTimeLiterals |
Ett logiskt värde som anger om den genererade SQL ska innehålla värden för tidslitteraler. När värdet är false anges alltid tidsvärden med parameterbindning. Standard: falskt |
SupportsOdbcTimestampLiterals |
Ett logiskt värde som anger om den genererade SQL ska innehålla värden för tidsstämpellitteraler. När värdet är false anges alltid tidsstämpelvärden med parameterbindning. Standard: falskt |
Åsidosätta SQLColumns
SQLColumns är en funktionshanterare som tar emot resultatet av ett ODBC-anrop till SQLColumns. Källparametern innehåller en tabell med information om datatypen. Den här åsidosättningen används vanligtvis för att åtgärda matchningsfel för datatyper mellan anrop till SQLGetTypeInfo och SQLColumns.
Mer information om formatet för källtabellparametern finns i FUNKTIONEN SQLColumns.
Åsidosätta SQLGetFunctions
Det här fältet används för att åsidosätta värden SQLFunctions som returneras av en ODBC-drivrutin. Den innehåller en post vars fältnamn är lika med konstanterna FunctionId som definierats för funktionen ODBC SQLGetFunctions . Numeriska konstanter för vart och ett av dessa fält finns i ODBC-specifikationen.
| Fält | Information |
|---|---|
SQL_CONVERT_FUNCTIONS |
Anger vilka funktioner som stöds vid typkonverteringar. Som standard försöker M-motorn använda funktionen CONVERT. Drivrutiner som föredrar att använda CAST kan åsidosätta det här värdet för att rapportera att endast SQL_FN_CVT_CAST (numeriskt värde 0x2) stöds. |
SQL_API_SQLBINDCOL |
Ett logiskt (sant/falskt) värde som anger om kombinationsmotorn ska använda SQLBindCol-API:et när data hämtas. När det är inställt på false används SQLGetData i stället. Standard: falskt |
Följande kodfragment innehåller ett exempel som uttryckligen anger att M-motorn ska använda CAST i stället för CONVERT.
SQLGetFunctions = [
SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]
Åsidosätta SQLGetInfo
Det här fältet används för att åsidosätta värden SQLGetInfo som returneras av en ODBC-drivrutin. Den innehåller en post vars fält är namn som motsvarar konstanterna InfoType som definierats för funktionen ODBC SQLGetInfo . Numeriska konstanter för vart och ett av dessa fält finns i ODBC-specifikationen. Den fullständiga listan över InfoTypes som kontrolleras finns i spårningsfilerna för kombinationsmotorn.
Följande tabell innehåller ofta åsidosatta SQLGetInfo egenskaper:
| Fält | Information |
|---|---|
SQL_SQL_CONFORMANCE |
Ett heltalsvärde som anger den nivå SQL-92 som stöds av drivrutinen: (1) SQL_SC_SQL92_ENTRY: Kompatibel på SQL-92. (2) SQL_SC_FIPS127_2_TRANSITIONAL: ÖVERGÅNGSnivå för FIPS 127-2. (4) SQL_SC_ SQL92_INTERMEDIATE" Kompatibel SQL-92 på mellannivå. (8) SQL_SC_SQL92_FULL: Kompatibel SQL-92 på full nivå. I Power Query-scenarier används anslutningsappen i skrivskyddade läge. De flesta drivrutiner vill rapportera en SQL_SC_SQL92_FULL kompatibilitetsnivå och åsidosätta specifika SQL genereringsbeteende med egenskaperna SQLGetInfo och SQLGetFunctions . |
SQL_SQL92_PREDICATES |
En bitmask som räknar upp de predikat som stöds i en SELECT-instruktion enligt definitionen i SQL-92. Gå till SQL_SP_* konstanter i ODBC-specifikationen. |
SQL_AGGREGATE_FUNCTIONS |
Ett bitmask-uppräkningsstöd för aggregeringsfunktioner. SQL_AF_ALL SQL_AF_AVG SQL_AF_COUNT SQL_AF_DISTINCT SQL_AF_MAX SQL_AF_MIN SQL_AF_SUM Gå till SQL_AF_* konstanter i ODBC-specifikationen. |
SQL_GROUP_BY |
Ett heltalsvärde som anger relationen mellan kolumnerna i GROUP BY-satsen och de icke-aggregerade kolumnerna i urvalslistan: SQL_GB_COLLATE: En COLLATE-sats kan anges i slutet av varje grupperingskolumn. SQL_GB_NOT_SUPPORTED: GROUP BY-satser stöds inte. SQL_GB_GROUP_BY_EQUALS_SELECT: GROUP BY-satsen måste innehålla alla icke-aggregerade kolumner i urvalslistan. Den får inte innehålla några andra kolumner. Till exempel SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT. SQL_GB_GROUP_BY_CONTAINS_SELECT: GROUP BY-satsen måste innehålla alla icke-aggregerade kolumner i urvalslistan. Den kan innehålla kolumner som inte finns i urvalslistan. Till exempel SELECT DEPT, MAX(SALARY) FROM EMPLOYEE GROUP BY DEPT, AGE. SQL_GB_NO_RELATION: Kolumnerna i GROUP BY-satsen och select-listan är inte relaterade. Innebörden av icke-grupperade, icke-aggregerade kolumner i urvalslistan är datakällsberoende. Till exempel SELECT DEPT, SALARY FROM EMPLOYEE GROUP BY DEPT, AGE. Gå till SQL_GB_* konstanter i ODBC-specifikationen. |
Följande hjälpfunktion kan användas för att skapa bitmaskvärden från en lista med heltalsvärden:
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;
Åsidosätta SQLGetTypeInfo
SQLGetTypeInfo kan anges på två sätt:
- Ett fast
tablevärde som innehåller samma typinformation som ett ODBC-anrop tillSQLGetTypeInfo. - En funktion som accepterar ett tabellargument och returnerar en tabell. Argumentet innehåller det ursprungliga resultatet av ODBC-anropet till
SQLGetTypeInfo. Funktionsimplementering kan ändra eller lägga till i den här tabellen.
Den första metoden används för att fullständigt åsidosätta de värden som returneras av ODBC-drivrutinen. Den andra metoden används om du vill lägga till eller ändra dessa värden.
Mer information om formatet för tabellparametern types och förväntat returvärde finns i funktionsreferensen SQLGetTypeInfo.
SQLGetTypeInfo med hjälp av en statisk tabell
Följande kodfragment innehåller en statisk implementering för 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 med hjälp av en funktion
Följande kodfragment lägger till typen i bpchar de befintliga typer som returneras av drivrutinen.
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;
Ange anslutningssträngen
Anslutningssträngen för ODBC-drivrutinen anges med det första argumentet för funktionerna Odbc.DataSource och Odbc.Query . Värdet kan vara text eller en M-post. När du använder posten blir varje fält i posten en egenskap i anslutningssträngen. Alla anslutningssträngar kräver ett Driver fält (eller DSN fält om du kräver att användarna förkonfigurerar ett DSN på systemnivå). Autentiseringsrelaterade egenskaper anges separat. Andra egenskaper är drivrutinsspecifika.
Kodfragmentet nedan visar definitionen av en ny datakällsfunktion, ConnectionString skapande av posten och anrop av funktionen 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;