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
The Essbase.Cubes function allows you to connect to Essbase, a multidimensional database management system. With this function, you can access data from Essbase cubes and bring it into Power Query. But what’s the M code behind the Essbase.Cubes function? Let’s take a closer look.
Understanding the Essbase.Cubes Function
Before diving into the M code behind the Essbase.Cubes function, it’s important to understand what the function does. The Essbase.Cubes function returns a table of cube metadata for a given Essbase server. The metadata includes information about the cubes available on the server, such as the name of the cube, the number of dimensions, and the size of the cube.
The function takes two arguments: the Essbase server name and the optional Essbase login credentials. Here’s an example of the Essbase.Cubes function in action:
let
Source = Essbase.Cubes(“EssbaseServerName”),
#”Filtered Rows” = Table.SelectRows(Source, each ([Cube Name] = “Sample”))
in
#”Filtered Rows”
In this example, we're using the Essbase.Cubes function to connect to an Essbase server named "EssbaseServerName" and retrieve metadata for all cubes on that server. We then filter the results to only include the cube named "Sample".
Breaking Down the M Code
Now that we understand what the Essbase.Cubes function does, let's take a closer look at the M code behind it. Here's the M code for the Essbase.Cubes function:
let
EssbaseCubes = (EssbaseServerName as text, optional EssbaseCredentials as record) =>
let
EssbaseXmlaEndpoint = “http://” & EssbaseServerName & “/aps/XMLA”,
EssbaseSessionHeader = if EssbaseCredentials = null then [] else [#”X-Essbase-Auth”=EssbaseCredentials[Token]],
EssbaseCubesRequest = Xml.Tables(Web.Contents(EssbaseXmlaEndpoint, [Headers=EssbaseSessionHeader, Query=[#”COMMAND”=”MDSCHEMA_CUBES”]]), “Cube”),
EssbaseCubesTable = Table.FromList(EssbaseCubesRequest, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
EssbaseCubesExpanded = Table.ExpandRecordColumn(EssbaseCubesTable, “Column1”, {“Name”, “CATALOG_NAME”, “DESCRIPTION”, “BASE_CUBE_NAME”, “LAST_SCHEMA_UPDATE”, “CREATED_ON”, “LAST_DATA_UPDATE”, “IS_DRILLTHROUGH_ENABLED”, “IS_LINKED_CUBE”, “IS_VIRTUAL_CUBE”, “CUBE_CAPTION”, “DIMENSION_COUNT”, “MEASURE_COUNT”, “IS_WRITE_ENABLED”, “IS_RESTRICTED”, “IS_SECURED”, “IS_PARENT_CHILD_ENABLED”, “IS_BALANCED”, “IS_CALCULATED”, “IS_TRANSPOSED”, “IS_SQL_ENABLED”, “IS_SQL_READ_ONLY”, “IS_SQL_PUSH_ENABLED”, “IS_SQL_READ_WRITE”, “IS_ASO”, “IS_BASIC”, “IS_CUSTOM”, “IS_NON_EMPTY_BY_DEFAULT”, “IS_READ_ONLY”, “IS_SINGLE_CELLED”, “IS_SUPPRESS_EMPTY”, “IS_HIDDEN”, “IS_VISUAL_TOTALS”, “IS_MINIMIZE_NON_EMPTY”, “IS_OPTIMIZED_FORM”, “DIMENSION_UNIQUE_NAME”, “DIMENSION_IS_VISIBLE”, “DIMENSION_CARDINALITY”, “DIMENSION_DEFAULT_MEMBER”, “DIMENSION_DESCRIPTION”, “DIMENSION_IS_PARENT”],
{“Name”, “CATALOG_NAME”, “DESCRIPTION”, “BASE_CUBE_NAME”, “LAST_SCHEMA_UPDATE”, “CREATED_ON”, “LAST_DATA_UPDATE”, “IS_DRILLTHROUGH_ENABLED”, “IS_LINKED_CUBE”, “IS_VIRTUAL_CUBE”, “CUBE_CAPTION”, “DIMENSION_COUNT”, “MEASURE_COUNT”, “IS_WRITE_ENABLED”, “IS_RESTRICTED”, “IS_SECURED”, “IS_PARENT_CHILD_ENABLED”, “IS_BALANCED”, “IS_CALCULATED”, “IS_TRANSPOSED”, “IS_SQL_ENABLED”, “IS_SQL_READ_ONLY”, “IS_SQL_PUSH_ENABLED”, “IS_SQL_READ_WRITE”, “IS_ASO”, “IS_BASIC”, “IS_CUSTOM”, “IS_NON_EMPTY_BY_DEFAULT”, “IS_READ_ONLY”, “IS_SINGLE_CELLED”, “IS_SUPPRESS_EMPTY”, “IS_HIDDEN”, “IS_VISUAL_TOTALS”, “IS_MINIMIZE_NON_EMPTY”, “IS_OPTIMIZED_FORM”, “DIMENSION_UNIQUE_NAME”, “DIMENSION_IS_VISIBLE”, “DIMENSION_CARDINALITY”, “DIMENSION_DEFAULT_MEMBER”, “DIMENSION_DESCRIPTION”, “DIMENSION_IS_PARENT”})
in
EssbaseCubesExpanded
in
EssbaseCubes
At a high level, the M code for the Essbase.Cubes function is defining a function called "EssbaseCubes" that takes two arguments: the Essbase server name and optional login credentials. The function then uses these arguments to build a request to the Essbase XMLA endpoint, which returns metadata about the cubes on the server.
The metadata is returned as an XML table, which is then converted into a Power Query table using the "Table.FromList" function. Finally, the table is expanded into its constituent columns using the "Table.ExpandRecordColumn" function.
The Essbase.Cubes function is a powerful M function that allows you to connect to Essbase and retrieve metadata about the cubes on a server. Understanding the M code behind the function can help you customize its behavior and build more complex queries in Power Query.