編頁報告中的資料集欄位集合參考 (報告產生器)
適用於: Microsoft 報表產生器 (SSRS)
Power BI Report Builder
SQL Server Data Tools 中的報表設計師
編頁報告中的每一個資料集都包含一個 [欄位] 集合。 [欄位] 集合是資料集查詢所指定的欄位加上您建立之任何其他導出欄位的集合。 當您建立資料集之後,欄位集合會出現在 [報表資料] 窗格中。
運算式中的簡單欄位參考會在設計介面上顯示為簡單運算式。 例如,當您將 Sales
欄位從 [報表資料] 窗格拖曳到設計介面上的資料表資料格時,就會顯示 [Sales]
。 此值代表在文字輸入框 [值] 屬性上設定的基礎運算式 =Fields!Sales.Value
。 當報表執行時,報表處理器會評估此運算式,並將資料來源中的實際資料顯示在資料表資料格內的文字方塊中。 如需詳細資訊,請參閱運算式 (報表產生器) 和資料集欄位集合 (報表產生器)。
注意
您可以在 Microsoft 報表產生器、Power BI 報表產生器,以及 SQL Server Data Tools 的報表設計師中,建立及修改編頁報表定義 (.rdl) 檔案。
顯示資料集的欄位集合
若要顯示欄位集合的個別值,請將每一個欄位拖曳到資料表詳細資料列,並執行報表。 資料表之詳細資料列或清單資料區中的參考會顯示資料集中每一個資料列的值。
若要顯示欄位的摘要值,請將每一個數值欄位拖曳到矩陣的資料區。 總計資料列的預設彙總函式為 Sum,例如 =Sum(Fields!Sales.Value)
。 您可以變更預設函數,以便能夠計算不同的總計。 如需詳細資訊,請參閱彙總函式參考 (報表產生器)。
若要將欄位集合的摘要值直接顯示在設計介面上的文字輸入框中 (不屬於資料區的一部分),您必須將資料集名稱指定為彙總函式的範圍。 例如,如果是名為 SalesData
的資料集,下列運算式會針對 Sales
: =Sum(Fields!Sales,"SalesData")
欄位指定所有值的總計。
當您使用 [運算式] 對話方塊來定義簡單欄位參考時,可以在 [類別] 窗格中選取 [欄位] 集合,並在 [欄位] 窗格中查看可用欄位的清單。 每個欄位都有數個屬性,包括 [值] 和 [遺漏]。 其餘的屬性會預先定義在擴充欄位屬性上,這些屬性可能可以提供給資料集使用 (視資料來源類型而定)。
偵測資料集欄位的 Null
若要偵測 Null 的欄位值 (在 Visual Basic 中為 Nothing),您可以使用 IsNothing 函數。 當下列運算式放置於資料表詳細資料列的文字輸入框內時,運算式會測試 MiddleName
欄位,並在該值為 Null 時以 "No Middle Name" 文字替代,而當該值不是 Null 時則為欄位值本身:
=IIF(IsNothing(Fields!MiddleName.Value),"No Middle Name",Fields!MiddleName.Value)
在執行階段偵測動態查詢的遺漏欄位
[欄位] 集合內的項目預設會有兩個屬性:[值] 和 [遺漏]。 [遺漏] 屬性會指出在設計階段針對資料集所定義的欄位是否包含在執行階段擷取的欄位中。 例如,查詢可能會呼叫預存程序 (其中的結果集會因為輸入參數而不同),或查詢可能會是 SELECT * FROM <table>
(資料表定義變更的地方)。
注意
[遺漏] 會偵測設計階段與執行階段之間對於任何資料來源類型的資料集結構描述變更。 [遺漏] 不能用來偵測多維度 Cube 中的空白成員,而且不會與 [空白] 和 [非空白] 的 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)。 資料處理延伸模組可能藉由最佳化包含這個語法的查詢來利用預先定義的屬性。