解决数据仓库中发生的架构冲突
当可报告字段的一组特性在团队项目集合之间有所不同时,将发生架构冲突。 当发生架构冲突时,不冲突的字段将照常处理,但冲突的字段将被分配 Null 值,直到冲突解决,然后照常处理。 此外,系统会为检测到的每个冲突生成通知事件。 通过订阅事件,您可以在为集合定义的任何团队项目发生架构冲突时收到警报。 必须更正所有架构冲突,才能取消阻止处理仓库的相关数据,这样关联报表才能显示当前数据。
所有来自针对 Visual Studio Team Foundation Server 的部署而在所有项目集合中定义的所有团队项目的可报告数据都将写入一个关系数据仓库。 随后将对来自该仓库的数据进行处理,并将其写入到多维数据集中。 通过将数据收集到单个数据仓库,可以跨团队项目集合进行报告。 但是,由于每个项目集合管理字段的方式很明确,因此在向已分配相同报告引用名称的字段的一个或多个特性分配不同的定义时,会发生架构冲突。
主题内容
提示你发生架构冲突的错误消息
架构冲突源
解决架构冲突
验证是否已解决架构冲突
提示你发生架构冲突的错误消息
当发生架构冲突时,以下位置将出现一条错误消息:
应用层服务器的事件日志。
备注
Team Foundation Server 每天都会将一条错误消息记录到事件日志中,直到解决数据冲突。
MSF 过程模板附带的可通过报表管理器查看的报表。
MSF 过程模板附带的可通过项目门户查看的仪表板。
备注
如果你找到显示在每个报表和仪表板右下角的“上次更新日期”时间戳,就可以确定报表或仪表板的最近更新时间。该时间戳对应于为每个项目集合计划完成的每个仓库适配器作业成功完成处理的最近时间。时间戳计算包括自定义适配器作业,并将忽略无法运行仓库控制 Web 服务的适配器作业。
如果架构冲突导致无法为报表将数据输入数据仓库,则将不会更新该报表的时间戳。
除前面的消息外,你还可以使用仓库控制 Web 服务的 GetProcessingStatus 操作来获取详细信息。 有关详细信息,请参阅为 Team Foundation Server 手动处理数据仓库和 Analysis Services 多维数据集。
架构冲突源
当项目管理员执行以下操作之一时,会发生架构冲突:
向项目集合中的某个工作项类型添加一个可报告字段,并且分配给该字段的特性与其他项目集合中的特性不匹配。
更改分配给多个项目集合中使用的工作项字段的特性,即使这些更改与其他集合中的赋值发生冲突。
备注
项目管理员只能通过查看在部署中的多个项目集合中定义的字段特性分配,才能避免上一个列表中的错误。
如果某个字段在多个项目集合中具有相同的引用名称或相同的报告引用名称,并且该字段的一个或多个以下特性在两个或两个以上的集合中不匹配,则会产生错误:
name:字段的友好名称,该名称会在你创建工作项查询时显示为选项。
reportingname:在报表中显示的名称。 如果您未指定值,则将使用分配给 name 特性的值。
reportable/reportingtype:字段中的数据是否对报表中的包含可用,如果可用,则为可报告类型(例如 None、Detail、Dimension 或 Measure)。
备注
FIELD 元素使用 reportable 特性,而 witadmin changefield 命令使用 reportingtype 特性。这些特性定义相同的信息。
type:字段接受的数据类型(例如,Integer、HTML、String、Double 或 DateTime)。
下表提供了将导致架构冲突的特性分配的示例。 在这些示例中,未分配报告引用名称和报告名称。
特性 |
项目集合 1 |
项目集合 2 |
架构冲突 |
---|---|---|---|
类型 |
字符串 |
Integer |
数据类型不匹配。 |
ReportingName |
活动 |
常用活动 |
报告名称不匹配。 |
可报告 |
详细信息 |
维度 |
报告类型不匹配。 |
解决架构冲突
你可以在应用层服务器上查看事件日志,以获取有关导致架构冲突的字段的详细信息。 确定导致冲突的一个或多个字段后,必须按照以下步骤操作:
查看分配给所有项目集合中的该字段的特性。 可以使用 witadmin listfields 命令,该命令具有以下语法:
witadmin listfields /collection:CollectionURL /n:RefName [/unused]
有关详细信息,请参阅管理工作项字段 [witadmin]。
确定你想要使用以下哪种方法来解决冲突:
更改一个项目集合中的字段特性以与其他项目集合中进行的分配相匹配。 当团队在类似报表中或对跨项目报告用相同的方式使用该字段时,应执行此操作。
重新标记发生冲突的字段的报告引用名称。 当以不同的方式使用该字段或你必须保留一个不同的字段时,应执行此操作。 在此情况下,使用其他项目集合的团队不会使用此字段来进行跨项目报告。
有关详细信息,请参阅添加或修改工作项字段以支持报告。
为一个或多个集合将字段标记为不可报告字段。 当字段未用于与这些项目集合相关的报表时,应执行此操作。
从团队项目集合中删除该字段。 如果字段未供任何团队项目或报表使用,则应执行此操作。
备注
如果删除某个报表中使用的字段,则将不再正确显示该报表。
基于你在上一个步骤中所做的决策,更改分配给字段的特性。 可以使用 witadmin changefield 命令,该命令具有以下语法:
witadmin changefield /collection:CollectionURL /n:RefName [/name:NewName] [/syncnamechanges:true | false] [/reportingname:ReportingName] [/reportingrefname:ReportingRefName] [/reportingtype:Type] [/reportingformula:Formula] [/noprompt]
若要从项目集合中删除某个字段,可以使用 witadmin deletefield 命令,该命令具有以下语法:
witadmin deletefield /collection:CollectionURL /n:RefName
重要
如果你永久删除某个字段,则会从数据存储中删除该字段及其存储的所有数据。
验证是否已解决架构冲突
要验证是否已解决架构冲突,可以按需处理数据仓库,然后检查报表以确定是否已更新这些报表。 或者,你可以根据仓库适配器作业的默认计划等待,直到这些作业运行。 默认情况下,每隔几分钟处理一次关系数据库。 但默认情况下,每隔两小时处理一次 Analysis Services 多维数据集。
备注
有关仓库控制 Web 服务的详细信息,请参阅为 Team Foundation Server 手动处理数据仓库和 Analysis Services 多维数据集。
通过使用 WarehouseControlService 的 ProcessWarehouse 操作按需处理关系数据仓库。
通过使用 WarehouseControlService 的 ProcessAnalysisDatabase 操作按需处理多维数据集。
打开仪表板或报表管理器,并验证是否正在更新报表。 有关详细信息,请参阅项目门户仪表板 或报告 (SQL Server Reporting Services)。
如果错误消息仍出现,则可通过运行 WarehouseControlService 的 GetProcessingStatus 操作来获取有关数据冲突和受影响的受阻适配器的详细信息。
请参见
参考
概念
适用于 Visual Studio ALM 的图表、仪表板和报表