共用方式為


在運算式中使用全域集合 (Reporting Services)

更新: 2006 年 4 月 14 日

Reporting Services 提供下列可讓您從運算式參考的全域集合:DataSourcesDataSetsFieldsGlobalsParametersReportItemsUser。若要從運算式參考集合,您可以針對集合中的項目使用標準 Visual Basic 語法。下列清單提供此語法的範例:

  • Collection!ObjectName.PropertyCollection!ObjectName("Property")
    =Fields!Sales.Value
    =Fields!Sales("Value")
  • Collection("ObjectName").Property
    =Fields("Sales").Value
  • Collection("Member")
    =User("Language")
  • Collection.Member
    =User.Language

全域集合摘要

下表描述每個全域集合,以及當您從運算式參考集合時的注意事項。此節後半段的個別主題中會討論每個全域集合。

全域集合 範例 描述

Fields

=Fields!Sales.Value

代表可供報表使用之資料集的欄位集合。可在從資料來源將資料擷取至資料集之後使用。

ReportItems

=ReportItems("Textbox1").Value

代表報表項目的文字方塊集合,例如:包含在資料表資料區域、頁首或頁尾內的文字方塊。可在報表處理期間使用。

Globals

=Globals.ReportName

代表對報表很有用的全域變數,例如:報表名稱或頁碼。永遠可以使用。

Parameters

=Parameters("ReportMonth").Value

- 或 -

=Parameters!ReportYear.Value

代表報表參數的集合,每個參數都可以是單一數值或多重值。處理初始化完成後才可以使用。當您建立查詢參數時,這些參數會自動加入報表參數集合中。

User

=User.UserID

- 或 -

User.Language

代表有關執行報表之使用者的資料集合,例如,語言設定或使用者識別碼。永遠可以使用。User!UserID 經常用來篩選報表中的結果。

DataSources

=DataSources("AdventureWorks").Type

代表從報表主體內所參考的資料來源集合。不包含只用於頁首或頁尾的資料來源。不適用於本機預覽。

DataSets

=DataSets("TopEmployees").CommandText

代表從報表定義的主體所參考的資料集集合。不包含只用於頁首或頁尾的資料來源。不適用於本機預覽。

GlobalsUsers 集合的成員會傳回變數。如果您想要在需要特定資料類型的運算式中使用全域變數,就必須先轉換此變數。例如,若要將執行時間變數轉換成日期格式,請使用 CDate(Globals!ExecutionTime)。如需其他範例,請參閱<Reporting Services 中的運算式範例>。

欄位

報表中的每一個資料集都包含一個 Fields 集合,這就是當您在 [資料集] 視窗中展開資料集節點時所看到的欄位集合。Fields 集合通常用來在報表中顯示文字方塊內的資料,但是也可以用於其他報表項目、屬性和函數。集合內的欄位名稱必須是唯一的,但是相同的欄位名稱可以存在於多個集合中。

某些資料處理延伸模組會從您為資料集所定義的查詢來自動判斷此欄位集合。當您按一下工具列上的 [重新整理欄位] 按鈕時,會將變更儲存到報表定義中,而且會更新 [資料集] 視窗來顯示這些變更。若要編輯欄位定義,請在報表設計師的 [資料] 檢視中,選取資料集來開啟 [資料集] 對話方塊,然後按一下 [欄位] 索引標籤。若要加入導出欄位,請以滑鼠右鍵按一下 [資料集] 視窗中的資料集,即可開啟 [加入新的欄位] 對話方塊,然後輸入名稱;之後,再按一下 [導出欄位],並輸入運算式。

在報表處理期間,當依序處理每一個報表項目時,與目前報表項目相關聯的 Fields 集合會繫結到基礎來源資料。當處理報表時,特定欄位所傳回的資料可以是單一值,或是資料集內每一個資料列的值。您會取得單一值還是多個值,是由包含欄位參考的報表項目類型所決定;來自資料區域 (資料表、矩陣、清單或圖表) 的參考會傳回資料集內每一個資料列的值,而不屬於資料區域之一部分的參考則會傳回單一值。

當您使用彙總報表函數來處理資料集內的欄位集合時,您會包含指定此資料集的 scope 參數。若要確認報表項目與資料集之間的關聯,請選取此報表項目並檢視它的屬性。如需有關報表函數和範例參數的詳細資訊,請參閱<在運算式中使用報表功能 (Reporting Services)>。

Fields 集合內的項目預設會有兩個屬性:ValueIsMissing。當您從 [資料集] 視窗將欄位拖曳到報表配置上的報表項目時,該報表項目的內容預設會設定為此欄位的 Value 屬性。如果是資料區域,資料集內每一個資料列的值都會設定為 =Fields!FieldName.Value。不是資料區域之報表項目的內容會設定為單一值,例如 =First(Fields!FieldName.Value)

