How can I optimize this DAX query with SUMMARIZECOLUMNS
14:08 21 Nov 2025

I’m working on a Power BI model (Premium capacity) with a large fact table (~131M rows).

I have a DAX query (used for a paginated report) that:

  1. Builds an “actual” dataset (A) from the fact table via SUMMARIZECOLUMNS
  2. Builds a “theoretical/expected” dataset (B) via another SUMMARIZECOLUMNS
  3. Adds several measures to each using ADDCOLUMNS
  4. Combines both datasets with a full-outer-join pattern using:
  • NATURALLEFTOUTERJOIN(A, B)

  • NATURALLEFTOUTERJOIN(B, A)

  • DISTINCT( UNION( JoinedFromA, JoinedFromB ) )

The query consistently fails in the Power BI Service with a Resource Governance / memory error.

I tried some optimization but still have the same issue :

  EVALUATE
//------------------------------------
// DATASET A (View A)
//------------------------------------
VAR A_Base =
    CALCULATETABLE (
        SUMMARIZECOLUMNS (
            'DimDate'[DateKey],
            'DimDate'[Period],
            'DimAttribute1'[CategoryA],
            'DimAttribute2'[CategoryB],
            'DimAttribute3'[CategoryC],
            'DimEntityA'[EntityKey],
            'DimEntityB'[ExternalKey],
            'DimLocationA'[LocationCode],
            'DimLocationA'[DirectionCode],
            'DimGroupA'[GroupLabel],
            'DimEntityA'[EntityName],
            'DimAttribute1'[City],
            'DimAttribute1'[PostalCode],
            'DimStatus'[StatusLabel],
            'DimHierarchyA'[HierarchyLevel],
            'DimEntityA'[EntityType],
            'DimEntityA'[EntitySubtype],
            "MetricA_Main", [MetricA_Main]
        ),
            'DimDate'[Period]          = "2024-09",
            'DimAttribute4'[CategoryA] = "All",
            DimTypeOrder[OrderCode]          IN { 11, 32}
    )

VAR A_WithMetrics =
    ADDCOLUMNS (
        A_Base,
        "MetricA_Flag1",        [MetricA_Flag1],
        "MetricA_Flag2",        [MetricA_Flag2],
        "MetricA_Flag3",        [MetricA_Flag3],
        "MetricA_Flag4",        [MetricA_Flag4],
        "MetricA_FlagAM",       [MetricA_FlagAM],
        "MetricA_FlagPM",       [MetricA_FlagPM],
        "MetricA_Status",       [MetricA_Status],

        "MetricA_Value1",       [MetricA_Value1],
        "MetricA_Value2",       [MetricA_Value2],
        "MetricA_Value3",       [MetricA_Value3],
        "MetricA_Value4",       [MetricA_Value4]
    )

VAR A_Filtered =
    FILTER ( A_WithMetrics, NOT ISBLANK ( [MetricA_Main] ) )

VAR A_View =
    SELECTCOLUMNS (
        A_Filtered,
        "Date",                 FORMAT ( 'DimDate'[DateKey], "DD-MM-YYYY" ),
        "Period",               'DimDate'[Period],
        "CategoryA",            'DimAttribute1'[CategoryA] & "",
        "CategoryB",            'DimAttribute2'[CategoryB],
        "CategoryC",            'DimAttribute3'[CategoryC],
        "EntityKey",            'DimEntityA'[EntityKey] & "",
        "ExternalKey",          'DimEntityB'[ExternalKey] & "",
        "Location",             'DimLocationA'[LocationCode] & "",
        "Direction",            'DimLocationA'[DirectionCode] & "",
        "GroupLabel",           'DimGroupA'[GroupLabel] & "",
        "EntityName",           'DimEntityA'[EntityName] & "",
        "City",                 'DimAttribute1'[City] & "",
        "PostalCode",           'DimAttribute1'[PostalCode] & "",
        "StatusLabel",          'DimStatus'[StatusLabel],
        "Hierarchy",            'DimHierarchyA'[HierarchyLevel] & "",
        "EntityType",           'DimEntityA'[EntityType] & "",
        "EntitySubtype",        'DimEntityA'[EntitySubtype] & "",

        "Metric_Value1",        [MetricA_Value1],
        "Metric_Value2",        [MetricA_Value2],
        "Metric_Value3",        [MetricA_Value3],
        "Metric_Value4",        [MetricA_Value4],

        "Flag1",                [MetricA_Flag1],
        "Flag2",                [MetricA_Flag2],
        "Flag3",                [MetricA_Flag3],
        "Flag4",                [MetricA_Flag4],
        "Flag_AM",              [MetricA_FlagAM],
        "Flag_PM",              [MetricA_FlagPM],
        "StatusFlag",           [MetricA_Status]
    )

