Skip to main content

Tabular Column

The Columns section lists the columns that belong to the table in the model. Each entry either maps to a source column in the gold table, or is a calculated column defined by a DAX Expression.

Dax Column

NameDescription
SourceColumnSourcecolumn name, if name is not supplied, this name is used. Automatically camelcase script is applied. Mutually exclusive with Expression.
ExpressionDAX expression that defines this column as a calculated column. Mutually exclusive with SourceColumn.
DataTypeDatatype of the column. Will be converted to Fabric datatype.
ClassificationClassification of this field. Set to sensitive for fields that should be handled with care.
DataCategoryData category of the column
DescriptionDescription of the field, used in BI-tools like Power BI and Excel
DisplayFolderFolder for this field, used in BI-tools like Power BI and Excel
FormatStringFormat string of this field
SummarizeByDefault aggregation a BI tool applies when this column is dropped into a visual: none, default, sum, min, max, count, average or distinctcount. Defaults to none so numeric keys and year columns are not summed automatically.
IsHiddenField is hidden from the model (can still be queried) (default=false)
IsKey/IsPrimaryKeyField is used as the primary key for this table (default=false)
IsUniqueField contains unique values (default=false)
IsNullableSet to false to declare the column as not nullable (default=true)
AlignmentHorizontal alignment of the column values in report visuals: default, left, right or center (default=default)
IsAvailableInMdxSet to false when the column is not used for slicing and filtering in MDX clients (default=true)
EncodingHintStorage encoding hint: Default, Value or Hash (default=Default)
OrderByColumnThe field on which this field should order.

Basic: SourceColumn and Type

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: CallGrouping
Type: varchar(50)
- SourceColumn: PhoneStatus
Type: varchar(50)
- SourceColumn: IsActive
Type: bit
  • SourceColumn: This is the name of the column in the source data.
  • Type: Indicates the data type of the column. This defines how the data is stored and processed within the model. For a comprehensive list of data types, visit all data types.
Common Column Example
- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: CallGrouping
Type: varchar(50)
Description: Represents the grouping of calls.
- SourceColumn: PhoneStatus
Type: varchar(50)
- SourceColumn: IsActive
Type: bit
IsHidden: true

Classification

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: CallGrouping
Type: varchar(50)
Classification: Sensitive
- SourceColumn: PhoneStatus
Type: varchar(50)
- SourceColumn: IsActive
Type: bit
  • Classification: This field designates whether the data is classified as sensitive and should be handled with care.

Description

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: CallGrouping
Type: varchar(50)
Description: Represents the grouping of calls.
- SourceColumn: PhoneStatus
Type: varchar(50)
- SourceColumn: IsActive
Type: bit
  • Description: The Description field provides an explanation of the column. In Power BI, this description will be shown as a tooltip when hovering over the column.

DisplayFolder

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: CallGrouping
Type: varchar(50)
DisplayFolder: Calls
- SourceColumn: PhoneStatus
Type: varchar(50)
- SourceColumn: IsActive
Type: bit
  • DisplayFolder: The DisplayFolder allows you to organize your columns into folders within Power BI. By organizing columns into folders, you can better structure your tables, making it easier to find specific columns, especially when dealing with large tables.

FormatString

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: CallGrouping
Type: varchar(50)
- SourceColumn: CallOrder
Type: int
FormatString: 0
- SourceColumn: PhoneStatus
Type: varchar(50)
- SourceColumn: IsActive
Type: bit
  • FormatString: The FormatString property defines the display format for the column result. In this example, "0" rounds numbers to the nearest integer without decimals.

SummarizeBy

- Table:
Name: Sales
SourceTable: F_Sales
TableType: Fact
Columns:
- SourceColumn: Year
Type: int
SummarizeBy: none
- SourceColumn: Amount
Type: decimal(21,5)
SummarizeBy: sum
  • SummarizeBy: Sets the default aggregation Power BI applies when the column is dropped onto a visual. Valid values are none, sum, average, count, min, max and distinctCount. The default is none, which is important for numeric key columns and year columns: without it Power BI would sum them automatically. Use it to force a sensible default aggregation, though a dedicated measure is generally preferable.

IsHidden

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: CallGrouping
Type: varchar(50)
- SourceColumn: PhoneStatus
Type: varchar(50)
- SourceColumn: IsActive
Type: bit
IsHidden: true
  • IsHidden: The IsHidden property controls the visibility of the column in Power BI or Excel. Setting it to true hides the column from the interface. By default, this property is set to false.

IsKey

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: id
Type: int
IsKey: true
- SourceColumn: CallGrouping
Type: varchar(50)
- SourceColumn: PhoneStatus
Type: varchar(50)
- SourceColumn: IsActive
Type: bit
  • IsKey: Determines if this column is the primary key of the table. The default setting is false. When set to true, the column is recognized as a primary key.

IsUnique

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: id
Type: int
IsUnique: true
- SourceColumn: CallGrouping
Type: varchar(50)
- SourceColumn: PhoneStatus
Type: varchar(50)
- SourceColumn: IsActive
Type: bit
  • IsUnique: Ensures that each entry in the column is unique. The default setting is false. If set to true and duplicate values are found, an error will occur, as this property requires all values to be distinct to maintain data integrity in the model.

IsNullable

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: id
Type: int
IsKey: true
IsNullable: false
- SourceColumn: CallGrouping
Type: varchar(50)
  • IsNullable: Declares whether the column may contain null values. The default is true. Set it to false to enforce data integrity for columns that must always be populated, such as key columns.

Alignment

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: CallGrouping
Type: varchar(50)
Alignment: left
- SourceColumn: CallOrder
Type: int
Alignment: right
  • Alignment: Controls the horizontal alignment of the column values in report visuals. Valid values are default, left, right and center. The default is default, which lets the client decide based on the data type.

