計算群組

適用於:SQL Server 2019 和更新版本的 Analysis Services Azure Analysis Services Fabric/Power BI Premium

計算群組可藉由將常見量值運算式分組為「計算項目」 來大幅減少多餘量值的數目。 在 1500 和更高 相容性層級的表格式模型中,支援計算群組。

優點

計算群組解決複雜模型中的問題,其中可能會使用相同的計算來增加備援量值,最常見的是時間智能計算。 例如,銷售分析師想要依月到日 (MTD) 、季對日 (QTD) 、年度 (YTD) 、上一年 (PY) 的年度訂單等,檢視銷售額和訂單。 數據模型工具必須為每個計算建立個別量值,這可能會導致數十個量值。 對於使用者而言,這可能表示必須排序和許多量值一樣,並個別將它們套用至其報表。

讓我們先看看計算群組如何出現在Power BI等報表工具中的使用者。 接著,我們將探討組成計算群組的內容,以及如何在模型中建立它們。

計算群組會作為具有單一資料行的資料表,顯示在報告用戶端中。 數據行不像一般數據行或維度,而是代表一或多個可重複使用的計算,或可以套用至任何已新增至視覺效果之 [值] 篩選的量值計算 專案

在下列動畫中,使用者正在分析 2012 年和 2013 年的銷售數據。 套用計算群組之前,常見的基底量值 Sales 會計算每個月的總銷售額總和。 接著,使用者想要套用時間智能計算,以取得月份到日期、季對日、年度到日期等的銷售總計。 如果沒有計算群組,用戶就必須選取個別的時間智慧量值。

使用計算群組時,在此範例中名為 Time Intelligence,當使用者將 [時間計算 ] 專案拖曳至 [數據 行] 篩選 區域時,每個計算專案都會顯示為個別的數據行。 每個數據列的值都是從基底量值 Sales 計算而來。

Power BI 中套用的計算群組

計算群組會使用 明確的 DAX量值。 在此範例中, Sales 是已在模型中建立的明確量值。 計算群組不適用於隱含 DAX 量值。 例如,當使用者將數據行拖曳至視覺效果以檢視匯總值時,會在Power BI隱含量值中建立,而不需建立明確的量值。 目前,Power BI 會針對以內嵌 DAX 計算撰寫的隱含量值產生 DAX,這表示隱含量值無法與計算群組搭配使用。 已引進 Tabular 物件模型 (TOM) 的表格式物件模型中可見的新模型屬性 ,「不鼓勵」ImplicitMeasures。 目前,若要建立計算群組,此屬性必須設定為 true。 當設定為 true 時,Live Connect 模式中的 Power BI Desktop 會停用隱含量值的建立。

計算群組也支援多維度數據表達式 (MDX) 查詢。 這表示,使用 MDX 查詢表格式數據模型的 Microsoft Excel 使用者可以充分利用工作表數據透視表和圖表中的計算群組。

運作方式

既然您已了解計算群組如何讓使用者受益,讓我們看看如何建立時間智慧計算群組範例。

在進入詳細數據之前,讓我們特別針對計算群組引進一些新的 DAX 函式:

SELECTEDMEASURE - 運算式用於計算專案,以參考目前在內容中的量值。 在此範例中,Sales 量值。

SELECTEDMEASURENAME - 運算式用於計算專案,以依名稱判斷內容中的量值。

ISSELECTEDMEASURE - 用於計算項目的表達式,以判斷內容中的量值是在量值清單中指定。

SELECTEDMEASUREFORMATSTRING - 表達式用於計算專案,以擷取內容中量值的格式字串。

時間智慧範例

數據表名稱 - 時間智慧
數據行名稱 - 時間計算
優先順序 - 20

時間智慧計算專案

Current

SELECTEDMEASURE()

Mtd

CALCULATE(SELECTEDMEASURE(), DATESMTD(DimDate[Date]))

QTD

CALCULATE(SELECTEDMEASURE(), DATESQTD(DimDate[Date]))

YTD

CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))

PY

CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR(DimDate[Date]))

PY MTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "MTD"
)

PY QTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "QTD"
)

PY YTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "YTD"
)

YOY

