共用方式為


解決資料倉儲中發生的結構描述衝突

當不同的 Team 專案集合之可報告欄位的一組屬性不同時,就會發生結構描述衝突。 在發生結構描述衝突時,與該結構描述相關聯的資料無法移至資料倉儲和 SQL Server Analysis Services 資料 Cube。 您必須更正所有結構描述衝突,讓倉儲可以處理相關聯的資料,並讓相關聯的報表顯示目前的資料。

重要事項重要事項

您可以透過安裝 Visual Studio Team Foundation Server 2010 Service Pack 1 (SP1),在發生結構描述衝突時解除封鎖資料倉儲。 安裝 SP1 之後,沒有發生衝突的欄位會依照一般方式處理。 發生衝突的欄位會被指派 null 值,直到您解決衝突,然後依照一般方式處理為止。

此外,系統會針對它所偵測的每個衝突產生一個通知事件。 現在,只要訂閱該事件,當針對集合定義的任何 Team 專案發生結構描述衝突時,您就可以收到警示。

在 Visual Studio Team Foundation Server 部署中,定義在所有專案集合中所有 Team 專案的所有可報告資料都會寫入至單一關聯式資料倉儲。 接著會處理該倉儲中的資料,並且寫入至 Cube。 將資料收集到單一資料倉儲中可支援跨 Team 專案集合報告。 不過,因為每個專案集合的欄位是分別管理的,所以將不同的定義指派給某個欄位的一個或多個屬性,且此欄位被指派相同報告參考名稱時,就會發生結構描述衝突。

本主題內容

  • 提醒您發生結構描述衝突的錯誤訊息

  • 結構描述衝突來源

  • 解決結構描述衝突

  • 確認結構描述衝突已解決

提醒您發生結構描述衝突的錯誤訊息

發生結構描述衝突時,在下列位置上會出現錯誤訊息:

  • 應用程式層伺服器的事件記錄檔。

    注意事項注意事項

    Team Foundation Server 每天會將錯誤訊息記錄至事件記錄檔,直到資料衝突已解決。

  • 隨附於 MSF 流程範本並透過報表管理員檢視的報表。

  • 隨附於 MSF 流程範本並透過專案入口網站檢視的儀表板。

    注意事項注意事項

    如果您尋找每個報表和儀表板右下角的 [上次更新的日期] 時間戳記,可以判斷最近更新報表或儀表板的時間。 時間戳記對應於每個專案集合的每個排定要完成之倉儲配接器工作成功完成處理的最近時間。 時間戳記計算包含自訂配接器工作,會忽略遭封鎖而無法執行倉儲控制 Web 服務的配接器工作。

    如果因結構描述衝突資料遭封鎖而無法進入資料倉儲以產生報表,便不會更新報表的時間戳記。

除了以上的訊息之外,您也可以使用倉儲控制 Web 服務的 GetProcessingStatus 作業,取得詳細資訊。 如需詳細資訊,請參閱手動處理 Team Foundation Server 的資料倉儲和 Analysis Services Cube

結構描述衝突來源

當專案系統管理員執行下列其中一個動作時,會發生結構描述衝突:

  • 將可報告欄位加入至一個專案集合的工作項目類型,而指派給該欄位的屬性不符合其他專案集合中的屬性。

  • 變更指派給多個專案集合所用之工作項目欄位的屬性,即使這些變更與其他集合中的指派相衝突。

    注意事項注意事項

    專案系統管理員只要檢閱部署中多個專案集合所定義之欄位的屬性指派,就可以避免以上清單中的錯誤。

當多個專案集合中某個欄位有相同的參考名稱或相同的報告參考名稱,而在兩個以上的集合中該欄位的下列一個或多個屬性不符時,就會發生錯誤:

  • name:當您建立工作項目查詢時顯示為選項的欄位易記名稱。

  • reportingname:報表中顯示的名稱。 如果您未指定值,則會使用指派給 name 屬性的值。

  • reportable/reportingtype:欄位的資料是否可包含在報表中,如果可以的話,則為可報告類型 (例如,NoneDetailDimensionMeasure)。

    注意事項注意事項

    FIELD 項目使用 reportable 屬性,而 witadmin changefield 命令則使用 reportingtype 屬性。 這些屬性定義相同的資訊。

  • type:欄位接受的資料型別 (例如 IntegerHTMLStringDoubleDateTime)。