IsMissing 屬性會指出針對資料集所定義的欄位是否包含在從資料來源擷取的欄位中,您可以在使用 Visual Basic 的欄位運算式中測試這個欄位。遺漏欄位的 Value 屬性是 Null (Visual Basic 中的 Nothing)。當下列範例放在您想要顯示欄位資料的報表項目文字方塊內時,會示範如何測試是否有遺漏的欄位:

=IIF(Fields!FieldName.IsMissing, "Field was not returned by query", Fields!FieldName.Value))

由於 Visual Basic 函數 IIF 會在傳回結果之前先評估陳述式的所有元素,所以遺漏欄位的參考可能會造成處理錯誤。下列範例會示範如何進行會參考可能遺漏之欄位的 Visual Basic 函數呼叫:

=IIF(Sum(Fields!FieldName.Value) IS NOTHING, 0, Sum(Fields!FieldName.Value))

當您使用運算式編輯器來協助建立參考欄位的運算式時,可以選取第一個窗格中的 Fields 集合,並在最後一個窗格中查看可用欄位的清單。下圖會顯示 Employees 資料集的欄位 FirstName

編輯運算式對話方塊 (含 Intellisense)

請注意 IntelliSense 視窗中可用的屬性清單,這個清單包含預設屬性 ValueIsMissing;其餘的屬性為其他資料處理延伸模組所支援之預先定義的擴充欄位屬性。

擴充欄位屬性

擴充欄位屬性是欄位上由資料處理延伸模組所定義的其他屬性;會預先定義擴充欄位屬性的子集,預先定義的屬性為常用的欄位屬性,Key 欄位和 UniqueName 欄位是典型的範例。這些預先定義的屬性會出現在 IntelliSense 清單中,而且可以使用集合語法 Fields!FieldName.Property 來加以參考;資料處理延伸模組可藉由最佳化包含這個語法的查詢來選擇利用預先定義的屬性。

您也可以參考特定資料處理延伸模組所支援的其他擴充欄位屬性,這些屬性不會出現在 [運算式] 視窗中,但是可以透過已註冊之資料處理延伸模組與其關聯的查詢設計師來瀏覽資料來源而做出判斷。可以使用集合語法 Fields!FieldName("Property") 來參考任何擴充欄位屬性。

如果資料提供者不支援擴充欄位屬性,或是執行查詢時找不到欄位,則當屬性類型為 StringObject 時,此屬性值會是 null (Visual Basic 中則為 Nothing);當屬性類型為 Integer 時,此屬性值為零 (0)。

如果資料延伸模組提供自訂欄位屬性,那些屬性在資料集中所有欄位的運算式編輯器下拉式清單中都是可見的,不論欄位是否支援該屬性都是如此。如果您加入該欄位不支援之屬性的參考,則該參考的評估結果為 null (Visual Basic 中的 Nothing)。如需支援擴充欄位屬性的提供者範例,請參閱<定義 Analysis Services 多維度與資料採礦預測資料的報表資料集>和<從 SAP NetWeaver BI 系統定義多維度資料的報表資料集>。

全域

Globals 集合包含報表的全域變數。下表描述 Globals 集合的成員。

成員 類型 描述

ExecutionTime

DateTime

報表開始執行的日期和時間。

PageNumber

Integer

目前的頁碼。僅可使用於頁首和頁尾。

ReportFolder

String

包含報表之資料夾的完整路徑。這不包括報表伺服器 URL。

ReportName

String

報表存放在報表伺服器資料庫的名稱。

ReportServerUrl

String

報表開始執行之報表伺服器的 URL。

TotalPages

Integer

報表中的總頁數。僅可使用於頁首和頁尾。

全域變數的範例如下:

  • 這個放在報表頁尾之文字方塊中的運算式,會提供報表的頁碼與總頁數:
    =Globals.PageNumber & " of " & Globals.TotalPages
  • 此運算式會提供報表的名稱和執行報表的時間。時間會以 Microsoft .NET Framework 的簡短日期格式化字串進行格式化:
    =Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")

參數

Parameters 集合包含報表中的報表參數物件。參數可以傳遞至查詢,用於篩選或用於其他根據參數來變更報表外觀和內容的函數。當您定義查詢參數時,這些參數會自動加入報表參數集合中。下表描述定義在 Parameter 上的屬性:CountIsMultiValueValueLabel

屬性 描述

Count

指出集合中參數數目的整數。

IsMultiValue

識別此參數為具有一組值的布林。

Value

參數的值。針對多重值參數,Value 會傳回物件陣列。

Label

使用者易記的參數標籤。如果未指定標籤,則 Label 屬性的值會與 Value 屬性的值相同。如果一個以上的 Label 與相同的 Value 相關聯,則使用第一個符合的 Label。針對多重值參數,Label 會傳回物件陣列。

參數可以透過屬性語法或集合語法存取。下列運算式顯示如何存取參數集合的每個成員,並於放在報表項目的文字方塊中時顯示 ProductSubCategory 參數的內容。