SELECTEDMEASURE() -
CALCULATE(
    SELECTEDMEASURE(),
    'Time Intelligence'[Time Calculation] = "PY"
)

YOY%

DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="YOY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="PY"
    )
)

若要測試此計算群組,請在 SSMS 或開放原始碼 DAX Studio 中執行 DAX 查詢。 注意:此查詢範例會省略 YOY 和 YOY%。

時間智能查詢

EVALUATE
CALCULATETABLE (
    SUMMARIZECOLUMNS (
        DimDate[CalendarYear],
        DimDate[EnglishMonthName],
        "Current", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "Current" ),
        "QTD",     CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "QTD" ),
        "YTD",     CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "YTD" ),
        "PY",      CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY" ),
        "PY QTD",  CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY QTD" ),
        "PY YTD",  CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY YTD" )
    ),
    DimDate[CalendarYear] IN { 2012, 2013 }
)

時間智慧查詢傳回

傳回數據表會顯示套用之每個計算項目的計算。 例如,請參閱 2012 年 3 月的 QTD 是 2012 年 1 月、2 月和 3 月的總和。

時間智慧查詢傳回

動態格式字串

具有計算群組的動態格式字串允許將格式字串的條件式應用程式套用至量值,而不需要強制它們傳回字串。

表格式模型支援使用 DAX 的 FORMAT 函式來動態格式化量值。 不過,FORMAT 函式有傳回字串的缺點,強制將數值做為字串傳回的量值。 這可能會有一些限制,例如無法根據數值使用大部分的PowerBI視覺效果,例如圖表。

在 Power BI 中,量值的動態格式字串也允許將格式字串的條件套用到特定量值,而不強制它們傳回字串,而不要使用計算群組。 若要深入瞭解,請參閱 量值的動態格式字串

時間智慧的動態格式字串

如果我們查看上述的時間智慧範例, YOY% 以外的所有計算專案都應該使用內容中目前量值的格式。 例如,在 Sales 基底量值上計算的 YTD 應該是貨幣。 如果這是 Orders 基底量值之類的計算群組,則格式會是數值。 不過,不論基底量值的格式為何,YOY%都應該是百分比。

針對 YOY%,我們可以將格式字串運算式屬性設定為 0.00%;-0.00%,來覆寫格式字串;0.00%。 若要深入瞭解字串表達式屬性的格式,請參閱 MDX 單元格屬性 - FORMAT STRING 內容

在此 Power BI 矩陣視覺效果中,您會看到 Sales Current/YOYOrders Current/YOY 會保留其各自的基底量值格式字符串。 不過,銷售 YOY%訂單 YOY% 會覆寫格式字串以使用百分比格式。

矩陣視覺效果中的時間智慧

貨幣轉換的動態格式字串

動態格式字串提供簡單的貨幣轉換。 請考慮下列 Adventure Works 數據模型。 它是針對轉換類型所定義的一對多貨幣轉換進行模型化。

表格式模型中的貨幣率

FormatString 數據行會新增至 DimCurrency 數據表,並填入個別貨幣的格式字串。

格式化字串數據行

在此範例中,接著會將下列計算群組定義為:

貨幣轉換範例

數據表名稱 - 貨幣轉換
數據列名稱 - 轉換計算
優先順序 - 5

貨幣轉換的計算專案

無轉換

SELECTEDMEASURE()

已轉換貨幣

IF(
    //Check one currency in context & not US Dollar, which is the pivot currency:
    SELECTEDVALUE( DimCurrency[CurrencyName], "US Dollar" ) = "US Dollar",
    SELECTEDMEASURE(),
    SUMX(
        VALUES(DimDate[Date]),
        CALCULATE( DIVIDE( SELECTEDMEASURE(), MAX(FactCurrencyRate[EndOfDayRate]) ) )
    )
)

格式化字串表示式

SELECTEDVALUE(
    DimCurrency[FormatString],
    SELECTEDMEASUREFORMATSTRING()
)

注意

計算群組的選取表達式目前為預覽狀態,可用來在計算群組上實作自動貨幣轉換,而不需要有兩個不同的計算專案。

格式字串表示式必須傳回純量字串。 它會使用新的 SELECTEDMEASUREFORMATSTRING 函數,在篩選內容中有多個貨幣時還原為基底量值格式字串。