下表提供會造成結構描述衝突的屬性指派範例。 在這些範例中,未指派報告參考名稱和報告名稱。

屬性

專案集合 1

專案集合 2

結構描述衝突

Type

String

Integer

資料型別不符。

ReportingName

Activity

Common Activity

報告名稱不符。

Reportable

Detail

Dimension

報告類型不符。

解決結構描述衝突

您可以檢閱應用程式層伺服器的事件記錄檔,取得造成結構描述衝突之欄位的詳細資訊。 在判斷造成衝突的欄位之後,您必須遵循下列步驟:

  1. 在所有專案集合中檢閱指派給欄位的屬性。 您可以使用 witadmin listfields 命令,它的語法如下:

    witadmin listfields /collection:CollectionURL /n:RefName [/unused]
    

    如需詳細資訊,請參閱管理工作項目欄位 [witadmin]

  2. 決定您要以下列哪個方式解決衝突:

    • 在一個專案集合中變更欄位的屬性,以符合其他專案集合中所做的指派。 當小組在類似報表或跨專案報告中以相同方式使用欄位時,您應該採取這個動作。

    • 重新標示發生衝突之欄位的報告參考名稱。 當欄位使用方式不同時,或者您必須維護不同的欄位時,您應該採取這個動作。 在此情況下,處理不同專案集合的小組不會使用此欄位進行跨專案報告。

      如需詳細資訊,請參閱加入和修改工作項目欄位以支援報告

    • 將一個或多個集合的欄位標示為不可報告的。 當欄位不用於這些專案集合的報表時,您應該採取這個動作。

    • 從 Team 專案集合中移除欄位。 如果任何 Team 專案或報表都不使用此欄位時,您應該採取這個動作。

      注意事項注意事項

      如果您移除會用於報表的欄位,報表將無法再正確顯示。

  3. 依據您在上一個步驟中所做的決定,變更指派給欄位的屬性。 您可以使用 witadmin changefield 命令,它的語法如下:

    witadmin changefield /collection:CollectionURL /n:RefName [/name:NewName] [/syncnamechanges:true | false] [/reportingname:ReportingName] [/reportingrefname:ReportingRefName] [/reportingtype:Type] [/reportingformula:Formula] [/noprompt]
    
  4. 若要從專案集合中刪除欄位,您可以使用 witadmin deletefield 命令,它的語法如下:

    witadmin deletefield /collection:CollectionURL /n:RefName
    
    重要事項重要事項

    如果您永久刪除欄位,則會從資料儲存區移除該欄位和它儲存的所有資料。

確認結構描述衝突已解決

您可以視需要處理資料倉儲,然後檢查報表是否更新,藉此確認結構描述衝突已解決。 或者,您可以等候倉儲配接器工作依預設排程執行。 根據預設,關聯式資料庫每隔幾分鐘處理一次。 不過,Analysis Services Cube 預設每兩小時處理一次。

注意事項注意事項

如需倉儲控制 Web 服務的詳細資訊,請參閱手動處理 Team Foundation Server 的資料倉儲和 Analysis Services Cube

  1. 使用 WarehouseControlServiceProcessWarehouse 作業,視需要處理關聯式資料倉儲。

  2. 使用 WarehouseControlServiceProcessAnalysisDatabase 作業,視需要處理 Cube。

  3. 開啟儀表板或報表管理員,確認報表已更新。 如需詳細資訊,請參閱儀表板 (Agile)報表 (Agile)

如果錯誤訊息持續出現,您可以執行 WarehouseControlServiceGetProcessingStatus 作業,取得資料衝突和受影響且遭封鎖之配接器的詳細資訊。

請參閱

參考

管理工作項目欄位 [witadmin]

概念

建立、自訂和管理 Visual Studio ALM 的報表

其他資源

加入和修改工作項目欄位以支援報告

手動處理 Team Foundation Server 的資料倉儲和 Analysis Services Cube