//------------------------------------
// DATASET B (View B)
//------------------------------------
VAR B_Base =
    CALCULATETABLE (
        SUMMARIZECOLUMNS (
            'DimDate'[DateKey],
            'DimDate'[Period],
            'DimAttribute4'[CategoryA],
            'DimAttribute2'[CategoryB],
            'DimAttribute3'[CategoryC],
            'DimEntityC'[EntityKey],
            'DimEntityD'[ExternalKey],
            'DimLocationB'[LocationCode],
            'DimLocationB'[DirectionCode],
            'DimGroupB'[GroupLabel],
            'DimEntityC'[EntityName],
            'DimAttribute4'[City],
            'DimAttribute4'[PostalCode],
            'DimStatus'[StatusLabel],
            'DimHierarchyB'[HierarchyLevel],
            'DimEntityC'[EntityType],
            'DimEntityC'[EntitySubtype],

            "MetricB_Main", [MetricB_Main],
            "MetricB_Alt",  [MetricB_Alt]
        ),
            'DimDate'[Period]        = "2024-09",,
            'DimAttribute4'[CategoryA] = "All"
    )

VAR B_WithMetrics =
    ADDCOLUMNS (
        B_Base,
        "MetricB_Flag1",           [MetricB_Flag1],
        "MetricB_Flag2",           [MetricB_Flag2],
        "MetricB_Flag3",           [MetricB_Flag3],
        "MetricB_Flag4",           [MetricB_Flag4],
        "MetricB_FlagAM",          [MetricB_FlagAM],
        "MetricB_FlagPM",          [MetricB_FlagPM],
        "MetricB_Status",          [MetricB_Status],

        "MetricB_Alt1",            [MetricB_Alt1],
        "MetricB_Alt2",            [MetricB_Alt2]
    )

VAR B_Filtered =
    FILTER (
        B_WithMetrics,
            NOT ( ISBLANK ( [MetricB_Main] ) && ISBLANK ( [MetricB_Alt] ) )
    )

VAR B_View =
    SELECTCOLUMNS (
        B_Filtered,
        "Date",                 FORMAT ( 'DimDate'[DateKey], "DD-MM-YYYY" ),
        "Period",               'DimDate'[Period],
        "CategoryA",            'DimAttribute4'[CategoryA] & "",
        "CategoryB",            'DimAttribute2'[CategoryB],
        "CategoryC",            'DimAttribute3'[CategoryC],
        "EntityKey",            'DimEntityC'[EntityKey] & "",
        "ExternalKey",          'DimEntityD'[ExternalKey] & "",
        "Location",             'DimLocationB'[LocationCode] & "",
        "Direction",            'DimLocationB'[DirectionCode] & "",
        "GroupLabel",           'DimGroupB'[GroupLabel] & "",
        "EntityName",           'DimEntityC'[EntityName] & "",
        "City",                 'DimAttribute4'[City] & "",
        "PostalCode",           'DimAttribute4'[PostalCode] & "",
        "StatusLabel",          'DimStatus'[StatusLabel],
        "Hierarchy",            'DimHierarchyB'[HierarchyLevel] & "",
        "EntityType",           'DimEntityC'[EntityType] & "",
        "EntitySubtype",        'DimEntityC'[EntitySubtype] & "",

        "MetricB_Main",         [MetricB_Main],
        "MetricB_Alt",          [MetricB_Alt],
        "MetricB_Alt1",         [MetricB_Alt1],
        "MetricB_Alt2",         [MetricB_Alt2],

        "Flag1",                [MetricB_Flag1],
        "Flag2",                [MetricB_Flag2],
        "Flag3",                [MetricB_Flag3],
        "Flag4",                [MetricB_Flag4],
        "Flag_AM",              [MetricB_FlagAM],
        "Flag_PM",              [MetricB_FlagPM],
        "StatusFlag",           [MetricB_Status]
    )