下列動畫顯示報表中 Sales 量值的動態格式貨幣轉換。

套用貨幣轉換動態格式字串

選取表達式 (預覽)

選取表達式是針對計算群組定義的選擇性屬性。 選取表示式有兩種類型:

  • multipleOrEmptySelectionExpression。 選取多個計算專案、已選取非現有的計算專案,或已選取衝突的選取專案時,就會套用此選取表達式。
  • noSelectionExpression。 未篩選計算群組時,會套用此選取表達式。

這兩個選取表達式也有 formatStringDefinition 動態格式字串 表達式。

總而言之,您可以在計算群組上定義下列專案:

...
"calculationGroup": {
  "multipleOrEmptySelectionExpression": {
    "expression": "",
    "formatStringDefinition": {...}
  },
  "noSelectionExpression": {
    "expression": "",
    "formatStringDefinition": {...}
  }
...
}

注意

如果指定,這些表達式只會套用至提及的特定情況。 單一計算項目的選取專案不會受到這些表達式的影響。

如果未指定,以下是這些表達式及其預設行為的概觀:

選取類型 未定義選取範圍表示式 (預設) 已定義的選取範圍表達式
單一選取項目 已套用選取範圍 已套用選取範圍
多重選取 未篩選計算群組 傳回評估 multipleOrEmptySelectionExpression 的結果
空白選取範圍 未篩選計算群組 傳回評估 multipleOrEmptySelectionExpression 的結果
沒有選取項目 未篩選計算群組 傳回評估 noSelectionExpression 的結果

多重或空白選取

如果建立相同計算群組上的多個選取專案,則計算群組會評估並傳回已定義之 multipleOrEmptySelectionExpression 的結果。 如果尚未定義此表示式,計算群組將會傳回下列結果:

SELECTEDMEASURE()

例如,讓我們看看名為 MyCalcGroup 的計算群組,其具有設定為 multipleOrEmptySelectionExpression 的計算群組,如下所示:

IF (
ISFILTERED ( 'MyCalcGroup' ),
    "Filters: " 
         & CONCATENATEX ( 
  	            FILTERS ( 'MyCalcGroup'[Name] ),
            'MyCalcGroup'[Name], 
            ", "
     	   )
)

現在,假設在計算群組上選取下列專案:

EVALUATE
{
    CALCULATE (
        [MyMeasure],
        'MyCalcGroup'[Name] = "item1" || 'MyCalcGroup'[Name] = "item2"
    )
}

在這裡,我們會在計算群組上選取兩個專案“item1” 和 “item2”。 這是多個選取範圍,因此會評估 multipleOrEmptySelectionExpression,並傳回下列結果:「 篩選:item1,item2」

接下來,在計算群組上選取下列專案:

EVALUATE
{
    CALCULATE (
        [MyMeasure],
        'MyCalcGroup'[Name] = "item4" -- item4 does not exists
    )
}

這是空白選取範圍的範例,因為此計算群組上不存在 「item4」。。 因此,會評估 multipleOrEmptySelectionExpression,並傳回下列結果:「 篩選:」

沒有選取項目

如果計算群組尚未篩選,將會套用計算群組上的 noSelectionExpression。 這主要是用來執行默認動作,而不需要使用者採取動作,同時仍為使用者提供彈性來覆寫默認動作。 例如,讓我們看看以美元作為中央樞紐貨幣的自動貨幣轉換。

我們可以使用下列 noSelectionExpression 來設定計算群組:

IF (
    //Check one currency in context & not US Dollar, which is the pivot currency:
    SELECTEDVALUE (
        DimCurrency[CurrencyName],
        "US Dollar"
    ) = "US Dollar",
    SELECTEDMEASURE (),
    SUMX (
        VALUES ( DimDate[DateKey] ),
        CALCULATE (
            DIVIDE ( SELECTEDMEASURE (), MAX ( FactCurrencyRate[EndOfDayRate] ) )
        )
    )
)

我們也會為此表達式設定 formatStringDefinition:

SELECTEDVALUE(
  DimCurrency[FormatString],
  SELECTEDMEASUREFORMATSTRING()
)