IsAvailableInMdx

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: CallGrouping
Type: varchar(50)
- SourceColumn: HighCardinalityCode
Type: varchar(255)
IsAvailableInMdx: false
  • IsAvailableInMdx: Set to false for large, high-cardinality columns that are not used as an attribute for slicing and filtering in MDX clients (such as Excel PivotTables). Disabling MDX availability produces a smaller, faster model. The default is true. A column referenced as an OrderByColumn cannot have this disabled.

EncodingHint

- Table:
Name: Sales
SourceTable: F_Sales
TableType: Fact
Columns:
- SourceColumn: Amount
Type: decimal(21,5)
EncodingHint: Value
- SourceColumn: Category
Type: varchar(50)
EncodingHint: Hash
  • EncodingHint: A storage encoding hint for the VertiPaq engine. Valid values are Default, Value and Hash. Value encoding suits columns aggregated arithmetically (numeric measures); Hash encoding suits columns used for grouping and filtering. The default is Default, which lets the engine choose.

SummarizeBy

- Table:
Name: Sales
SourceTable: F_Sales
TableType: Fact
Columns:
- SourceColumn: Year
Type: int
- SourceColumn: Amount
Type: decimal(21,5)
SummarizeBy: sum
  • SummarizeBy: Sets the default aggregation a BI tool applies when the column is dropped into a visual. Accepts none, default, sum, min, max, count, average or distinctcount.

    The default is none, which is deliberate: without it Power BI auto-sums every numeric column, so identity-like numeric fields (surrogate keys, Year, postal codes) would silently be added up. Leave those on none and set SummarizeBy explicitly only on columns where a default aggregation is genuinely useful. For real, reusable calculations prefer a measure over relying on a column's default aggregation.

Expression (calculated column)

A column can be defined entirely in DAX instead of mapping to a gold-table column. Provide a Name, an Expression and a Type; leave SourceColumn unset. The framework emits a TOM calculated column, so the value is computed in the semantic modelThe "brain" of your data that tells Power BI how different pieces of information relate to each other. at refresh time rather than persisted to the gold table.

- Table:
Name: Sales
SourceTable: F_Sales
TableType: Fact
Columns:
- SourceColumn: Quantity
Type: decimal(21,5)
IsHidden: true
- SourceColumn: UnitPrice
Type: decimal(21,5)
IsHidden: true
- Name: LineAmount
Expression: Sales[Quantity] * Sales[UnitPrice]
Type: decimal(21,5)
FormatString: "#,##0.00"
DisplayFolder: Calculations

A column must have exactly one of SourceColumn or Expression; supplying both — or neither, with no Name — fails validation.

User-context columns (USERPRINCIPALNAME, CUSTOMDATA, …)

The framework emits a plain calculated column, which Power BI materializes at refresh time. That has a consequence that is easy to get wrong: a DAX expression such as [Email] = USERPRINCIPALNAME() is evaluated once, under the refresh identity, and the result is stored. Every user then reads the same materialized value — the column is not user-aware.

True per-user evaluation requires a calculated column with ExpressionContext: UserContext (Power BI, April 2026 preview; compatibility level 1705+ on a preview-enabled capacity). That mode is unmaterialized: the expression is evaluated at query time, per user, in an empty filter context, under the RLS roles of the querying user, and the result is not stored. It unlocks the user functions USERCULTURE(), USERPRINCIPALNAME(), USEROBJECTID(), USERNAME() and CUSTOMDATA(). A user-context column has no SourceColumn (only Expression), needs an explicit DataType, must be SummarizeBy: none, and may not participate in relationships, RLS, calculated tables or ordinary calculated columns.

note

EasyFabric does not currently emit ExpressionContext: UserContext; every generated calculated column is a Standard (materialized) column. Do not rely on USERPRINCIPALNAME() in a calculated column to produce per-user results.

Because a user-context column keeps row context, its expression can combine [AnotherColumn] from the same row with the user functions — but only for columns that actually exist in the model. You cannot read or mask a value that was never loaded. A per-user display transform, for example, would look like:

Display Name =
VAR Lvl = LOOKUPVALUE( Access[Level], Access[Upn], USERPRINCIPALNAME() )
RETURN
SWITCH( TRUE(),
Lvl = "Full", [Name],
LEFT([Name],2) & "*****" & RIGHT([Name],2)
)

There is no DAX function that returns the active RLS/OLS role; you branch on identity instead (USERPRINCIPALNAME() mapped through a lookup table, or a CUSTOMDATA() token).

In-model masking is presentation-only, not compliance-grade

A calculated column that masks a value must first read the real value, so the plaintext is present in the model. OLS does not help: the column evaluates under the user's roles, so hiding [Name] with OLS also stops the calculated column from reading it — no masking. RLS returns BLANK (it hides whole rows, it does not mask characters). A hidden source column is still queryable through Analyze in Excel or a DAX EVALUATE. For genuine PII protection, mask upstream (in the warehouse / Gold layer, e.g. a ready-made Name_Masked column) and protect the full [Name] with RLS or simply do not load it into the model. In line with our PII rules, only present a user-context masking column alongside RLS/upstream protection — never as anonymization on its own.

OrderByColumn

- Table:
Name: CallStatus
SourceTable: D_CallStatus
TableType: Dim
Columns:
- SourceColumn: CallGrouping
Type: varchar(50)
- SourceColumn: PhoneStatus
Type: varchar(50)
OrderByColumn: Call Grouping
- SourceColumn: IsActive
Type: bit
OrderByColumn: Call Grouping
  • OrderByColumn: Identifies the column used for sorting data within the table.