A
- AccessControlEntry.ConditionToIdentities
- Access.Database
- ActiveDirectory.Domains
- AdobeAnalytics.Cubes
- AdoDotNet.DataSource
- AdoDotNet.Query
- AnalysisServices.Database
- AnalysisServices.Databases
- AzureStorage.BlobContents
- AzureStorage.Blobs
- AzureStorage.DataLake
- AzureStorage.DataLakeContents
- AzureStorage.Tables
B
- BinaryFormat.Binary
- BinaryFormat.Byte
- BinaryFormat.ByteOrder
- BinaryFormat.Choice
- BinaryFormat.Decimal
- BinaryFormat.Double
- BinaryFormat.Group
- BinaryFormat.Length
- BinaryFormat.List
- BinaryFormat.Null
- BinaryFormat.Record
- BinaryFormat.SignedInteger16
- BinaryFormat.SignedInteger32
- BinaryFormat.SignedInteger64
- BinaryFormat.Single
- BinaryFormat.Text
- BinaryFormat.Transform
- BinaryFormat.UnsignedInteger16
- BinaryFormat.UnsignedInteger32
- BinaryFormat.UnsignedInteger64
- BinaryFormat.7BitEncodedSignedInteger
- BinaryFormat.7BitEncodedUnsignedInteger
- Binary data
- Binary.ApproximateLength
- Binary.Buffer
- Binary.Combine
- Binary.Compress
- Binary.Decompress
- Binary.From
- Binary.FromList
- Binary.FromText
- Binary.InferContentType
- Binary.Length
- Binary.Range
- Binary.Split
- Binary.ToList
- Binary.ToText
- Binary.View
- Binary.ViewError
- Binary.ViewFunction
- Byte.From
C
- Cdm.Contents
- Character.FromNumber
- Character.ToNumber
- Combiner.CombineTextByDelimiter
- Combiner.CombineTextByEachDelimiter
- Combiner.CombineTextByLengths
- Combiner.CombineTextByPositions
- Combiner.CombineTextByRanges
- Comparer.FromCulture
- Comparer.Ordinal
- Comparer.OrdinalIgnoreCase
- Controlling byte order
- Csv.Document
- Cube.AddAndExpandDimensionColumn
- Cube.AddMeasureColumn
- Cube.ApplyParameter
- Cube.AttributeMemberId
- Cube.AttributeMemberProperty
- Cube.CollapseAndRemoveColumns
- Cube.Dimensions
- Cube.DisplayFolders
- Cube.MeasureProperties
- Cube.MeasureProperty
- Cube.Measures
- Cube.Parameters
- Cube.Properties
- Cube.PropertyKey
- Cube.ReplaceDimensions
- Cube.Transform
- Currency.From
D
- DateTime.AddZone
- DateTime.Date
- DateTime.FixedLocalNow
- DateTime.From
- DateTime.FromFileTime
- DateTime.FromText
- DateTime.IsInCurrentHour
- DateTime.IsInCurrentMinute
- DateTime.IsInCurrentSecond
- DateTime.IsInNextHour
- DateTime.IsInNextMinute
- DateTime.IsInNextNHours
- DateTime.IsInNextNMinutes
- DateTime.IsInNextNSeconds
- DateTime.IsInNextSecond
- DateTime.IsInPreviousHour
- DateTime.IsInPreviousMinute
- DateTime.IsInPreviousNHours
- DateTime.IsInPreviousNMinutes
- DateTime.IsInPreviousNSeconds
- DateTime.IsInPreviousSecond
- DateTime.LocalNow
- DateTime.Time
- DateTime.ToRecord
- DateTime.ToText
- Date.AddDays
- Date.AddMonths
- Date.AddQuarters
- Date.AddWeeks
- Date.AddYears
- Date.Day
- Date.DayOfWeek
- Date.DayOfWeekName
- Date.DayOfYear
- Date.DaysInMonth
- Date.EndOfDay
- Date.EndOfMonth
- Date.EndOfQuarter
- Date.EndOfWeek
- Date.EndOfYear
- Date.From
- Date.FromText
- Date.IsInCurrentDay
- Date.IsInCurrentMonth
- Date.IsInCurrentQuarter
- Date.IsInCurrentWeek
- Date.IsInCurrentYear
- Date.IsInNextDay
- Date.IsInNextMonth
- Date.IsInNextNDays
- Date.IsInNextNMonths
- Date.IsInNextNQuarters
- Date.IsInNextNWeeks
- Date.IsInNextNYears
- Date.IsInNextQuarter
- Date.IsInNextWeek
- Date.IsInNextYear
- Date.IsInPreviousDay
- Date.IsInPreviousMonth
- Date.IsInPreviousNDays
- Date.IsInPreviousNMonths
- Date.IsInPreviousNQuarters
- Date.IsInPreviousNWeeks
- Date.IsInPreviousNYears
- Date.IsInPreviousQuarter
- Date.IsInPreviousWeek
- Date.IsInPreviousYear
- Date.IsInYearToDate
- Date.IsLeapYear
- Date.Month
- Date.MonthName
- Date.QuarterOfYear
- Date.StartOfDay
- Date.StartOfMonth
- Date.StartOfQuarter
- Date.StartOfWeek
- Date.StartOfYear
- Date.ToRecord
- Date.ToText
- Date.WeekOfMonth
- Date.WeekOfYear
- Date.Year
- DB2.Database
- Decimal.From
- Diagnostics.ActivityId
- Diagnostics.Trace
- DirectQueryCapabilities.From
- Double.From
- Duration.Days
- Duration.From
- Duration.FromText
- Duration.Hours
- Duration.Minutes
- Duration.Seconds
- Duration.ToRecord
- Duration.TotalDays
- Duration.TotalHours
- Duration.TotalMinutes
- Duration.TotalSeconds
- Duration.ToText
E
F
G
H
I
L
- Lines.FromBinary
- Lines.FromText
- Lines.ToBinary
- Lines.ToText
- List.Accumulate
- List.AllTrue
- List.Alternate
- List.AnyTrue
- List.Average
- List.Buffer
- List.Combine
- List.ConformToPageReader
- List.Contains
- List.ContainsAll
- List.ContainsAny
- List.Count
- List.Covariance
- List.Dates
- List.DateTimes
- List.DateTimeZones
- List.Difference
- List.Distinct
- List.Durations
- List.FindText
- List.First
- List.FirstN
- List.Generate
- List.InsertRange
- List.Intersect
- List.IsDistinct
- List.IsEmpty
- List.Last
- List.LastN
- List.MatchesAll
- List.MatchesAny
- List.Max
- List.MaxN
- List.Median
- List.Min
- List.MinN
- List.Mode
- List.Modes
- List.NonNullCount
- List.Numbers
- List.Percentile
- List.PositionOf
- List.PositionOfAny
- List.Positions
- List.Product
- List.Random
- List.Range
- List.RemoveFirstN
- List.RemoveItems
- List.RemoveLastN
- List.RemoveMatchingItems
- List.RemoveNulls
- List.RemoveRange
- List.Repeat
- List.ReplaceMatchingItems
- List.ReplaceRange
- List.ReplaceValue
- List.Reverse
- List.Select
- List.Single
- List.SingleOrDefault
- List.Skip
- List.Sort
- List.Split
- List.StandardDeviation
- List.Sum
- List.Times
- List.Transform
- List.TransformMany
- List.Union
- List.Zip
- Logical.From
- Logical.FromText
In this article, we will dive into the M code behind the DB2.Database function and understand how it works.
Understanding the DB2.Database Function
The DB2.Database function is used to connect to a DB2 database and retrieve data. The function takes three parameters:
1. Server: The name of the DB2 server.
2. Database: The name of the DB2 database.
3. Options: A record that contains additional connection options.
Here is an example of how to use the DB2.Database function in Power Query M:
let
Source = DB2.Database(“myDB2Server”, “myDB2Database”, [Query=”SELECT FROM myTable”])
in
Source
This code connects to the DB2 server "myDB2Server" and retrieves all the data from the "myTable" table in the "myDB2Database" database.
The M Code behind the DB2.Database Function
Under the hood, the DB2.Database function is made up of several M functions that work together to establish a connection and retrieve data from the database.
Here is the M code that makes up the DB2.Database function:
let
Connect = (server, database, options) =>
let
connectionString = “Provider=IBMDADB2;Database=” & database & “;Hostname=” & server & “;” & options,
connection = OleDb.DataSource(connectionString),
source = Table.FromColumns(
{connection{[Schema=””,Item=””]}[Data]},
Table.ColumnNames(connection{[Schema=””,Item=””]}[Data])
)
in
source,
options = (options) =>
let
optionsRecord = Record.Combine(options),
optionsList = List.Transform(Record.ToList(optionsRecord), each _ & “=” & optionsRecord{_}),
optionsString = Text.Combine(optionsList, “;”)
in
if optionsString <> “” then “;” & optionsString else “”,
Source = Text.Split(#”Query”, “,”),
Query = Text.Combine(List.Skip(Source), “,”),
DB2Server = Source{0},
DB2Database = Source{1},
Options = Record.Combine(
List.Transform(
List.Skip(Source, 2),
each Record.FromList(
Text.Split(_, “=”),
{“Name”, “Value”}
)
)
),
ConnectToDB2 = Connect(DB2Server, DB2Database, options(Options))
in
ConnectToDB2
Let's break down each function:
Connect
The Connect function takes three parameters: server, database, and options. It creates an OleDb connection to the DB2 database using the connection string generated from the parameters.
let
Connect = (server, database, options) =>
let
connectionString = “Provider=IBMDADB2;Database=” & database & “;Hostname=” & server & “;” & options,
connection = OleDb.DataSource(connectionString),
source = Table.FromColumns(
{connection{[Schema=””,Item=””]}[Data]},
Table.ColumnNames(connection{[Schema=””,Item=””]}[Data])
)
in
source
The connection string is generated by concatenating the server name, database name, and options. An OleDb connection is then created using the connection string.
The source variable is a Table that contains the data retrieved from the database.
options
The options function takes a record of connection options and returns a string that can be used in the connection string.
let
options = (options) =>
let
optionsRecord = Record.Combine(options),
optionsList = List.Transform(Record.ToList(optionsRecord), each _ & “=” & optionsRecord{_}),
optionsString = Text.Combine(optionsList, “;”)
in
if optionsString <> “” then “;” & optionsString else “”,
It first combines all the options into a single record. It then transforms the record into a list of key-value pairs and concatenates them into a string separated by semicolons. If there are no options, the function returns an empty string.
Source
The Source function splits the query string into server name, database name, and options.
let
Source = Text.Split(#”Query”, “,”),
Query = Text.Combine(List.Skip(Source), “,”),
DB2Server = Source{0},
DB2Database = Source{1},
Options = Record.Combine(
List.Transform(
List.Skip(Source, 2),
each Record.FromList(
Text.Split(_, “=”),
{“Name”, “Value”}
)
)
),
ConnectToDB2 = Connect(DB2Server, DB2Database, options(Options))
in
ConnectToDB2
The Source variable is created by splitting the query string by commas. The first two elements are the server name and database name, while the rest are the connection options.
The Options variable transforms the connection options into a record. It does this by splitting each option by the equals sign and creating a record with the name and value.
Finally, the ConnectToDB2 function calls the Connect function with the server name, database name, and options, and returns the data retrieved from the database.
The DB2.Database function is a powerful tool for retrieving data from a DB2 database in Power Query M. Under the hood, it is made up of several M functions that work together to establish a connection and retrieve data from the database. Understanding the M code behind the function can help users troubleshoot connection issues and optimize their queries. By understanding the inner workings of Power Query M functions, users can become more proficient in using the tool to extract, transform, and load data.