//------------------------------------
// FULL OUTER JOIN
//------------------------------------
VAR JoinA =
    SELECTCOLUMNS (
        NATURALLEFTOUTERJOIN ( A_View, B_View ),
        "Date",              [Date],
        "Period",            [Period],
        "CategoryA",         [CategoryA],
        "CategoryB",         [CategoryB],
        "CategoryC",         [CategoryC],
        "EntityKey",         [EntityKey],
        "ExternalKey",       [ExternalKey],
        "Location",          [Location],
        "Direction",         [Direction],
        "GroupLabel",        [GroupLabel],
        "EntityName",        [EntityName],
        "City",              [City],
        "PostalCode",        [PostalCode],
        "StatusLabel",       [StatusLabel],
        "Hierarchy",         [Hierarchy],
        "EntityType",        [EntityType],
        "EntitySubtype",     [EntitySubtype],

        "MetricA_Main",      [MetricA_Main],
        "MetricA_Value1",    [MetricA_Value1],
        "MetricA_Value2",    [MetricA_Value2],
        "MetricA_Value3",    [MetricA_Value3],
        "MetricA_Value4",    [MetricA_Value4],

        "MetricB_Main",      [MetricB_Main],
        "MetricB_Alt",       [MetricB_Alt],
        "MetricB_Alt1",      [MetricB_Alt1],
        "MetricB_Alt2",      [MetricB_Alt2],

        "Flag1",             [Flag1],
        "Flag2",             [Flag2],
        "Flag3",             [Flag3],
        "Flag4",             [Flag4],
        "Flag_AM",           [Flag_AM],
        "Flag_PM",           [Flag_PM],
        "StatusFlag",        [StatusFlag]
    )

VAR JoinB =
    SELECTCOLUMNS (
        NATURALLEFTOUTERJOIN ( B_View, A_View ),
        "Date",              [Date],
        "Period",            [Period],
        "CategoryA",         [CategoryA],
        "CategoryB",         [CategoryB],
        "CategoryC",         [CategoryC],
        "EntityKey",         [EntityKey],
        "ExternalKey",       [ExternalKey],
        "Location",          [Location],
        "Direction",         [Direction],
        "GroupLabel",        [GroupLabel],
        "EntityName",        [EntityName],
        "City",              [City],
        "PostalCode",        [PostalCode],
        "StatusLabel",       [StatusLabel],
        "Hierarchy",         [Hierarchy],
        "EntityType",        [EntityType],
        "EntitySubtype",     [EntitySubtype],

        "MetricA_Main",      [MetricA_Main],
        "MetricA_Value1",    [MetricA_Value1],
        "MetricA_Value2",    [MetricA_Value2],
        "MetricA_Value3",    [MetricA_Value3],
        "MetricA_Value4",    [MetricA_Value4],

        "MetricB_Main",      [MetricB_Main],
        "MetricB_Alt",       [MetricB_Alt],
        "MetricB_Alt1",      [MetricB_Alt1],
        "MetricB_Alt2",      [MetricB_Alt2],

        "Flag1",             [Flag1],
        "Flag2",             [Flag2],
        "Flag3",             [Flag3],
        "Flag4",             [Flag4],
        "Flag_AM",           [Flag_AM],
        "Flag_PM",           [Flag_PM],
        "StatusFlag",        [StatusFlag]
    )

RETURN
    DISTINCT ( UNION ( JoinA, JoinB ) )

Any help, best practices, or alternative approaches for optimizing this type of DAX query over a large fact table would be greatly appreciated.

powerbi dax powerquery