BAM 定义架构概述

BAM 定义架构定义由业务分析员创建的观察模型的结构。

该架构定义 BAM 定义 XML 文档的结构,其中包括该文档的元素和子元素。 例如,根元素为 BAM 定义,在 BAM 定义内有以下元素:

  • 活动

  • 视图

  • 多维数据集

  • 警报

注意

如果 BAM 定义 XML 包含两个视图,并且用户仅对其中一个视图具有权限,则调用 GetViewDefinition 时,用户将取回这两个视图的定义。

该架构定义文档约束。 例如,这些约束规定一些元素只能引用其他某些特定元素。

您可以使用任何文本编辑器或使用适用于 Excel 的 BAM 外接程序创建包含此架构) (实例的 BAM 定义的 XML 文件,或者通过使用 BAM 外接程序导出到 XML 功能创建可导出到 XML 文件的工作表。

在定义 BAM 活动和视图后,您不必手动导出 XML 文件,因为 BAM 管理实用程序 (bm.exe) 可以读取此电子表格,并从中获取 XML,以便自动部署您的基础结构。 结果是名为工作簿名称>的电子表格<的另一个副本_Livedata.xls。 可以使用此新电子表格连接到实时数据源,并在数据透视表中查看聚合。

注意

如果通过电子表格顶部的 BAM 菜单项手动导出 XML 文件,并使用 BAM 管理实用工具部署导出的 XML 文件而不是 Microsoft Excel 文件,则无法使用 Office 工具查看实时数据。

注意

以 XML 形式导出 BAM 定义时,无法将 BAM 定义导出至 localhost。 例如,尝试将 BAM 定义导出到 \\localhost\C$\definition1.xml 将导致错误。

同样,无法从 localhost 导入 BAM 定义。

注意

如果更改活动或视图,则需要删除 BAM 定义,然后重新部署该定义。

以下文件为 BAM 定义架构本身:

<?xml version="1.0" encoding="utf-16"?>  
<xs:schema  
    xmlns:xs="http://www.w3.org/2001/XMLSchema"  
    xmlns="http://schemas.microsoft.com/BizTalkServer/2004/10/BAM"  
    xmlns:bam="http://schemas.microsoft.com/BizTalkServer/2004/10/BAM"  
    targetNamespace="http://schemas.microsoft.com/BizTalkServer/2004/10/BAM"  
    elementFormDefault="qualified" attributeFormDefault="unqualified">  
  
    <xs:element name="BAMDefinition" type="BAMDefinition">  
        <xs:key name="ActivityName_Key">  
            <xs:selector xpath="bam:Activity" />  
            <xs:field xpath="@Name" />  
        </xs:key>  
        <xs:key name="ViewName_Key">  
            <xs:selector xpath="bam:View" />  
            <xs:field xpath="@Name" />  
        </xs:key>  
        <xs:key name="CubeName_Key">  
            <xs:selector xpath="bam:Cube" />  
            <xs:field xpath="@Name" />  
        </xs:key>  
        <xs:key name="ActivityID_Key">  
            <xs:selector xpath="bam:Activity" />  
            <xs:field xpath="@ID" />  
        </xs:key>  
        <xs:keyref name="ActivityView_ref_ActivityID" refer="ActivityID_Key">  
            <xs:selector xpath="bam:View/bam:ActivityView" />  
            <xs:field xpath="@ActivityRef" />  
        </xs:keyref>  
        <xs:key name="ActivityViewID_Key">  
            <xs:selector xpath="bam:View/bam:ActivityView" />  
            <xs:field xpath="@ID" />  
        </xs:key>  
        <xs:keyref name="Cube_ref_ActivityViewID" refer="ActivityViewID_Key">  
            <xs:selector xpath="bam:Cube" />  
            <xs:field xpath="@ActivityViewRef" />  
        </xs:keyref>  
        <xs:key name="CheckpointID_Key">  
            <xs:selector xpath="bam:Activity/bam:Checkpoint" />  
            <xs:field xpath="@ID" />  
        </xs:key>  
        <xs:keyref name="CheckpointRef_ref_CheckpointID" refer="CheckpointID_Key">  
            <xs:selector xpath="bam:View/bam:ActivityView/bam:Alias/bam:CheckpointRef" />  
            <xs:field xpath="." />  
        </xs:keyref>  
        <xs:key name="AliasID_Key">  
            <xs:selector xpath="bam:View/bam:ActivityView/bam:Alias" />  
            <xs:field xpath="@ID" />  
        </xs:key>  
        <xs:keyref name="FromAliasRef_ref_AliasID" refer="AliasID_Key">  
            <xs:selector xpath="bam:View/bam:ActivityView/bam:Duration/bam:FromAliasRef" />  
            <xs:field xpath="." />  
        </xs:keyref>  
        <xs:keyref name="ToAliasRef_ref_AliasID" refer="AliasID_Key">  
            <xs:selector xpath="bam:View/bam:ActivityView/bam:Duration/bam:ToAliasRef" />  
            <xs:field xpath="." />  
        </xs:keyref>  
        <xs:key name="AliasOrDurationID_Key">  
            <xs:selector xpath="bam:View/bam:ActivityView/bam:Alias|bam:View/bam:ActivityView/bam:Duration" />  
            <xs:field xpath="@ID" />  
        </xs:key>  
        <xs:keyref name="Measure_ref_AliasOrDurationID" refer="AliasOrDurationID_Key">  
            <xs:selector xpath="bam:Cube/bam:Measure" />  
            <xs:field xpath="@AliasRef" />  
        </xs:keyref>  
        <xs:keyref name="DataDimension_ref_AliasOrDurationID" refer="AliasOrDurationID_Key">  
            <xs:selector xpath="bam:Cube/bam:DataDimension/bam:LevelAliasRef" />  
            <xs:field xpath="." />  
        </xs:keyref>  
        <xs:keyref name="TimeDimension_ref_AliasOrDurationID" refer="AliasOrDurationID_Key">  
            <xs:selector xpath="bam:Cube/bam:TimeDimension" />  
            <xs:field xpath="@TimeStampAliasRef" />  
        </xs:keyref>  
        <xs:keyref name="NumericRangeDimension_ref_AliasOrDurationID" refer="AliasOrDurationID_Key">  
            <xs:selector xpath="bam:Cube/bam:NumericRangeDimension" />  
            <xs:field xpath="@NumericAliasRef" />  
        </xs:keyref>  
        <xs:keyref name="ProgressStage_ref_AliasOrDurationID" refer="AliasOrDurationID_Key">  
            <xs:selector xpath=".//bam:ProgressStage" />  
            <xs:field xpath="@TimeStampAliasRef" />  
        </xs:keyref>  
    </xs:element>  
  
    <xs:complexType name="BAMDefinition">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="Activity" type="Activity">  
                <xs:key name="CheckpointName_Key">  
                    <xs:selector xpath="bam:Checkpoint" />  
                    <xs:field xpath="@Name" />  
                </xs:key>  
                <xs:key name="IndexName_Key">  
                    <xs:selector xpath="bam:Index" />  
                    <xs:field xpath="@Name" />  
                </xs:key>  
                <xs:key name="LocalCheckpointID_Key">  
                    <xs:selector xpath="bam:Checkpoint" />  
                    <xs:field xpath="@ID" />  
                </xs:key>  
                <xs:keyref name="IndexCheckpointRef_ref_localCheckpointID" refer="LocalCheckpointID_Key">  
                    <xs:selector xpath="bam:Index/bam:CheckpointRef" />  
                    <xs:field xpath="." />  
                </xs:keyref>  
            </xs:element>  
            <xs:element minOccurs="0" maxOccurs="unbounded" name="View" type="View">  
                <xs:key name="ActivityViewName_Key">  
                    <xs:selector xpath="bam:ActivityView" />  
                    <xs:field xpath="@Name" />  
                </xs:key>  
            </xs:element>  
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Cube" type="Cube">  
                <xs:key name="MeasureName_Key">  
                    <xs:selector xpath="bam:Measure" />  
                    <xs:field xpath="@Name" />  
                </xs:key>  
                <xs:key name="DimensionNames_Key">  
                    <xs:selector xpath="bam:DataDimension|bam:TimeDimension|bam:NumericRangeDimension|bam:ProgressDimension" />  
                    <xs:field xpath="@Name" />  
                </xs:key>  
                <xs:key name="RangeDimensionName_Key">  
                    <xs:selector xpath="bam:Cube/bam:NumericRangeDimension/bam:Range" />  
                    <xs:field xpath="@Name" />  
                </xs:key>  
                <xs:key name="MeasureID_Key">  
                    <xs:selector xpath="bam:Measure" />  
                    <xs:field xpath="@ID" />  
                </xs:key>  
                <xs:keyref name="RTAMeasure_ref_MeasureID" refer="MeasureID_Key">  
                    <xs:selector xpath="bam:RealTimeAggregation/bam:MeasureRef" />  
                    <xs:field xpath="." />  
                </xs:keyref>  
                <xs:key name="DimensionID_Key">  
                    <xs:selector xpath="bam:DataDimension|bam:TimeDimension|bam:NumericRangeDimension|bam:ProgressDimension" />  
                    <xs:field xpath="@ID" />  
                </xs:key>  
                <xs:keyref name="RTADimension_Ref_DimensionID" refer="DimensionID_Key">  
                    <xs:selector xpath="bam:RealTimeAggregation/bam:DimensionRef" />  
                    <xs:field xpath="." />  
                </xs:keyref>  
                <xs:key name="DataDimensionLevel_Key">  
                    <xs:selector xpath="bam:Cube/bam:DataDimension/bam:LevelAliasRef" />  
                    <xs:field xpath="." />  
                </xs:key>  
                <xs:key name="TimeDimensionLevel_Key">  
                    <xs:selector xpath="bam:Cube/bam:TimeDimension/bam:TimeLevel" />  
                    <xs:field xpath="." />  
                </xs:key>  
            </xs:element>  
            <xs:element minOccurs="0" maxOccurs="1" name="Alerts" type="Alerts">  
            </xs:element>  
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Extension" type="Extension">  
            </xs:element>  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="Activity">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="1000" name="Checkpoint" type="Checkpoint" />  
            <xs:element minOccurs="0" maxOccurs="245" name="Index" type="Index">  
                <xs:key name="IndexCheckpointRef_Key">  
                    <xs:selector xpath="bam:CheckpointRef" />  
                    <xs:field xpath="." />  
                </xs:key>  
            </xs:element>  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMActivityViewAndRtaName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="Checkpoint">  
        <xs:attribute name="Name" type="BAMSqlObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
        <xs:attribute name="DataType" type="CheckpointDataType" use="required" />  
        <xs:attribute name="DataLength" type="xs:positiveInteger" use="optional" />  
    </xs:complexType>  
  
    <xs:complexType name="Index">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="16" name="CheckpointRef" type="xs:NCName" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMSqlObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="View">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="ActivityView" type="ActivityView">  
                <xs:key name="AliasAndDurationName_Key">  
                    <xs:selector xpath="bam:Alias|bam:Duration" />  
                    <xs:field xpath="@Name" />  
                </xs:key>  
            </xs:element>  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMActivityViewAndRtaName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="ActivityView">  
        <xs:choice minOccurs="1" maxOccurs="1000">  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="Alias" type="Alias" />  
            <xs:element minOccurs="0" maxOccurs="unbounded" name="Duration" type="Duration" />  
        </xs:choice>  
        <xs:attribute name="Name" type="BAMActViewName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
        <xs:attribute name="ActivityRef" type="xs:NCName" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="Alias">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="CheckpointRef" type="xs:NCName" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMAliasName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="Duration">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="1" name="FromAliasRef" type="xs:NCName" />  
            <xs:element minOccurs="1" maxOccurs="1" name="ToAliasRef" type="xs:NCName" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMSqlObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
        <xs:attribute name="TimeResolution" type="DurationTimeResolution" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="Cube">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="Measure" type="Measure" />  
            <xs:choice minOccurs="1" maxOccurs="unbounded">  
                <xs:element name="DataDimension" type="DataDimension">  
                    <xs:key name="DataDimLevelKey">  
                        <xs:selector xpath="bam:LevelAliasRef" />  
                        <xs:field xpath="." />  
                    </xs:key>  
                </xs:element>  
                <xs:element name="TimeDimension" type="TimeDimension" />  
                <xs:element name="NumericRangeDimension" type="NumericRangeDimension" />  
                <xs:element name="ProgressDimension" type="ProgressDimension">  
                    <xs:key name="ProgressStageName_Key">  
                        <xs:selector xpath=".//bam:ProgressStage" />  
                        <xs:field xpath="@Name" />  
                    </xs:key>  
                </xs:element>  
            </xs:choice>  
            <xs:element minOccurs="0" maxOccurs="unbounded" name="RealTimeAggregation" type="RealTimeAggregation" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMAnalysisObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
        <xs:attribute name="ActivityViewRef" type="xs:NCName" use="required" />  
        <xs:attribute default="true" name="CreateOlapCube" type="xs:boolean" use="optional" />  
    </xs:complexType>  
  
    <xs:complexType name="Alerts">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="ViewAlert" type="ViewAlert" />  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="Extension">  
        <xs:sequence>  
            <xs:any processContents="skip"/>  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="ViewAlert">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="1" name="ViewRef" type="xs:NCName" />  
            <xs:element minOccurs="0" maxOccurs="1" name="ActivityViewRef" type="xs:NCName" />  
            <xs:element minOccurs="0" maxOccurs="1" name="CubeRef" type="xs:NCName" />  
            <xs:element minOccurs="0" maxOccurs="1" name="RtaRef" type="xs:NCName" />  
            <xs:element minOccurs="0" maxOccurs="1" name="PollingInterval" type="TimeDuration" />  
            <xs:element minOccurs="0" maxOccurs="1" name="MaxAlertsPerTimeUnit" type="MaxAlertsPerTimeUnit" />  
            <xs:element minOccurs="0" maxOccurs="unbounded" name="AlertInstance" type="AlertInstance" />  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="MaxAlertsPerTimeUnit">  
        <xs:simpleContent>  
            <xs:extension base="xs:positiveInteger">  
                <xs:attribute name="TimeUnit" type="TimePartSimple" use="required" />  
            </xs:extension>  
        </xs:simpleContent>  
    </xs:complexType>  
  
    <xs:complexType name="AlertInstance">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="1" name="Message" type="BAMAlertMessage" />  
            <xs:choice>  
                <xs:element minOccurs="1" maxOccurs="1" name="AggregationQuery" type="AggregationQuery" />  
                <xs:element minOccurs="1" maxOccurs="1" name="InstanceQuery" type="InstanceQuery" />  
            </xs:choice>  
            <xs:element minOccurs="1" maxOccurs="1" name="Owners" type="Owners" />  
            <xs:element minOccurs="0" maxOccurs="1" name="Subscriptions" type="Subscriptions" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMSqlObjectName" use="required" />  
        <xs:attribute name="Priority" type="AlertPriority" use="required" />  
        <xs:attribute name="Enabled" type="xs:boolean" use="required" />  
        <xs:attribute name="Security" type="xs:NCName" use="required" />  
        <xs:attribute name="CreatedBy" type="xs:token" use="optional" />  
        <xs:attribute name="CreationDate" type="xs:dateTime" use="optional" />  
        <xs:attribute name="LastModifiedDate" type="xs:dateTime" use="optional" />  
        <xs:attribute name="ExtensionRef" type="xs:NCName" use="optional" />  
    </xs:complexType>  
  
    <xs:complexType name="InstanceQuery">  
        <xs:sequence>  
            <xs:element name="SelectClauses" type="SelectClauses" minOccurs="1" maxOccurs="1" />  
            <xs:element name="WhereClauses" type="WhereClauses" minOccurs="1" maxOccurs="1" />  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="SelectClauses">  
        <xs:sequence>  
            <xs:element name="Column" minOccurs="0" maxOccurs="unbounded" type="xs:string" />  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="WhereClauses">  
        <xs:sequence>  
            <xs:element name="Filter" minOccurs="0" maxOccurs="unbounded">  
                <xs:complexType>  
                    <xs:attribute name="Field" use="required" type="xs:string" />  
                    <xs:attribute name="Condition" use="required" type="xs:string" />  
                    <xs:attribute name="Value" type="xs:string" use="optional" />  
                    <xs:attribute name="Logic" use="required" type="xs:string" />  
                    <xs:attribute name="TimeUnit" use="optional" type="DurationTimeResolution" />  
                </xs:complexType>  
            </xs:element>  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="AggregationQuery">  
        <xs:sequence>  
            <xs:element name="Threshold" type="Threshold" minOccurs="1" maxOccurs="1" nillable="false" />  
            <xs:element name="SlicerDimensions" type="SlicerDimensions" minOccurs="1" maxOccurs="1" />  
            <xs:element name="TimeWindow" type="TimeWindow" minOccurs="0" maxOccurs="1" nillable="false" />  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="SlicerDimensions">  
        <xs:sequence>  
            <xs:element name="SlicerDimension" type="SlicerDimension" minOccurs="0" maxOccurs="unbounded" nillable="false" />  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="SlicerDimension">  
        <xs:sequence>  
            <xs:element name="Level" type="Level" minOccurs="0" maxOccurs="unbounded" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMAnalysisObjectName" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="Level">  
        <xs:simpleContent>  
            <xs:extension base="xs:string">  
                <xs:attribute name="Name" type="SlicerDimLevelName" use="optional" />  
            </xs:extension>  
        </xs:simpleContent>  
    </xs:complexType>  
  
    <xs:complexType name="Threshold">  
        <xs:attribute name="Name" type="BAMAnalysisObjectName" use="required" />  
        <xs:attribute name="Condition" type="xs:string" use="required" />  
        <xs:attribute name="Value" type="xs:double" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="TimeWindow">  
        <xs:sequence>  
            <xs:element name="TimeWindowDuration" type="TimeDurationSimple" minOccurs="1" maxOccurs="1" nillable="false" />  
            <xs:element name="Increment" type="TimeDurationNoQuarter" minOccurs="1" maxOccurs="1" nillable="false" />  
        </xs:sequence>  
        <xs:attribute name="Enabled" type="xs:boolean" use="required" />  
        <xs:attribute name="TimeDimension" type="xs:string" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="Owners">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="Owner" type="xs:token" />  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="Subscriptions">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="Subscription" type="Subscription" />  
        </xs:sequence>  
    </xs:complexType>  
  
    <xs:complexType name="Subscription">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="1" name="UserName" type="xs:token" />  
            <xs:element minOccurs="0" maxOccurs="1" name="Address" type="xs:string" />  
        </xs:sequence>  
        <xs:attribute name="Type" type="SubscriptionType" use="required" />  
        <xs:attribute name="ID" type="xs:string" use="optional" />  
    </xs:complexType>  
  
    <xs:complexType name="Measure">  
        <xs:attribute name="Name" type="BAMAnalysisObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
        <xs:attribute name="AliasRef" type="xs:NCName" use="required" />  
        <xs:attribute name="AggregationFunction" type="AggregationFunctionType" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="DataDimension">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="LevelAliasRef" type="xs:NCName" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMAnalysisObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="TimeDimension">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="TimeLevel" type="TimeLevel" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMAnalysisObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
        <xs:attribute name="TimeStampAliasRef" type="xs:NCName" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="TimeLevel">  
        <xs:simpleContent>  
            <xs:extension base="TimePart">  
                <xs:attribute name="Name" type="BAMToken" use="optional" />  
            </xs:extension>  
        </xs:simpleContent>  
    </xs:complexType>  
  
    <xs:complexType name="NumericRangeDimension">  
        <xs:sequence>  
            <xs:element minOccurs="2" maxOccurs="unbounded" name="Range" type="RangeType" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMAnalysisObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
        <xs:attribute name="NumericAliasRef" type="xs:NCName" use="required" />  
    </xs:complexType>  
    <xs:complexType name="RangeType">  
        <xs:attribute name="Name" type="BAMAnalysisObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
        <xs:attribute name="From" type="xs:double" />  
        <xs:attribute name="To" type="xs:double" />  
    </xs:complexType>  
  
    <xs:complexType name="ProgressDimension">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="1" name="ProgressStage" type="ProgressStage" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMAnalysisObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="ProgressStage">  
        <xs:sequence>  
            <xs:element minOccurs="0" maxOccurs="unbounded" name="ProgressStage" type="ProgressStage" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMAnalysisObjectName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
        <xs:attribute name="TimeStampAliasRef" type="xs:NCName" use="required" />  
    </xs:complexType>  
  
    <xs:complexType name="RealTimeAggregation">  
        <xs:sequence>  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="MeasureRef" type="xs:NCName" />  
            <xs:element minOccurs="1" maxOccurs="unbounded" name="DimensionRef" type="xs:NCName" />  
        </xs:sequence>  
        <xs:attribute name="Name" type="BAMActivityViewAndRtaName" use="required" />  
        <xs:attribute name="ID" type="xs:ID" use="required" />  
    </xs:complexType>  
  
    <xs:simpleType name="CheckpointDataType">  
        <xs:restriction base="BAMToken">  
            <xs:enumeration value="NVARCHAR" />  
            <xs:enumeration value="DATETIME" />  
            <xs:enumeration value="INT" />  
            <xs:enumeration value="FLOAT" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="AggregationFunctionType">  
        <xs:restriction base="BAMToken">  
            <xs:enumeration value="Sum" />  
            <xs:enumeration value="Count" />  
            <xs:enumeration value="Avg" />  
            <xs:enumeration value="Min" />  
            <xs:enumeration value="Max" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="AlertPriority">  
        <xs:restriction base="xs:positiveInteger">  
            <xs:minInclusive value="1"/>  
            <xs:maxInclusive value="3"/>  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="DurationTimeResolution">  
        <xs:restriction base="BAMToken">  
            <xs:enumeration value="Day" />  
            <xs:enumeration value="Hour" />  
            <xs:enumeration value="Minute" />  
            <xs:enumeration value="Second" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="TimePart">  
        <xs:restriction base="BAMToken">  
            <xs:enumeration value="Year" />  
            <xs:enumeration value="Quarter" />  
            <xs:enumeration value="Month" />  
            <xs:enumeration value="Week" />  
            <xs:enumeration value="Day" />  
            <xs:enumeration value="Hour" />  
            <xs:enumeration value="Minute" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="TimePartNoQuarter">  
        <xs:restriction base="BAMToken">  
            <xs:enumeration value="Year" />  
            <xs:enumeration value="Month" />  
            <xs:enumeration value="Week" />  
            <xs:enumeration value="Day" />  
            <xs:enumeration value="Hour" />  
            <xs:enumeration value="Minute" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="TimePartSimple">  
        <xs:restriction base="BAMToken">  
            <xs:enumeration value="Week" />  
            <xs:enumeration value="Day" />  
            <xs:enumeration value="Hour" />  
            <xs:enumeration value="Minute" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:complexType name="TimeDuration">  
        <xs:simpleContent>  
            <xs:extension base="xs:integer">  
                <xs:attribute name="Unit" type="TimePart" use="required" />  
            </xs:extension>  
        </xs:simpleContent>  
    </xs:complexType>  
  
    <xs:complexType name="TimeDurationNoQuarter">  
        <xs:simpleContent>  
            <xs:extension base="xs:integer">  
                <xs:attribute name="Unit" type="TimePartNoQuarter" use="required" />  
            </xs:extension>  
        </xs:simpleContent>  
    </xs:complexType>  
  
    <xs:complexType name="TimeDurationSimple">  
        <xs:simpleContent>  
            <xs:extension base="xs:integer">  
                <xs:attribute name="Unit" type="TimePartSimple" use="required" />  
            </xs:extension>  
        </xs:simpleContent>  
    </xs:complexType>  
  
    <xs:simpleType name="BAMSqlObjectName">  
        <xs:restriction base="BAMToken">  
            <xs:minLength value="1" />  
            <xs:maxLength value="100" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="BAMAliasName">  
        <xs:restriction base="BAMToken">  
            <xs:minLength value="1" />  
            <xs:maxLength value="50" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="BAMAnalysisObjectName">  
        <xs:restriction base="BAMToken">  
            <xs:minLength value="1" />  
            <xs:maxLength value="20" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="BAMActivityViewAndRtaName">  
        <xs:restriction base="BAMToken">  
            <xs:minLength value="1" />  
            <xs:maxLength value="48" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="BAMActViewName">  
        <xs:restriction base="BAMToken">  
            <xs:minLength value="1" />  
            <xs:maxLength value="52" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="SubscriptionType">  
        <xs:restriction base="BAMToken">  
            <xs:enumeration value="email" />  
            <xs:enumeration value="file" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="BAMAlertMessage">  
        <xs:restriction base="xs:string">  
            <xs:minLength value="0" />  
            <xs:maxLength value="1024" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="SlicerDimLevelName">  
        <xs:restriction base="xs:string">  
            <xs:pattern value="\(?(\p{Ll}|\p{Lu}|\p{Lo}|\p{Lt}|\p{Nl}|_)([ ]?(_|\p{L}|\p{Nl}|\p{Nd})+)*\)?" />  
            <xs:whiteSpace value="preserve" />  
        </xs:restriction>  
    </xs:simpleType>  
  
    <xs:simpleType name="BAMToken">  
        <xs:restriction base="xs:string">  
            <xs:pattern value="(\p{Ll}|\p{Lu}|\p{Lo}|\p{Lt}|\p{Nl}|_)([ ]?(_|\p{L}|\p{Nl}|\p{Nd})+)*" />  
            <xs:whiteSpace value="preserve" />  
        </xs:restriction>  
    </xs:simpleType>  
  
</xs:schema>  

示例 XML

以下示例是符合 BAM 定义架构的 XML 文件。

<?xml version="1.0" encoding="utf-8" ?>  
<BAM:BAMDefinition xmlns:BAM='urn:schemas-microsoft.com:BAM' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>  
   <Activity Name="PurchaseOrder" ID="PurchaseOrder">  
      <Checkpoint Name="POReceived" ID="POReceived" DataType="DATETIME" />  
      <Checkpoint Name="POApproved" ID="POApproved" DataType="DATETIME" />  
      <Checkpoint Name="PODenied" ID="PODenied" DataType="DATETIME" />  
      <Checkpoint Name="POShipped" ID="POShipped" DataType="DATETIME" />  
      <Checkpoint Name="POAmount" ID="POAmount" DataType="FLOAT" />  
      <Checkpoint Name="OrderChannel" ID="OrderChannel" DataType="NVARCHAR" DataLength="30" />  
      <Checkpoint Name="CustomerName" ID="CustomerName" DataType="NVARCHAR" DataLength="50" />  
      <Checkpoint Name="CustomerState" ID="CustomerState" DataType="NVARCHAR" DataLength="20" />  
      <Checkpoint Name="CustomerCity" ID="CustomerCity" DataType="NVARCHAR" DataLength="30" />  
      <Checkpoint Name="ProductName" ID="ProductName" DataType="NVARCHAR" DataLength="50" />  
      <Checkpoint Name="ProductCategory" ID="ProductCategory" DataType="NVARCHAR" DataLength="20" />  
      <Index Name="LocationIndex" ID="LocationIndex">  
         <CheckpointRef>CustomerState</CheckpointRef>  
         <CheckpointRef>CustomerCity</CheckpointRef>  
      </Index>  
      <Index Name="CategoryIndex" ID="CategoryIndex">  
         <CheckpointRef>ProductCategory</CheckpointRef>  
      </Index>  
   </Activity>  
   <View Name="SalesManagerView" ID="SalesManagerView">  
      <ActivityView Name="PurchaseOrderView" ID="PurchaseOrderView" ActivityRef="PurchaseOrder">  
         <Alias Name="POReceivedTime" ID="POReceivedTime">  
            <CheckpointRef>POReceived</CheckpointRef>  
         </Alias>  
         <Alias Name="PODecisionTime" ID="PODecisionTime">  
            <CheckpointRef>POApproved</CheckpointRef>  
            <CheckpointRef>PODenied</CheckpointRef>  
         </Alias>  
         <Alias Name="PODeniedTime" ID="PODeniedTime">  
            <CheckpointRef>PODenied</CheckpointRef>  
         </Alias>  
         <Alias Name="POApprovedTime" ID="POApprovedTime">  
            <CheckpointRef>POApproved</CheckpointRef>  
         </Alias>  
         <Alias Name="POShippedTime" ID="POShippedTime">  
            <CheckpointRef>POShipped</CheckpointRef>  
         </Alias>  
         <Alias Name="POEndedTime" ID="POEndedTime">  
            <CheckpointRef>PODenied</CheckpointRef>  
            <CheckpointRef>POShipped</CheckpointRef>  
         </Alias>  
         <Alias Name="Amount" ID="Amount">  
            <CheckpointRef>POAmount</CheckpointRef>  
         </Alias>  
         <Alias Name="CustomerName" ID="CustomerNameAlias">  
            <CheckpointRef>CustomerName</CheckpointRef>  
         </Alias>  
         <Alias Name="State" ID="State">  
            <CheckpointRef>CustomerState</CheckpointRef>  
         </Alias>  
         <Alias Name="City" ID="City">  
            <CheckpointRef>CustomerCity</CheckpointRef>  
         </Alias>  
         <Alias Name="ProductCategory" ID="Category">  
            <CheckpointRef>ProductCategory</CheckpointRef>  
         </Alias>  
         <Alias Name="ProductName" ID="ProductNameAlias">  
            <CheckpointRef>ProductName</CheckpointRef>  
         </Alias>  
         <Duration Name="POProgressDuration" ID="PODuration" TimeResolution="Hour">  
            <FromAliasRef>POReceivedTime</FromAliasRef>  
            <ToAliasRef>POEndedTime</ToAliasRef>  
         </Duration>  
         <Duration Name="POEvaluationDuration" ID="EvalDuration" TimeResolution="Hour">  
            <FromAliasRef>POReceivedTime</FromAliasRef>  
            <ToAliasRef>PODecisionTime</ToAliasRef>  
         </Duration>  
         <Duration Name="POFulfillmentDuration" ID="FulfillDuration" TimeResolution="Hour">  
            <FromAliasRef>POApprovedTime</FromAliasRef>  
            <ToAliasRef>POShippedTime</ToAliasRef>  
         </Duration>  
      </ActivityView>  
   </View>  
   <Cube Name="POCube" DisplayName="PO Cube" ID="POCube" ActivityViewRef="PurchaseOrderView">  
      <Measure Name="POCount" ID="POCount" AliasRef="Category" AggregationFunction="Count" />  
      <Measure Name="PurchaseAmountTotal" ID="SumPurchaseAmount" AliasRef="Amount" AggregationFunction="Sum" />  
      <Measure Name="PurchaseAmountMax" ID="MaxPurchaseAmount" AliasRef="Amount" AggregationFunction="Max" />  
      <Measure Name="PurchaseAmountMin" ID="MinPurchaseAmount" AliasRef="Amount" AggregationFunction="Min" />  
      <Measure Name="AvgPurchaseAmount" ID="AvgPurchaseAmount" AliasRef="Amount" AggregationFunction="Avg" />  
      <Measure Name="EvalDurationTotal" ID="SumEvalDuration" AliasRef="EvalDuration" AggregationFunction="Sum" />  
      <Measure Name="EvalDurationMin" ID="MinEvalDuration" AliasRef="EvalDuration" AggregationFunction="Min" />  
      <Measure Name="FulfillDurationTotal" ID="SumFulfillDuration" AliasRef="FulfillDuration" AggregationFunction="Sum" />  
      <DataDimension Name="Location" ID="Location">  
         <LevelAliasRef>State</LevelAliasRef>  
         <LevelAliasRef>City</LevelAliasRef>  
      </DataDimension>  
      <DataDimension Name="Product" ID="Product">  
         <LevelAliasRef>Category</LevelAliasRef>  
         <LevelAliasRef>ProductNameAlias</LevelAliasRef>  
      </DataDimension>  
      <TimeDimension Name="POReceivedTime" ID="POStartTimeDim" TimeStampAliasRef="POReceivedTime">  
         <TimeLevel>Year</TimeLevel>  
         <TimeLevel>Month</TimeLevel>  
         <TimeLevel>Day</TimeLevel>  
      </TimeDimension>  
      <NumericRangeDimension Name="POAmountRange" ID="POAmountRange" NumericAliasRef="Amount">  
         <Range Name="SmallPO" ID="range1" To="1000"/>  
         <Range Name="MediumPO" ID="range2" From="1000" To="100000"/>  
         <Range Name="LargePO" ID="range3" From="100000"/>  
      </NumericRangeDimension>  
      <ProgressDimension Name="POState" ID="POState">  
         <ProgressStage Name="POReceived" ID="POReceivedState" TimeStampAliasRef="POReceivedTime">  
            <ProgressStage Name="Evaluating" ID="Evaluating" TimeStampAliasRef="POReceivedTime"/>  
            <ProgressStage Name="Approved" ID="ApprovedState" TimeStampAliasRef="POApprovedTime">  
               <ProgressStage Name="Fulfilllment" ID="FulfillmentState" TimeStampAliasRef="POApprovedTime"/>  
               <ProgressStage Name="Shipped" ID="ShippedState" TimeStampAliasRef="POShippedTime"/>  
            </ProgressStage>  
            <ProgressStage Name="Denied" ID="Denied" TimeStampAliasRef="PODeniedTime"/>  
         </ProgressStage>  
      </ProgressDimension>  
      <RealTimeAggregation Name="POByLocation" ID="POAmountByLocation">  
         <MeasureRef>SumPurchaseAmount</MeasureRef>  
         <MeasureRef>SumEvalDuration</MeasureRef>  
         <MeasureRef>AvgPurchaseAmount</MeasureRef>  
         <MeasureRef>POCount</MeasureRef>  
         <DimensionRef>Location</DimensionRef>  
         <DimensionRef>Product</DimensionRef>  
         <DimensionRef>POStartTimeDim</DimensionRef>  
         <DimensionRef>POAmountRange</DimensionRef>  
         <DimensionRef>POState</DimensionRef>  
      </RealTimeAggregation>  
   </Cube>  
  
    <Alerts>  
        <ViewAlert>  
            <ViewRef>SalesManagerView</ViewRef>           
            <CubeRef>POCube</CubeRef>  
            <PollingInterval Unit="Minute">1</PollingInterval>  
            <MaxAlertsPerTimeUnit TimeUnit="Hour">1</MaxAlertsPerTimeUnit>  
            <AlertInstance Name="PoCountAlert" Priority="1" Enabled="true" Security="public" CreatedBy="" CreationDate="2002-10-10T12:00:00Z" LastModifiedDate="2002-10-10T12:00:00Z" ExtensionRef="PurchaseOrderCube">  
                <Message>Order from Microsoft (WA) has arrived.</Message>  
                <AggregationQuery>  
                    <Threshold Name="POCount" Condition="<" Value="10" />  
                    <SlicerDimensions>  
                        <SlicerDimension Name="Location">  
                            <Level Name="State">WA</Level>  
                            <Level Name="City">Redmond</Level>  
                        </SlicerDimension>   
                        <SlicerDimension Name="Product">  
                            <Level Name="Category">CategoryName</Level>  
                            <Level Name="ProductNameAlias">ProductName</Level>  
                        </SlicerDimension>   
                        <SlicerDimension Name="POAmountRange">  
                            <Level Name="MediumPO"/>  
                        </SlicerDimension>   
                        <SlicerDimension Name="POState">  
                            <Level Name="POReceived"></Level>  
                            <Level Name="Approved"></Level>  
                            <Level Name="Shipped"></Level>  
                        </SlicerDimension>   
                    </SlicerDimensions>  
                    <TimeWindow Enabled="true" TimeDimension="POReceivedTime">  
                        <TimeWindowDuration Unit="Day">1</TimeWindowDuration>  
                        <Increment Unit="Day">1</Increment>  
                    </TimeWindow>  
                </AggregationQuery>  
                <Owners>  
                    <Owner>REDMOND\btslabs</Owner>  
                    <Owner>redmond\owner1</Owner>  
                </Owners>  
                  <Subscriptions>  
                    <Subscription Type="email" ID="">  
                        <UserName>redmond\osubscriber`</UserName>  
                        <Address>email address</Address>  
                    </Subscription>  
                    <Subscription Type="file" ID="">  
                        <UserName>redmond\subscriber2</UserName>  
                    </Subscription>  
                </Subscriptions>  
            </AlertInstance>  
        </ViewAlert>  
        <ViewAlert>  
            <ViewRef>SalesManagerView</ViewRef>   
            <ActivityViewRef>PurchaseOrderView</ActivityViewRef>   
            <PollingInterval Unit="Minute">1</PollingInterval>  
            <MaxAlertsPerTimeUnit TimeUnit="Hour">1</MaxAlertsPerTimeUnit>  
            <AlertInstance Name="alert2" Priority="1" Enabled="true" Security="public" CreatedBy="" CreationDate="2002-10-10T12:00:00Z" LastModifiedDate="2002-10-10T12:00:00Z">  
                <Message>Order from Microsoft (WA) has arrived.</Message>  
                 <InstanceQuery>  
                    <SelectClauses>  
                        <Column>Amount</Column>  
                        <Column>POState</Column>  
                    </SelectClauses>  
                    <WhereClauses>  
                        <Filter Field="Amount" Condition=">" Value="100" Logic="AND" />   
                        <Filter Field="State" Condition="=" Value="WA" Logic="AND"/>   
                    </WhereClauses>  
                <Owners>  
                    <Owner>REDMOND\btslabs</Owner>  
                    <Owner>redmond\owener1</Owner>  
                </Owners>  
                <Subscriptions>  
                    <Subscription Type="email" ID="">  
                        <UserName>redmond\subscriber2</UserName>  
                        <Address>email address</Address>  
                    </Subscription>  
                    <Subscription Type="file" ID="">  
                        <UserName>redmond\subscriber3</UserName>  
                    </Subscription>  
                </Subscriptions>  
            </AlertInstance>  
        <AlertInstance Name="Alert3" Priority="1" Enabled="true" Security="public" CreatedBy="" CreationDate="2002-10-10T12:00:00Z" LastModifiedDate="2002-10-10T12:00:00Z">  
            <Message>Order from Microsoft (WA) has arrived.</Message>  
            <InstanceQuery>  
                <SelectClauses>  
                    <Column>Amount</Column>  
                    <Column>POState</Column>  
                </SelectClauses>  
                <WhereClauses>  
                    <Filter Field="Amount" Condition=">" Value="100" Logic="AND" />   
                    <Filter Field="State" Condition="=" Value="WA" Logic="AND"/>   
                </WhereClauses>  
            </InstanceQuery>  
            <Owners>  
                <Owner>REDMOND\owner2</Owner>  
            </Owners>  
            <Subscriptions>  
                <Subscription Type="email" ID="">  
                    <UserName>redmond\subscriber1</UserName>  
                    <Address>email address</Address>  
                </Subscription>  
                <Subscription Type="file" ID="">  
                    <UserName>redmond\subscriber2</UserName>  
                </Subscription>  
            </Subscriptions>  
        </AlertInstance>  
        </ViewAlert>  
    </Alerts>  
</BAM:BAMDefinition>  

另请参阅

BAM 配置架构
BAM 动态基础结构