現在,如果未選取任何貨幣,則會視需要自動轉換成樞紐貨幣 (美元) 。 除此之外,您仍然可以挑選另一個貨幣來轉換成該貨幣,而不需要切換計算項目,因為不需要 noSelectionExpression。

優先順序

優先順序是針對計算群組定義的屬性。 它會指定計算群組在計算專案中使用 SELECTEDMEASURE () 時,會與基礎量值結合的順序。

優先順序範例

讓我們來看一個簡單的範例。 此模型具有具有指定值為10的量值,以及兩個計算群組,每一個計算專案各有一個。 我們將這兩個計算群組的計算專案套用至量值。 這就是我們設定的方式:

'Measure group'[Measure] = 10

第一個計算群組是 'Calc Group 1 (Precedence 100)' ,而計算項目為 'Calc item (Plus 2)'

'Calc Group 1 (Precedence 100)'[Calc item (Plus 2)] = SELECTEDMEASURE() + 2

第二個計算群組是 'Calc Group 2 (Precedence 200)' ,而計算項目為 'Calc item (Times 2)'

'Calc Group 2 (Precedence 200)'[Calc item (Times 2)] = SELECTEDMEASURE() * 2

您可以看到計算群組 1 的優先順序值為 100,而計算群組 2 的優先順序值為 200。

使用 SQL Server Management Studio (SSMS) 或外部工具搭配 XMLA 讀寫功能,例如開放原始碼表格式 編輯器,您可以使用 XMLA 腳本來建立計算群組並設定優先順序值。 我們在這裡新增 "Calc group 1 (Precedence 100)"

{
  "createOrReplace": {
    "object": {
      "database": "CHANGE TO YOUR DATASET NAME",
      "table": "Calc group 1 (Precedence 100)"
    },
    "table": {
      "name": "Calc group 1 (Precedence 100)",
      "calculationGroup": {
        "precedence": 100,
        "calculationItems": [
          {
            "name": "Calc item (Plus 2)",
            "expression": "SELECTEDMEASURE() + 2",
          }
        ]
      },
      "columns": [
        {
          "name": "Calc group 1 (Precedence 100)",
          "dataType": "string",
          "sourceColumn": "Name",
          "sortByColumn": "Ordinal",
          "summarizeBy": "none",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        },
        {
          "name": "Ordinal",
          "dataType": "int64",
          "isHidden": true,
          "sourceColumn": "Ordinal",
          "summarizeBy": "sum",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "mode": "import",
          "source": {
            "type": "calculationGroup"
          }
        }
      ]
    }
  }
}

此文稿會新增 "Calc group 2 (Precedence 200)"

{
  "createOrReplace": {
    "object": {
      "database": "CHANGE TO YOUR DATASET NAME",
      "table": "Calc group 2 (Precedence 200)"
    },
    "table": {
      "name": "Calc group 2 (Precedence 200)",
      "calculationGroup": {
        "precedence": 200,
        "calculationItems": [
          {
            "name": "Calc item (Times 2)",
            "expression": "SELECTEDMEASURE() * 2"
          }
        ]
      },
      "columns": [
        {
          "name": "Calc group 2 (Precedence 200)",
          "dataType": "string",
          "sourceColumn": "Name",
          "sortByColumn": "Ordinal",
          "summarizeBy": "none",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        },
        {
          "name": "Ordinal",
          "dataType": "int64",
          "isHidden": true,
          "sourceColumn": "Ordinal",
          "summarizeBy": "sum",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "mode": "import",
          "source": {
            "type": "calculationGroup"
          }
        }
      ]
    }
  }
}

在 Power BI Desktop 中,我們有一個卡片視覺效果,其中顯示報表檢視中每個計算群組的量值和交叉分析篩選器:

量值群組個別的表達式。

選取這兩個交叉分析篩選器時,我們需要結合 DAX 表達式。 若要這樣做,我們會從優先順序最高的計算專案 200 開始,然後將 SELECTEDMEASURE () 自變數取代為下一個最高 100。

因此,我們的最高優先順序計算專案 DAX 運算式為:

SELECTEDMEASURE() * 2 

而我們的第二個最高優先順序計算專案 DAX 運算式為:

SELECTEDMEASURE() + 2 