="IsMultiValue: " & Parameters!ProductSubCategory.IsMultiValue.ToString() 
& " Count:" & Parameters!ProductSubCategory.Count & " Values: " 
& Join(Parameters!ProductSubCategory.Value,", ") & " Labels: " 
& Join(Parameters!ProductSubCategory.Label,", ")

如需詳細資訊,請參閱<在 Reporting Services 中使用參數>。

ReportItems

ReportItems 集合包含報表中的文字方塊。ReportItems 集合裡的項目只有一個屬性:ValueReportItems 項目的值,可用來顯示或計算報表中之其他欄位裡的資料。若要存取目前文字方塊的值,您可以使用 Visual Basic 內建全域 Me.Value 或是只使用 Value。不過,在報表函數 (例如,First) 和彙總函數中,請使用完整的語法。

例如:

  • 這個放在文字方塊中的運算式,會顯示名稱為 Textbox1 之 ReportItem 文字方塊值:
    =ReportItems("Textbox1").Value
  • 當值為 > 0 時,這個放在 ReportItem 文字方塊色彩屬性中的運算式會顯示黑色文字,否則會顯示紅色文字:
    =iif(Me.Value > 0,"Black","Red")
  • 這個放在頁首或頁尾之文字方塊中的運算式,會為名稱為 LastName 的文字方塊顯示已轉譯報表之每一頁的第一個值:
    =First(ReportItems("LastName").Value)

使用者

User 集合包含正在執行報表之使用者的相關資料。您可以利用此集合來篩選出現在報表中的資料 (例如,只顯示目前使用者的資料),或是在報表標題中顯示 UserID 或其他項目。下列放在文字方塊中的運算式,會將靜態文字與變數使用者資料結合在一起:

=Globals!ReportName & " for " & User!UserID

下表描述 User 集合的成員。

成員 類型 描述

Language

String

執行報表之使用者的語言。例如,en-US

UserID

String

執行報表之使用者的識別碼。如果您是使用 Windows 驗證,此值為目前使用者的網域帳戶。這個值是由 Reporting Services 安全性延伸模組所決定,此延伸模組可使用 Windows 驗證或自訂驗證。

在某些情況下,包含 User!UserID 變數的報表將無法顯示正在檢視報表之目前使用者特定的報表資料。有下列況狀時,才會發生這種無法顯示的情形:

  • 報表必須是報表執行快照集或報表歷程快照集。
  • 報表必須以程式設計的方式,透過 SOAP 方法或透過報表 URL 位址來存取。

發生這種無法顯示的情形時,報表快照集中的使用者設定檔資訊將以下列項目之一為基礎:

  • 建立報表快照集之使用者的識別。
  • 用來執行報表伺服器的帳戶 (如果快照集是由報表伺服器建立為已排程的作業)。
ms157274.note(zh-tw,SQL.90).gif重要事項:
如果無法更新以使用者設定檔資訊為基礎的報表快照集,則會產生不正確的資料,而且當快照集包含機密資料時,還會帶來安全性風險。

只有透過 SOAP 呼叫或透過報表快照集的 URL 位址來開啟的報表快照集,才會發生使用者設定檔失敗的情形。針對視需要執行的報表,以及所有從報表管理員開啟的報表快照集,User!UserID 都可以正常作業。如需有關如何從 Web 服務方法和 URL 存取呼叫報表快照集的詳細資訊,請參閱<Using a URL to Access Report Server Items>和<Identifying Execution State>。

DataSources

DataSources 集合代表已發行報表定義中參考的資料來源。在預覽模式中取得的這些屬性的值,可能與您部署及檢視已發行報表時取得的值不同。

下表描述 DataSources 集合內的變數。

變數 類型 描述

DataSourceReference

String

報表伺服器上資料來源的完整路徑。例如,/DataSources/AdventureWorks.

Type

String

資料來源的資料提供者類型。例如,SQL

資料集

DataSets 集合代表報表定義中參考的資料集。此全域集合極少直接用於報表中,但可供報表設計師用來存取特定查詢命令,這些查詢命令是用來擷取各資料集之資料來源中的資料。

下表描述 DataSets 集合的成員。

成員 類型 描述

CommandText

String

針對資料庫資料來源,此查詢是用來擷取資料來源中的資料。如果查詢是運算式,則此為評估運算式。

RewrittenCommandText

String

資料提供者的擴充 CommandText 值。此值通常用於含有對應至報表參數之查詢參數的報表。當命令文字參數參考擴充至針對已對應報表參數所選取的常數值時,資料提供者會設定此屬性。

請參閱

工作

如何:加入運算式 (報表設計師)

概念

瞭解報表配置和轉譯
報表設計基本概念

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

變更的內容:
  • 擴充的欄位內容。

2005 年 12 月 5 日

新增內容:
  • 新增 Datasets 和 DataSources 集合。
變更的內容:
  • 已修改全域語法範例。