共用方式為


使用資料集欄位集合參考 (報表產生器 3.0 和 SSRS)

報表中的每一個資料集都包含一個 Fields 集合,Fields 集合是資料集查詢所指定的欄位加上您建立之任何其他導出欄位的集合。當您建立資料集之後,欄位集合會出現在 [報表資料] 窗格中。

運算式中的簡單欄位參考會在設計介面上顯示為簡單運算式。例如,當您從 [報表資料] 窗格將 Sales 欄位拖曳到設計介面上的資料表資料格時,便會顯示 [Sales]。這樣代表在文字方塊 Value 屬性上設定的基礎運算式 =Fields!Sales.Value。當報表執行時,報表處理器會評估此運算式,並將資料來源中的實際資料顯示在資料表資料格內的文字方塊中。如需詳細資訊,請參閱<運算式 (報表產生器 3.0 和 SSRS)>和<使用報表資料集中的欄位 (報表產生器 3.0 和 SSRS)>。

[!附註]

您可以在 Business Intelligence Development Studio 中的報表產生器 3.0 及報表設計師中建立及修改報表定義 (.rdl)。每一個撰寫環境都提供了不同的方式讓您建立、開啟,以及儲存報表和相關的項目。如需詳細資訊,請參閱在報表設計師及報表產生器 3.0 (SSRS) 中設計報表,位於 microsoft.com 網站上。

顯示資料集的欄位集合

若要顯示欄位集合的個別值,請將每一個欄位拖曳到資料表詳細資料列,並執行報表。資料表之詳細資料列或清單資料區中的參考會顯示資料集中每一個資料列的值。

若要顯示欄位的摘要值,請將每一個數值欄位拖曳到矩陣的資料區。總計資料列的預設彙總函式為 Sum,例如 =Sum(Fields!Sales.Value)。您可以變更預設函數,以便能夠計算不同的總計。如需詳細資訊,請參閱<彙總函式參考 (報表產生器 3.0 和 SSRS)>。

若要將欄位集合的摘要值直接顯示在設計介面上的文字方塊中 (不屬於資料區的一部分),您必須將資料集名稱指定為彙總函式的範圍。例如,如果是名為 SalesData 的資料集,下列運算式會針對 Sales: =Sum(Fields!Sales,"SalesData") 欄位指定所有值的總計。

當您使用 [運算式] 對話方塊來定義簡單欄位參考時,可以在 [類別目錄] 窗格中選取 Fields 集合,並在 [欄位] 窗格中查看可用欄位的清單。每一個欄位都有幾個屬性,包括 ValueIsMissing。其餘的屬性會預先定義在擴充欄位屬性上,這些屬性可能可以提供給資料集使用 (視資料來源類型而定)。

偵測資料集欄位的 Null

若要偵測 Null 的欄位值 (Visual Basic 中為 Nothing),您可以使用 IsNothing 函數。當下列運算式放置於資料表詳細資料列的文字方塊內時,運算式會測試 MiddleName 欄位,並在該值為 Null 時以 "No Middle Name" 文字替代,而當該值不是 Null 時則為欄位值本身:

=IIF(IsNothing(Fields!MiddleName.Value),"No Middle Name",Fields!MiddleName.Value)

在執行階段偵測動態查詢的遺漏欄位

Fields 集合內的項目預設會有兩個屬性:ValueIsMissingIsMissing 屬性會指出在設計階段針對資料集所定義的欄位是否包含在執行階段擷取的欄位中。例如,您的查詢可能會呼叫預存程序 (其中的結果集會因為輸入參數而不同),或者您的查詢可能會是 SELECT * FROM <table> (變更資料表定義的地方)。

[!附註]

IsMissing 會偵測設計階段與執行階段之間對於任何資料來源類型的資料集結構描述變更。IsMissing 不能用來偵測多維度 Cube 中的空白成員,而且不會與 EMPTY 和 NON EMPTY 的 MDX 查詢語言概念產生關聯。

您可以在自訂程式碼中測試 IsMissing 屬性,以判斷結果集中是否有欄位存在。您不能搭配 Visual Basic 函數呼叫 (如 IIF 或 SWITCH) 使用運算式來測試欄位是否存在,因為 Visual Basic 會評估此函數呼叫中的所有參數,而當評估遺漏項目的參考時,這樣的處理會產生錯誤。

控制遺漏欄位之動態資料行可見性的範例

若要設定一個運算式來控制在資料集中顯示欄位之資料行的可見性,您必須定義一個自訂程式碼函數,根據欄位是否遺漏來傳回布林值。例如,如果此欄位遺漏,下列自訂程式碼函數會傳回 True,如果此欄位存在則傳回 False。

Public Function IsFieldMissing(field as Field) as Boolean
 If (field.IsMissing) Then
 Return True
  Else 
  Return False
 End If
End Function

若要使用此函數來控制資料行的可見性,請將此資料行的 Hidden 屬性設定為以下運算式:

=Code.IsFieldMissing(Fields!FieldName)

當欄位不存在時,便會隱藏此資料行。

控制遺漏欄位之文字方塊值的範例

若要使用您撰寫的文字來取代遺漏欄位的值,您必須撰寫自訂程式碼,使其在欄位遺漏時可傳回用來取代欄位值的文字。例如,下列自訂程式碼函數會在欄位存在時傳回欄位的值,而當欄位不存在時,則傳回您指定為第二個參數的訊息:

Public Function IsFieldMissingThenString(field as Field, strMessage as String) as String
 If (field.IsMissing) Then
  Return strMessage
 Else 
  Return field.Value
  End If
End Function

若要在文字方塊中使用這個函數,請將下列運算式加入到 Value 屬性:

=Code.IsFieldMissingThenString(Fields!FieldName,"Missing")

此文字方塊會顯示欄位值或是您指定的文字。

使用擴充欄位屬性

擴充欄位屬性是資料處理延伸模組在欄位上所定義的其他屬性,此模組是由資料集的資料來源類型所決定。擴充欄位屬性是預先定義的,或是資料來源類型所特有的。如需詳細資訊,請參閱<Analysis Services 資料庫的擴充欄位屬性 (SSRS)>。

如果您指定了該欄位不支援的屬性,則運算式會評估為 null (Visual Basic 中為 Nothing)。如果資料提供者不支援擴充欄位屬性,或是執行查詢時找不到欄位,則當屬性類型為 String 和 Object 時,此屬性值會是 null (Visual Basic 中則為 Nothing);當屬性類型為 Integer 時,此屬性值為零 (0)。資料處理延伸模組可藉由最佳化包含這個語法的查詢來利用預先定義的屬性。