現在會藉由將最高優先順序計算專案的 SELECTEDMEASURE () 部分取代為下一個最高優先順序的計算項目來合併,如下所示:

( SELECTEDMEASURE() + 2 ) * 2

然後,如果有更多計算項目,我們會繼續,直到到達基礎量值為止。 此模型中只有兩個計算群組,因此我們現在會將 SELECTEDMEASURE () 取代為量值本身,如下所示:

( ( [Measure] ) + 2 ) * 2

如同我們的 Measure = 10,這與:

( ( 10 ) + 2 ) * 2

當沒有其他 SELECTEDMEASURE () 自變數時,會評估合併的 DAX 運算式:

( ( 10 ) + 2 ) * 2 = 24

在 Power BI Desktop 中,當這兩個計算群組都套用交叉分析篩選器時,量值輸出看起來會像這樣:

量值群組合並表達式。

但請記住,組合是巢狀的,因此輸出不會是 10 + 2 * 2 = 14,如您在這裡所見:

量值群組巢狀表達式。

針對簡單的轉換,評估會從較低到較高的優先順序。 例如,10 已新增 2,然後乘以 2。 在 DAX 中,有類似 CALCULATE 的函式會將篩選或內容變更套用至內部表達式。 在此情況下,較高的優先順序會改變較低的優先順序表達式。

優先順序也會決定哪些動態格式字串會套用至每個量值的合併 DAX 表達式。 最高優先順序的計算群組動態格式字串是唯一套用的字串。 如果量值本身具有動態格式字串,則會被視為模型中任何計算群組的優先順序較低。

具有平均值的優先順序範例

讓我們看看另一個使用相同模型的範例,如本文稍早所述的時間智慧範例所示。 但這次,我們也會新增 Averages 計算群組。 Averages 計算群組包含與傳統時間智慧無關的平均計算,因為它們不會變更日期篩選內容, 它們只會在其中套用平均計算。

在此範例中,會定義每日平均計算。 例如每日平均油油的計算,在油與油應用程式中很常見。 其他常見的商務範例包括零售商店銷售平均。

雖然這類計算是在時間智慧計算中獨立計算,但可能需要結合這些計算。 例如,使用者可能會想要查看每日 YTD 的油筒,以檢視從年份開始到目前日期的每日油率。 在此案例中,應該為計算專案設定優先順序。

我們的假設如下:

數據表名稱為 Averages
數據行名稱為 [平均計算]。
優先順序為 10

Averages 的計算專案

無平均

SELECTEDMEASURE()

每日平均

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

以下是 DAX 查詢和傳回數據表的範例:

平均查詢

EVALUATE
    CALCULATETABLE (
        SUMMARIZECOLUMNS (
        DimDate[CalendarYear],
        DimDate[EnglishMonthName],
        "Sales", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "Current",
            'Averages'[Average Calculation] = "No Average"
        ),
        "YTD", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "YTD",
            'Averages'[Average Calculation] = "No Average"
        ),
        "Daily Average", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "Current",
            'Averages'[Average Calculation] = "Daily Average"
        ),
        "YTD Daily Average", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "YTD",
            'Averages'[Average Calculation] = "Daily Average"
        )
    ),
    DimDate[CalendarYear] = 2012
)

平均查詢傳回

平均查詢傳回

下表顯示如何計算 2012 年 3 月的值。

資料行名稱 計算
YTD 2012年2月,2012年1月的銷售總和
= 495,364 + 506,994 + 373,483
每日平均 2012年3月銷售額除以3月天數
= 373,483 / 31
YTD 每日平均 2012年3月的YTD除以1月、2月和 Mar中的天數
= 1,375,841 / (31 + 29 + 31)

以下是套用優先順序為 20 的 YTD 計算項目定義。

CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))

以下是每日平均,其優先順序為 10

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

由於 Time Intelligence 計算群組的優先順序高於 Averages 計算群組的優先順序,因此會盡可能廣泛套用。 YTD 每日平均計算會將 YTD 同時套用至 numerator 和分母 (每日平均計算) 的天數計數。

這相當於下列表示式:

CALCULATE(DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate)), DATESYTD(DimDate[Date]))

不是這個表示式:

DIVIDE(CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date])), COUNTROWS(DimDate)))

側邊遞歸

在上述時間智慧範例中,某些計算專案是指相同計算群組中的其他計算專案。 這稱為 側邊遞歸。 例如, YOY% 同時參考 YOYPY

DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="YOY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="PY"
    )
)

在此情況下,會個別評估這兩個表達式,因為它們使用不同的計算語句。 不支援其他類型的遞歸。

篩選內容中的單一計算專案

在我們的時間智慧範例中, PY YTD 計算專案具有單一計算運算式:

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "YTD"
)

CALCULATE () 函式的 YTD 自變數會覆寫篩選內容,以重複使用 YTD 計算專案中已定義的邏輯。 您無法在單一評估中同時套用 PY 和 YTD。 只有在計算群組中的單一計算專案位於篩選內容中時, 才會套用 計算群組。

排序

根據預設,當計算群組中的數據行放在報表中時,計算專案會依名稱依字母順序排序。 指定序數屬性,即可變更報表中出現的計算項目順序。 使用 Ordinal 屬性指定計算項目順序並不會變更 優先順序,也就是評估計算項目的順序。 它也不會變更計算項目出現在表格式模型總管中的順序。

若要指定計算項目的序數屬性,您必須將第二個數據行加入計算群組。 不同於數據類型為 Text 的預設數據行,用於排序計算專案的第二個數據行具有整數數據類型。 此數據行的唯一用途是指定計算群組中計算項目的數值順序。 由於此數據行在報表中未提供任何值,因此最好將 Hidden 屬性設定為 True。

排序的數據行

將第二個數據行新增至計算群組之後,您可以針對您想要排序的計算專案指定 Ordinal 屬性值。

Ordinal 屬性

若要深入瞭解,請參閱 訂購計算專案

建立計算群組

Visual Studio 支援使用 Analysis Services 專案 VSIX 更新 2.9.2 和更新版本的計算群組。 您也可以使用表格式模型文本語言 (TMSL) 或 開放原始碼表格式 編輯器 來建立計算群組。

使用 Visual Studio 建立計算群組

  1. 在 [表格式模型總管] 中,以滑鼠右鍵按兩下 [ 計算群組],然後按兩下 [ 新增計算群組]。 根據預設,新的計算群組具有單一數據行和單一計算專案。

  2. 使用 [屬性 ] 變更名稱,並輸入計算群組、數據行和預設計算專案的描述。

  3. 若要輸入預設計算專案的 DAX 公式運算式,請以滑鼠右鍵按兩下 ,然後按兩下 [編輯公式] 以開啟 DAX 編輯器。 輸入有效的表達式。

  4. 若要新增更多計算專案,請以滑鼠右鍵按兩下 [ 計算專案],然後按兩下[ 新增計算專案]。

排序計算專案

  1. 在 [表格式模型總管] 中,以滑鼠右鍵按兩下計算群組,然後按兩下[ 新增數據行]。

  2. 將數據行命名為序數 (或類似) ,輸入描述,然後將 Hidden 屬性設定為 True。

  3. 針對您想要排序的每個計算專案,將 Ordinal 屬性設定為正數。 例如,每個數位都是循序的,其中序數屬性為1的計算專案會先出現,第二個屬性為2,依此類歸。 默認為 -1 的計算專案不會包含在排序中,而是出現在報表中排序的專案之前。

限制

不支援計算群組數據表上定義的物件層級安全性 (OLS) 。 不過,可以在相同模型中的其他數據表上定義 OLS。 如果計算項目參考 OLS 安全物件,則會傳回泛型錯誤。

不支援數據列層級安全性 (RLS) 。 在相同模型中的數據表上定義 RLS,但不會在計算群組本身 (直接或間接) 。

計算群組不支援詳細資料列運算式

智慧型敘事 計算群組不支援Power BI中的視覺效果。

具有計算群組的模型不支援Power BI中的隱含數據行匯總。 目前,如果 DiscourageImplicitMeasures 屬性設定為 false (預設) ,則會出現匯總選項,但無法套用這些選項。 如果 DiscourageImplicitMeasures 設定為 true,則不會顯示匯總選項。

使用 LiveConnection 建立 Power BI 報表時,動態格式字串不會套用至報表層級量值。

另請參閱

表格式模型中的 DAX
DAX 參考