您的运输管理数据模板
您的运输管理数据模板
- 建议收集的属性
- 需要追踪的关键活动
- 提取指南
运输管理属性
| 名称 | 描述 | ||
|---|---|---|---|
| Event 时间 EventTime | 特定运输活动或事件发生的精确日期和时间。 | ||
| 描述 此时间戳记录了“承运商已分配”或“已收到交付证明”等活动在系统中记录的确切时刻。时间戳是流程挖掘的基础,因为它们为每笔货运建立事件的时间顺序。 这些时间戳的准确性对于所有基于时间的分析都至关重要。它们用于计算活动间的周期时间、衡量流程持续时间、识别延迟并根据服务水平协议评估绩效。分析事件时间有助于精准发现流程中损耗时间的地方。 为何重要 此时间戳对于按时间顺序排列事件以及计算周期时间和延迟等所有绩效指标至关重要。 获取方式 源自 OTM 跟踪事件或状态历史表中的事件相关时间戳字段。 示例 2023-10-26T08:00:00Z2023-10-27T14:30:00Z2023-10-28T09:15:00Z | |||
| 活动名称 ActivityName | 货运过程中发生的特定事件或里程碑的名称。 | ||
| 描述 此属性描述了运输生命周期中的单个步骤,例如“货运已计划”、“货物已提取”或“货物已交付”。每项活动都代表一个独立的业务事件,使货运向完成状态推进一步。 分析这些活动的顺序和持续时间是流程挖掘的核心。它能发现实际的流程流,识别各步骤之间的瓶颈,并衡量对标准操作程序的执行程度。活动流中的变体可以凸显出异常、返工或偏离最佳路径的情况。 为何重要 它定义了流程图中的步骤,允许对运输轨迹、瓶颈和偏离进行可视化和分析。 获取方式 此信息源自 Oracle 运输管理系统中的跟踪事件表或状态变更日志。具体的活动名称可能由事件代码和描述拼接而成。 示例 发运计划已制定货物已揽收已清关货物已送达 | |||
| 货运 ShipmentId | 单次货运的唯一标识符,作为跟踪所有相关运输活动的主要案例 ID (Case ID)。 | ||
| 描述 货运 ID (Shipment ID) 唯一标识了货物从发货人到收货人的单次移动。该属性是流程分析的核心,它将计划、订舱、取货、在途、交付和开票等所有相关事件归入一个单独的“案例” (case) 中。 在流程挖掘中,按货运 ID 分析事件可以获得运输生命周期的完整端到端视图。它用于计算总周期时间、准时交付率和每单运输成本等关键指标,从而全面了解流程效率和客户服务水平。 为何重要 这是连接所有流程步骤的核心案例 ID,支持对每笔独立货运的完整运输过程进行全面分析。 获取方式 这是 Oracle 运输管理系统中的主键,通常位于货运或订单管理表中。具体表名和字段名请参考 OTM 文档。 示例 SH-0012345SH-0012346SH-0012347 | |||
| 客户要求的交货日期 RequestedDeliveryDate | 客户要求或在服务水平协议 (SLA) 中约定的目标交付日期和时间。 | ||
| 描述 此属性捕获货运的目标交付时间戳。它代表了对客户的承诺,是衡量准时执行情况的主要基准。 在流程挖掘中,将此日期与实际交付时间戳(来自“货物已交付”活动)进行比较,以确定货运是准时还是延迟。这是“准时交付率”KPI 的基础,对于“交付绩效概览”仪表板至关重要。分析偏差有助于识别导致延迟的系统性原因并提升客户满意度。 为何重要 这是衡量准时交付绩效的主要基准,也是关乎客户满意度和卓越运营的关键 KPI。 获取方式 此信息通常存储在 OTM 的订单或货运级别,常见于与交付日期或预约相关的字段。 示例 2023-11-15T17:00:00Z2023-11-20T12:00:00Z2023-11-22T09:00:00Z | |||
| 延误原因 DelayReason | 一个用于解释运输进度延迟原因的代码或描述。 | ||
| 描述 当货运延迟时,此属性提供原因,例如“天气”、“海关扣留”、“港口拥堵”或“机械故障”。此信息从承运商更新或 OTM 中的手动输入中捕获。 此属性对于交付延迟的根源分析至关重要。通过对延迟原因进行分类和统计,企业可以识别供应链中最常见的问题。这支持了针对性的改进措施,例如为某些路线选择更可靠的承运商,或改进单据准备以加快清关速度。 为何重要 深入分析货运延迟的根源,从而采取有针对性的措施缓解常见问题并提升准时交付率。 获取方式 通常在 OTM 的跟踪事件详情中捕获。它可能与特定的异常或延迟事件代码相关联。 示例 天气原因延迟海关查验港口拥堵交通 | |||
| 承运商名称 CarrierName | 负责执行货运的运输承运商或服务商名称。 | ||
| 描述 此属性用于标识负责执行货物运输的物流合作伙伴。例如大型货运公司、当地快递公司或海运公司。 按承运商分析绩效是运输流程挖掘的主要目标。通过此属性可以对货运进行细分,从而在准时交付率、单笔货运成本、运输时间以及延迟或账单差异等问题的发生频率等指标上对各承运商进行比较。这些洞察对于承运商选择、合同谈判和绩效管理至关重要。 为何重要 支持跨不同承运商的绩效标杆分析,这对于优化承运商选择、谈判和降低成本至关重要。 获取方式 位于 OTM 的运输详情中,从分配的承运商或服务提供商记录关联而来。它可能存储在与运输和服务提供商相关的表中。 示例 联邦快递货运 (FedEx Freight)UPS 供应链解决方案马士基航运 (Maersk Line)Knight-Swift 运输 | |||
| 货运成本 ShipmentCost | 运输该货物产生的总运费或财务费用。 | ||
| 描述 此属性代表与货运相关的总财务成本,包括承运商费用、燃油附加费和其他杂项费用。它是衡量运输流程财务表现的关键指标。 分析“货运成本”可以计算出“平均单笔货运承运成本”KPI。可以按承运商、航线、运输模式或货运类型进行细分,以识别成本节约机会。它还用于“运费账单差异分析”,对比计划成本与实际成本。 为何重要 提供分析运输支出所需的财务数据,识别成本节约机会,并衡量流程低效对财务造成的影响。 获取方式 此信息通常位于 OTM 货运的财务或成本部分,通常在货运费率评估和结算后填入。 示例 250.751200.00545.50 | |||
| 运输模式 TransportationMode | 该货运所使用的运输方式,如公路、铁路、海运或空运。 | ||
| 描述 此属性按运输方式对货运进行分类。常见模式包括整车 (FTL)、零担 (LTL)、海运、空运和铁路。这是货运的一个基本特征,会影响成本、运输时间和复杂度。 在分析中,运输模式是分类的关键维度。通过它,可以比较不同模式下的流程绩效和成本。例如,它可以帮助识别哪些模式更容易出现在途延迟,或者哪种模式的每英里成本更高,从而为物流网络的战略决策提供支持。 为何重要 允许按运输方式细分绩效和成本分析,揭示针对陆运、空运、海运或铁路物流的特定洞察。 获取方式 这是 OTM 货运级别的标准属性,通常位于专门的“模式”或“运输类型”字段中。 示例 整车运输 (FTL)零担运输 (LTL)海运空运 | |||
| 最后数据更新 LastDataUpdate | 指示该事件对应数据上次在源系统中被刷新或抽取的时间戳。 | ||
| 描述 此属性记录了数据最近一次从 Oracle 运输管理系统抓取的时间。它反映的是所分析数据的时效性,而非业务事件发生的时间。 此时间戳对于理解流程挖掘分析的及时性至关重要。它能让用户明确是在查看实时信息,还是特定时间点的快照。这对于管理数据更新周期以及确保基于当前信息做出决策至关重要。 为何重要 指示数据的实时性,确保用户了解分析的时效性以及下次数据刷新的预期时间。 获取方式 这通常是在数据摄取或 ETL 过程中由系统自动生成的时间戳。 示例 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| 是否准时交付 IsOnTimeDelivery | 一个计算出的标记,用于指示运输是否在要求的交付日期当天或之前送达。 | ||
| 描述 此布尔属性通过比较“货物已交付”活动的时间戳与“要求交付日期”得出。如果准时或提前交付,则为“true”;如果延迟交付,则为“false”。 此属性直接驱动“准时交付率”KPI,是“交付绩效概览”仪表板的关键组成部分。它通过为每笔货运提供清晰的二元结果,简化了交付绩效分析,便于筛选、汇总以及可视化准时与延迟货运的情况。 为何重要 这一计算得出的标志简化了“准时交付”KPI 的衡量,并支持对准时与延迟货运进行轻松的筛选和分析。 获取方式 此属性不在源系统中。它是在数据转换期间通过比较“货物已交付”活动时间戳与“RequestedDeliveryDate”属性计算得出的。 示例 truefalse | |||
| 是否已重新路由 IsRerouted | 指示在初始预订后是否更改了运输路线的标记。 | ||
| 描述 如果货运在计划和订舱后经历了重大重新路由事件,则此布尔标志设为“true”。原因可能包括客户请求、意外中断或优化机会。 此属性直接支持“货运重新路由率”KPI 和“重新路由及加急洞察”仪表板。跟踪重新路由的频率有助于识别计划或执行中的潜在问题。它揭示了运营中的不稳定性及相关成本,使管理人员能够找到减少高成本且具破坏性变更的方法。 为何重要 有助于量化运营异常(如重新路由)的频率和影响,突出计划和执行过程中的低效环节。 获取方式 该标志通过检测事件日志中的特定重新路由事件,或将最终路径与最初计划路径进行对比得出。 示例 truefalse | |||
| 来源国 OriginCountry | 货运起始的国家。 | ||
| 描述 此属性根据发货人的位置指定货运的起始国家。它是用于物流分析的关键地理信息。 按始发国分析流程有助于了解绩效的区域差异。例如,根据原产地的不同,清关时间、承运商成本和运输时长可能会有显著差异。这种细分对于管理国际物流和识别特定地区的瓶颈至关重要。 为何重要 支持对运输流程进行地理维度分析,有助于识别特定地区的瓶颈、成本和绩效差异。 获取方式 派生自运输源位置或托运人的地址详情,存储在 OTM 的位置主数据中。 示例 美国DEU中国墨西哥 | |||
| 清关代理 CustomsAgent | 负责管理该货运清关流程的海关经纪人或代理。 | ||
| 描述 对于国际运输,此属性标识负责处理海关单据和程序的第三方代理或内部团队。该代理的绩效会显著影响总运输时间。 按“清关代理”分析“清关周期时间”有助于对其绩效进行标杆管理。它可以识别哪些代理在特定国家或针对特定商品类型最高效。这一洞察对于选择最佳清关合作伙伴以及与表现不佳的代理合作改进流程非常有价值。 为何重要 支持报关行的绩效衡量,有助于识别最高效的合作伙伴并减少与海关相关的延误。 获取方式 此信息可能作为服务提供商或参与方角色存储在 OTM 的国际货运详情中。 示例 全球清关服务利文斯顿国际 (Livingston International)飞协博 (Flexport) | |||
| 源系统 SourceSystem | 标识事件数据的来源系统,例如 Oracle Transportation Management。 | ||
| 描述 此属性指定生成数据的源应用程序。在复杂的物流环境中,数据可能来自 OTM、仓库管理系统 (WMS)、通过 EDI 连接的承运商系统或其他集成平台。 了解源系统对于数据治理、质量评估和故障排除非常重要。它有助于理解数据的上下文,并能解释数据粒度或时效性的差异。在分析中,它可以用于仅筛选来自特定可信系统的事件。 为何重要 它提供了关于数据来源的关键背景信息,这对于多系统环境下的数据验证和分析非常重要。 获取方式 这通常是在数据提取过程中添加的静态值,用于标记记录的来源。 示例 Oracle OTMOTM CloudSAP TM | |||
| 用户名称 UserName | 执行或负责某项特定活动的用户名称或 ID。 | ||
| 描述 此属性标识执行特定事件(如“货运已计划”或“承运商已分配”)的个人用户或系统代理。此信息有助于明确责任归属并洞察资源在流程中的参与情况。 在流程挖掘中,按用户分析活动有助于了解工作负载分布、确定培训需求并比较不同用户或团队的绩效。它还可以用于区分人工操作与系统自动执行的活动。 为何重要 明确责任归属,并支持按个人用户或团队分析工作负载和绩效。 获取方式 源自 OTM 历史表或日志表中的状态变更/事件相关的用户 ID 字段(例如 INSERT_USER)。 示例 JSMITH物流计划员 ASYSTEM_AUTO | |||
| 目的地国家 DestinationCountry | 货运计划交付的目的地国家。 | ||
| 描述 此属性根据收货人的位置指定货运的最终目的地国家。它补充了始发国信息,用于地理流程分析。 与始发国类似,按目的地国家分析对于理解不同贸易通道的绩效差异至关重要。这在分析清关时间、最后一公里交付绩效以及特定区域的承运商效率时尤为重要,有助于针对不同目的地市场的要求量身定制物流策略。 为何重要 对于分析特定贸易航线的绩效以及了解与目的地市场海关、承运商和法规相关的挑战至关重要。 获取方式 派生自运输目的地位置或收货人的地址详情,存储在 OTM 的位置主数据中。 示例 CAN法国JPN巴西 | |||
| 端到端周期时间 EndToEndCycleTime | 从最初的运输请求到货物最终交付的总持续时间。 | ||
| 描述 此计算指标用于衡量货运案例的总耗时。它通常计算为“收到运输请求”活动与“货物已交付”活动之间的时间差。 此属性是“平均端到端周期时间”KPI 的基础。它从整体上衡量了整个运输流程的效率。分析这一时长有助于识别耗时过长的货运任务,并为衡量流程改进举措的影响提供基准。 为何重要 提供衡量整体流程速度的关键指标,帮助识别耗时过长的货运任务,并跟踪随时间推移的改进情况。 获取方式 此属性不在源系统中。它是在流程挖掘分析或数据转换期间在案例级别计算得出的。 示例 5 天 4 小时12 天 8 小时 30 分钟2天1小时 | |||
| 货运状态 ShipmentStatus | 货运在其生命周期中的总体当前状态,例如“已计划”、“在途”或“已交付”。 | ||
| 描述 此属性提供货运在整体流程中所处位置的高级摘要。与作为时间点事件的“活动”不同,“状态”代表货运案例的当前阶段。 虽然流程挖掘侧重于活动流,但总体状态对于筛选案例和在仪表板中提供上下文非常有用。例如,分析可能仅关注“已完成”的货运,或调查为什么许多货运异常长时间地卡在“在途”状态。 为何重要 提供货运进度的概览摘要,便于在分析中对案例进行筛选和分段。 获取方式 可在 OTM 的主运输记录中获取,代表其在工作流中的当前状态。 示例 已计划BOOKED运输中已送达 | |||
| 货运类型 ShipmentType | 运输的分类,例如按服务级别、商品类型或业务部门划分。 | ||
| 描述 此属性为货运提供特定业务类别的划分,例如“标准”、“加急”、“危险品”或“公司间”。这种分类有助于应用不同的业务规则、优先级或分析视角。 在流程挖掘中将“货运类型”作为分析维度,可以比较不同类型货运的流程表现。这有助于发现某些特定类型是否更容易出现延迟、成本更高或遵循非标准流程路径。这些洞察有助于定制化流程,从而更好地处理每种货运类型的特定需求。 为何重要 允许根据业务背景细分分析,有助于了解不同类型的运单是否遵循不同的流程或具有不同的绩效水平。 获取方式 这通常是 OTM 中货运或订单记录上的可配置字段或属性。 示例 标准已加急国际国内 | |||
| 运费账单差异 FreightBillDiscrepancy | 指示在审计运费账单时是否发现差异的标记。 | ||
| 描述 如果从承运商收到的货运账单与 OTM 计算的预期成本不符,则此布尔属性设置为“true”。差异可能源于错误的费率、杂费或其他计费错误。 此属性是“货运账单差异率”KPI 的基础。按承运商、通道或货运类型分析这些标志的频率,有助于识别计费错误的根源。这支持了提高数据准确性、精简审计流程和防止超额支付的相关举措。 为何重要 通过标记存在计费错误的运单,直接支持“运费账单差异分析”,有助于减少超额支付并改善财务控制。 获取方式 这通常是在 OTM 的运费结算和发票匹配过程中设置的状态或标志。 示例 truefalse | |||
运输管理活动
| 活动 | 描述 | ||
|---|---|---|---|
| 付款已处理 | 这是最后一项活动,代表已成功向承运商支付服务费用。此事件标志着该笔货运在财务上的结案。 | ||
| 为何重要 此活动标志着运输生命周期的结束。它对于衡量承运商付款处理时间和有效管理承运商关系至关重要。 获取方式 根据关联凭单或账单状态更改为“已支付 (PAID)”推断。此类数据位于 VOUCHER 或 BILL 表中。 捕获 识别 VOUCHER.VOUCHER_STATUS_ID 更改为“已支付 (PAID)”状态的时间戳。 事件类型 inferred | |||
| 发运计划已制定 | 此活动代表 OTM 计划引擎成功地将一个或多个订单发布规划为有效的货运计划。当系统更改货运状态以表明其已计划时(例如“PLANNING_PLANNED FINAL”)捕获。 | ||
| 为何重要 这是区分需求阶段与执行阶段的关键里程碑。分析至此活动所花费的时间,有助于识别计划效率和引擎性能瓶颈。 获取方式 根据 SHIPMENT 表中运输对象的状态历史记录推断。查找指示计划完成的状态更改。 捕获 识别 SHIPMENT.SHIPMENT_STATUS_VALUE_GID 更改为“已计划 (Planned)”状态的时间戳。 事件类型 inferred | |||
| 已收到交付证明 (POD) | 这代表交付已完成的正式确认(如签收单单据)的接收和记录。这通常记录为附加到货运的特定单据类型。 | ||
| 为何重要 交付证明 (POD) 对于账单结算和纠纷解决至关重要。跟踪 POD 的接收情况有助于确保流程合规,并加快财务结算周期。 获取方式 这可以是一个显式事件,也可以根据链接到货运的 POD 单据的创建日期推断得出。请在 DOCUMENT 表中查找单据类型为 POD 的单据。 捕获 使用与该货运相关的“POD”单据类型的创建时间戳。 事件类型 explicit | |||
| 已收到运输请求 | 此活动标志着系统中运输需求的产生,通常表现为订单发布 (Order Release)。当 Oracle 运输管理系统中创建新的订单发布记录时捕获此事件,代表最初的货运需求。 | ||
| 为何重要 作为流程的起点,此活动对于衡量总的端到端周期时间和了解需求模式至关重要。它有助于分析从请求到计划所花费的时间。 获取方式 这是一个显式事件,从 ORDER_RELEASE 表中订单发布记录的创建时间戳中捕获。可以使用 INSERT_DATE 或特定的创建日期字段。 捕获 使用 ORDER_RELEASE 表中订单发布的创建时间戳。 事件类型 explicit | |||
| 货物已揽收 | 此活动表示物理运输的开始,即承运商已从始发地提取货物。当货运的第一站被标记为“已启程”(DEPARTED) 时捕获。 | ||
| 为何重要 这是标志着在途阶段开始的关键里程碑。它对于跟踪承运商的取货绩效和实际在途时间至关重要。 获取方式 根据 SHIPMENT_STOP 表中第一站的状态更改为“已出发 (DEPARTED)”或通过跟踪指示揽货的运输状态事件推断。 捕获 使用该货运在 SHIPMENT_STOP 表中第一条记录的 ACTUAL_DEPARTURE 时间戳。 事件类型 inferred | |||
| 货物已送达 | 此活动代表货物已成功交付给最终目的地的收货人。当货运的最后一站被标记实际到达时间时捕获。 | ||
| 为何重要 这是衡量准时交付绩效和端到端周期时间的主要里程碑,是运输执行流程的终点。 获取方式 根据与该运输关联的 SHIPMENT_STOP 表中最后一站记录的 ACTUAL_ARRIVAL 字段填充情况推断。 捕获 使用该货运在 SHIPMENT_STOP 表中最后一条记录的 ACTUAL_ARRIVAL 时间戳。 事件类型 inferred | |||
| 交付预约已排期 | 此活动标志着已与收货人约定具体的交付日期和时间。该事件从货运最后一站的预约数据中捕获。 | ||
| 为何重要 这是协调最终交付的关键步骤。分析从到达至排程交付之间的时间,可以揭示最后一公里运营中的瓶颈。 获取方式 根据 SHIPMENT_STOP 表中运输终点站(交付位置)预约日期和时间字段的填写情况推断。 捕获 使用交付停靠点的预约字段首次填充时的时间戳。 事件类型 inferred | |||
| 已分配承运商 | 这标志着货运已成功招标并被特定承运商接受。通过观察货运的招标状态更改为“TENDER_ACCEPTED”或类似状态来捕获。 | ||
| 为何重要 跟踪此项有助于分析承运商选择和招标流程的效率。此环节的延迟在货物移动之前就可能对整体进度产生重大影响。 获取方式 根据 SHIPMENT_TENDER 表中的状态历史记录推断,特别是寻找状态显示为承运商接受的时间戳。 捕获 使用货运招标历史中状态更改为“TENDER_ACCEPTED”的时间戳。 事件类型 inferred | |||
| 已安排取货预约 | 此活动表明已排程并记录了具体的取货日期和时间。这通常从货运停靠点的预约相关数据中捕获。 | ||
| 为何重要 预约排程是关键的协调步骤。通过分析预约环节,有助于了解排程效率及其对取货准时性的影响。 获取方式 根据 SHIPMENT_STOP 表中运输第一站(揽货位置)预约日期和时间字段的填写情况推断。 捕获 使用取货停靠点的预约字段首次填充时的时间戳。 事件类型 inferred | |||
| 已清关 | 对于国际运输,此活动代表货物在边境或港口成功通过海关的节点。这通常通过特定的运输事件或状态更新来捕获。 | ||
| 为何重要 清关是国际物流中常见的主要延误来源。跟踪此活动有助于衡量并优化清关周期时间。 获取方式 该事件通常通过手动输入或集成的“海关”货运事件捕获。请在 SHIPMENT_STATUS 表中查找与海关相关的特定事件代码。 捕获 从 SHIPMENT_STATUS 表中识别“已清关”事件的时间戳。 事件类型 explicit | |||
| 货运已取消 | 代表货运计划制定后的取消操作,提前终止了货运生命周期。这是通过“Shipment”对象的逻辑状态更改为“已取消”状态来捕获的。 | ||
| 为何重要 跟踪取消操作对于理解流程异常和故障非常重要。它有助于识别取消的原因,如需求变更或计划错误。 获取方式 根据 SHIPMENT 表中运输对象的状态历史记录推断。查找类似于“计划已取消 (PLANNING_CANCELED)”的状态更改。 捕获 识别 SHIPMENT.SHIPMENT_STATUS_VALUE_GID 更改为“已取消 (Cancelled)”状态的时间戳。 事件类型 inferred | |||
| 货运已订舱 | 代表招标成功后与承运商达成的正式订舱确认。通常在货运状态更新为“SECURE RESOURCES_BOOKED”或同等状态时捕获。 | ||
| 为何重要 这确认了承运商的承诺,并正式将货运推入执行阶段。这是衡量“货运计划周期时间”KPI 的关键步骤。 获取方式 根据 SHIPMENT 表中运输对象的状态更改推断,跟踪其在分配承运商后何时变为确认或已预订状态。 捕获 识别 SHIPMENT.SHIPMENT_STATUS_VALUE_GID 更改为“已预订 (Booked)”状态的时间戳。 事件类型 inferred | |||
| 货运运送中 | 表示货物已被揽收,目前正在前往目的地。这不是一个单一的时间点,但该状态的开始会在紧随“货物已揽收”活动后被捕获。 | ||
| 为何重要 此活动标志着运输阶段的开始,对于监控交付进度和识别在途延迟至关重要。它是“在途延迟热点”仪表板的基础数据。 获取方式 这与“货物已提取”是同一事件,但在流程模型中通常表示为一个独立的活动,以标志新阶段的开始。它源自第一站的离去。 捕获 与“货物已提取”相同:使用第一个 SHIPMENT_STOP 的 ACTUAL_DEPARTURE 时间戳。 事件类型 inferred | |||
| 运费账单已审计 | 此活动标志着运费账单审计流程的完成,即承运商发票与货运详情匹配并验证完毕。当货运的账单状态变为“VOUCHER_AUDITED”或类似状态时记录。 | ||
| 为何重要 审计对于财务控制和识别计费差异至关重要。分析此活动有助于简化从审计到付款的流程,并为“运费账单差异率”KPI 提供支持。 获取方式 根据与运输关联的账单对象的状态更改推断。在 BILL 表中查看与审计完成相关的状态更新。 捕获 识别 BILL.BILL_STATUS_VALUE_GID 更改为“已审计 (Audited)”状态的时间戳。 事件类型 inferred | |||
提取指南
步骤
- 访问 BI Publisher:登录您的 Oracle Transportation Management (OTM) 应用程序。依次进入“业务流程自动化”、“报表”,然后选择“报表管理器”。这将打开 Oracle Business Intelligence Publisher 界面。
- 创建数据模型:在 BI Publisher 中,点击“新建”按钮并选择“数据模型”。这将打开数据模型编辑器,您可以在其中定义报表的数据源。
- 定义 SQL 查询:在数据模型编辑器中,点击数据集图表上的加号图标并选择“SQL 查询”。为数据集命名(例如 'OTM_Process_Mining_DS')。选择您的 OTM 数据库作为“数据源”。复制本文档“query”部分提供的完整 SQL 查询,并将其粘贴到 SQL 查询文本框中。
- 添加参数:查询使用日期范围和域名参数(:P_START_DATE, :P_END_DATE, :P_DOMAIN_NAME)。BI Publisher 会自动检测到这些参数。您可以配置其属性,例如将日期参数的数据类型设置为“日期”。
- 保存数据模型:点击“保存”图标。在 BI Publisher 目录中选择一个位置,提供一个描述性名称(如 'OTM Shipment Process Extraction'),然后保存数据模型。
- 创建报表:返回目录,点击“新建”按钮并选择“报表”。在报表创建向导中,选择“使用数据模型”选项,并找到您刚保存的数据模型。
- 配置报表布局:向导将引导您创建布局。简单的“表格”布局即可。将数据集中的所有列拖放到表格中。请勿执行任何分组或聚合操作。
- 保存报表:布局配置完成后,继续执行最后一步并保存报表。赋予它一个与数据模型相似的名称。
- 运行报表:打开新创建的报表。系统将提示您输入参数值(开始日期、结束日期、域名)。输入所需的范围。
- 导出数据:报表运行并显示数据后,点击“操作”菜单并选择“导出”。选择 CSV 格式。这将下载一个包含事件日志的 CSV 文件。
- 准备上传:打开下载的 CSV 文件。确认列标题与所需属性匹配:
ShipmentId、ActivityName、EventTime以及推荐属性。确保EventTime列处于一致的日期/时间格式。该文件现在可以上传到 ProcessMind 了。
配置
- 数据源:查询必须针对主 OTM 运营数据库架构运行,通常命名为 GLOGOWNER。
- 报表参数:
P_START_DATE:报告周期的开始日期。格式应为 'YYYY-MM-DD'。P_END_DATE:报告周期的结束日期。格式应为 'YYYY-MM-DD'。P_DOMAIN_NAME:要提取数据的特定 OTM 域。请使用“[您的域名称]”。
- 日期范围:对于初步分析,建议提取 3 到 6 个月的数据,以平衡数据量与性能。对于生产环境运行,请考虑按月或按季度批量提取数据。
- 权限:运行报表的 OTM 用户需要特定角色,例如 BI PUBLISHER DATA MODEL DEVELOPER 和 BI PUBLISHER REPORT DEVELOPER,以便创建和修改数据模型与报表。此外,还需要对底层数据库表具有只读访问权限。
- 性能:由于该查询涉及多个大表的关联,对于高数据量的环境,强烈建议在非高峰时段运行此报表,以避免影响系统性能。应尽可能缩小日期范围,以确保报表能及时生成。
a 查询示例 config
WITH SHIPMENTS_BASE AS (
SELECT
S.SHIPMENT_GID AS ShipmentId,
SP.SERVPROV_NAME AS CarrierName,
S.TOTAL_ACTUAL_COST AS ShipmentCost,
TM.TRANSPORT_MODE_NAME AS TransportationMode,
(
SELECT MAX(ORL.LATE_DELIVERY_DATE)
FROM SHIPMENT_S_SHIP_UNIT SSU
JOIN S_SHIP_UNIT SU ON SSU.S_SHIP_UNIT_GID = SU.S_SHIP_UNIT_GID
JOIN ORDER_RELEASE ORL ON SU.ORDER_RELEASE_GID = ORL.ORDER_RELEASE_GID
WHERE SSU.SHIPMENT_GID = S.SHIPMENT_GID
) AS RequestedDeliveryDate,
S.DOMAIN_NAME
FROM SHIPMENT S
LEFT JOIN SERVPROV SP ON S.SERVPROV_GID = SP.SERVPROV_GID
LEFT JOIN TRANSPORT_MODE TM ON S.TRANSPORT_MODE_GID = TM.TRANSPORT_MODE_GID
WHERE S.INSERT_DATE BETWEEN TO_DATE(:P_START_DATE, 'YYYY-MM-DD') AND TO_DATE(:P_END_DATE, 'YYYY-MM-DD') + 1
AND S.DOMAIN_NAME = :P_DOMAIN_NAME
)
-- 1. Transportation Request Received
SELECT
SB.ShipmentId,
'Transportation Request Received' AS ActivityName,
MIN(ORL.INSERT_DATE) AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_S_SHIP_UNIT SSU ON SB.ShipmentId = SSU.SHIPMENT_GID
JOIN S_SHIP_UNIT SU ON SSU.S_SHIP_UNIT_GID = SU.S_SHIP_UNIT_GID
JOIN ORDER_RELEASE ORL ON SU.ORDER_RELEASE_GID = ORL.ORDER_RELEASE_GID
WHERE SB.DOMAIN_NAME = ORL.DOMAIN_NAME
GROUP BY SB.ShipmentId, SB.CarrierName, SB.RequestedDeliveryDate, SB.ShipmentCost, SB.TransportationMode
UNION ALL
-- 2. Shipment Planned
SELECT
SB.ShipmentId,
'Shipment Planned' AS ActivityName,
SS.STATUS_CHANGE_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_STATUS SS ON SB.ShipmentId = SS.SHIPMENT_GID
WHERE SS.STATUS_CODE_GID = 'PLANNING_PLANNED FINAL'
UNION ALL
-- 3. Carrier Assigned
SELECT
SB.ShipmentId,
'Carrier Assigned' AS ActivityName,
ST.UPDATE_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_TENDER ST ON SB.ShipmentId = ST.SHIPMENT_GID
WHERE ST.TENDER_STATUS_GID = 'TENDER_ACCEPTED'
UNION ALL
-- 4. Shipment Booked
SELECT
SB.ShipmentId,
'Shipment Booked' AS ActivityName,
SS.STATUS_CHANGE_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_STATUS SS ON SB.ShipmentId = SS.SHIPMENT_GID
WHERE SS.STATUS_CODE_GID = 'SECURE RESOURCES_BOOKED'
UNION ALL
-- 5. Pickup Appointment Scheduled
SELECT
SB.ShipmentId,
'Pickup Appointment Scheduled' AS ActivityName,
SST.APPOINTMENT_START_TIME AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_STOP SST ON SB.ShipmentId = SST.SHIPMENT_GID
WHERE SST.STOP_NUM = 1 AND SST.APPOINTMENT_START_TIME IS NOT NULL
UNION ALL
-- 6. Goods Picked Up
SELECT
SB.ShipmentId,
'Goods Picked Up' AS ActivityName,
SST.ACTUAL_DEPARTURE_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_STOP SST ON SB.ShipmentId = SST.SHIPMENT_GID
WHERE SST.STOP_NUM = 1 AND SST.ACTUAL_DEPARTURE_DATE IS NOT NULL
UNION ALL
-- 7. Shipment In Transit
SELECT
SB.ShipmentId,
'Shipment In Transit' AS ActivityName,
SST.ACTUAL_DEPARTURE_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_STOP SST ON SB.ShipmentId = SST.SHIPMENT_GID
WHERE SST.STOP_NUM = 1 AND SST.ACTUAL_DEPARTURE_DATE IS NOT NULL
UNION ALL
-- 8. Customs Cleared
SELECT
SB.ShipmentId,
'Customs Cleared' AS ActivityName,
SE.EVENT_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
SE.EVENT_REMARK_TEXT AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_EVENT SE ON SB.ShipmentId = SE.SHIPMENT_GID
WHERE SE.EVENT_CODE = '[Your Customs Cleared Event Code]'
UNION ALL
-- 9. Delivery Appointment Scheduled
SELECT
SB.ShipmentId,
'Delivery Appointment Scheduled' AS ActivityName,
SST.APPOINTMENT_START_TIME AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_STOP SST ON SB.ShipmentId = SST.SHIPMENT_GID
WHERE SST.STOP_NUM = (SELECT MAX(SST2.STOP_NUM) FROM SHIPMENT_STOP SST2 WHERE SST2.SHIPMENT_GID = SB.ShipmentId)
AND SST.APPOINTMENT_START_TIME IS NOT NULL
UNION ALL
-- 10. Goods Delivered
SELECT
SB.ShipmentId,
'Goods Delivered' AS ActivityName,
SST.ACTUAL_ARRIVAL_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_STOP SST ON SB.ShipmentId = SST.SHIPMENT_GID
WHERE SST.STOP_NUM = (SELECT MAX(SST2.STOP_NUM) FROM SHIPMENT_STOP SST2 WHERE SST2.SHIPMENT_GID = SB.ShipmentId)
AND SST.ACTUAL_ARRIVAL_DATE IS NOT NULL
UNION ALL
-- 11. Proof of Delivery Received
SELECT
SB.ShipmentId,
'Proof of Delivery Received' AS ActivityName,
SE.EVENT_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
SE.EVENT_REMARK_TEXT AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT_EVENT SE ON SB.ShipmentId = SE.SHIPMENT_GID
WHERE SE.EVENT_CODE = '[Your POD Received Event Code]'
UNION ALL
-- 12. Freight Bill Audited
SELECT
SB.ShipmentId,
'Freight Bill Audited' AS ActivityName,
B.UPDATE_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN BILL B ON SB.ShipmentId = B.SHIPMENT_GID
WHERE B.BILL_STATUS_GID = 'VOUCHER_AUDITED'
UNION ALL
-- 13. Payment Processed
SELECT
SB.ShipmentId,
'Payment Processed' AS ActivityName,
B.UPDATE_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN BILL B ON SB.ShipmentId = B.SHIPMENT_GID
WHERE B.BILL_STATUS_GID = '[Your Payment Processed Bill Status]'
UNION ALL
-- 14. Shipment Cancelled
SELECT
SB.ShipmentId,
'Shipment Cancelled' AS ActivityName,
S.UPDATE_DATE AS EventTime,
SB.CarrierName,
SB.RequestedDeliveryDate,
SB.ShipmentCost,
SB.TransportationMode,
NULL AS DelayReason
FROM SHIPMENTS_BASE SB
JOIN SHIPMENT S ON SB.ShipmentId = S.SHIPMENT_GID
WHERE S.SHIPMENT_STATUS_GID = 'SHIPMENT_CANCELLED' 步骤
- 建立数据库连接:获取 Oracle Transportation Management 数据库的只读凭据和连接详细信息(主机、端口、服务 ID)。您需要访问
GLOGOWNER架构的权限。 - 配置 SQL 客户端:使用上一步中的数据库连接详情设置 SQL 客户端工具,例如 Oracle SQL Developer、DBeaver 或 Toad。
- 准备查询:将本文档中提供的完整 SQL 查询复制到 SQL 客户端的查询编辑器中。
- 设置查询参数:在查询的
WHERE子句中找到占位符。您必须将[START_DATE]、[END_DATE]和[YOUR_DOMAIN_NAME]替换为提取所需的实际值。例如,设置日期以覆盖 3-6 个月的时间段,并指定您希望分析的运营域。 - 执行查询:运行修改后的 SQL 查询。根据日期范围和系统规模,这可能需要几分钟时间。
- 查看结果:查询完成后,在客户端快速检查输出,确保已返回行数据,并且
ShipmentId、ActivityName和EventTime等关键列已有数据填充。 - 导出为 CSV:将完整结果集导出为 CSV 文件。使用标准的 CSV 设置:逗号分隔符、文本双引号以及 UTF-8 编码。
- 确定列标题:在上传之前,请验证 CSV 文件中的列标题是否与所需的属性名称完全匹配:
ShipmentId、ActivityName、EventTime、CarrierName、RequestedDeliveryDate、ShipmentCost、TransportationMode以及DelayReason。 - 上传至 ProcessMind:准备好的 CSV 文件现在可以上传到 ProcessMind 进行分析了。
配置
- 数据库架构:此查询旨在针对标准的 Oracle Transportation Management 数据库架构运行,通常命名为
GLOGOWNER。 - 所需授权:需要一个对查询中引用的表具有只读访问权限的数据库用户。这些表包括
SHIPMENT、SHIPMENT_STOP、ORDER_RELEASE、SHIPMENT_STATUS、SERVPROV、SHIPMENT_COST、DOCUMENT、BILL和VOUCHER。 - 域过滤:在多租户 OTM 环境中,按
DOMAIN_NAME过滤至关重要。查询中包含一个占位符[YOUR_DOMAIN_NAME],必须对其进行配置以提取正确业务实体的数据。 - 日期范围:为了管理性能和数据量,您必须指定开始和结束日期。建议在索引列(如
SHIPMENT.INSERT_DATE)上进行过滤。初步分析通常选择 3 到 6 个月的时间段。 - 状态码自定义:查询使用通用的默认状态码(例如
PLANNING_PLANNED FINAL、TENDER_ACCEPTED)。您的 OTM 实施可能使用自定义状态码,因此您可能需要调整WHERE子句中的值,以匹配您的系统配置。
a 查询示例 sql
WITH ShipmentBase AS (
SELECT s.SHIPMENT_GID, s.SERVPROV_GID, s.LATE_DELIVERY_DATE, s.TRANSPORT_MODE_GID, sc.TotalShipmentCost
FROM GLOGOWNER.SHIPMENT s
LEFT JOIN (
SELECT sc.SHIPMENT_GID, SUM(sc.COST) as TotalShipmentCost
FROM GLOGOWNER.SHIPMENT_COST sc
GROUP BY sc.SHIPMENT_GID
) sc ON s.SHIPMENT_GID = sc.SHIPMENT_GID
WHERE s.INSERT_DATE BETWEEN TO_DATE('[START_DATE]', 'YYYY-MM-DD') AND TO_DATE('[END_DATE]', 'YYYY-MM-DD')
AND s.DOMAIN_NAME = '[YOUR_DOMAIN_NAME]'
),
OrderReleaseInfo AS (
SELECT ssu.SHIPMENT_GID, MIN(orl.INSERT_DATE) as Earliest_OR_Date
FROM GLOGOWNER.S_SHIP_UNIT ssu
JOIN GLOGOWNER.S_SHIP_UNIT_LINE ssul ON ssu.S_SHIP_UNIT_GID = ssul.S_SHIP_UNIT_GID
JOIN GLOGOWNER.ORDER_RELEASE_LINE orl ON ssul.ORDER_RELEASE_LINE_GID = orl.ORDER_RELEASE_LINE_GID
GROUP BY ssu.SHIPMENT_GID
)
-- 1. Transportation Request Received
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Transportation Request Received' AS "ActivityName",
ori.Earliest_OR_Date AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN OrderReleaseInfo ori ON sb.SHIPMENT_GID = ori.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE ori.Earliest_OR_Date IS NOT NULL
UNION ALL
-- 2. Shipment Planned
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Shipment Planned' AS "ActivityName",
ss.INSERT_DATE AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.SHIPMENT_STATUS ss ON sb.SHIPMENT_GID = ss.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE ss.STATUS_CODE_GID = 'PLANNING_PLANNED FINAL'
UNION ALL
-- 3. Carrier Assigned
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Carrier Assigned' AS "ActivityName",
ss.INSERT_DATE AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.SHIPMENT_STATUS ss ON sb.SHIPMENT_GID = ss.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE ss.STATUS_CODE_GID = 'TENDER_ACCEPTED'
UNION ALL
-- 4. Shipment Booked
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Shipment Booked' AS "ActivityName",
ss.INSERT_DATE AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.SHIPMENT_STATUS ss ON sb.SHIPMENT_GID = ss.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE ss.STATUS_CODE_GID = 'SECURE RESOURCES_BOOKED'
UNION ALL
-- 5. Pickup Appointment Scheduled
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Pickup Appointment Scheduled' AS "ActivityName",
stp.APPT_START_TIME AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.SHIPMENT_STOP stp ON sb.SHIPMENT_GID = stp.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE stp.STOP_NUM = 1 AND stp.APPT_START_TIME IS NOT NULL
UNION ALL
-- 6. Goods Picked Up
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Goods Picked Up' AS "ActivityName",
stp.ACTUAL_DEPARTURE_TIME AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.SHIPMENT_STOP stp ON sb.SHIPMENT_GID = stp.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE stp.STOP_NUM = 1 AND stp.ACTUAL_DEPARTURE_TIME IS NOT NULL
UNION ALL
-- 7. Shipment In Transit
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Shipment In Transit' AS "ActivityName",
stp.ACTUAL_DEPARTURE_TIME AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.SHIPMENT_STOP stp ON sb.SHIPMENT_GID = stp.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE stp.STOP_NUM = 1 AND stp.ACTUAL_DEPARTURE_TIME IS NOT NULL
UNION ALL
-- 8. Customs Cleared
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Customs Cleared' AS "ActivityName",
se.EVENT_DATE AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
se.REMARK_TEXT AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.SHIPMENT_EVENT se ON sb.SHIPMENT_GID = se.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE se.EVENT_CODE_GID = '[Your Customs Cleared Event Code]'
UNION ALL
-- 9. Delivery Appointment Scheduled
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Delivery Appointment Scheduled' AS "ActivityName",
stp.APPT_START_TIME AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.SHIPMENT_STOP stp ON sb.SHIPMENT_GID = stp.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE stp.STOP_NUM = (SELECT MAX(s2.STOP_NUM) FROM GLOGOWNER.SHIPMENT_STOP s2 WHERE s2.SHIPMENT_GID = stp.SHIPMENT_GID)
AND stp.APPT_START_TIME IS NOT NULL
UNION ALL
-- 10. Goods Delivered
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Goods Delivered' AS "ActivityName",
stp.ACTUAL_ARRIVAL_TIME AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.SHIPMENT_STOP stp ON sb.SHIPMENT_GID = stp.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE stp.STOP_NUM = (SELECT MAX(s2.STOP_NUM) FROM GLOGOWNER.SHIPMENT_STOP s2 WHERE s2.SHIPMENT_GID = stp.SHIPMENT_GID)
AND stp.ACTUAL_ARRIVAL_TIME IS NOT NULL
UNION ALL
-- 11. Proof of Delivery Received
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Proof of Delivery Received' AS "ActivityName",
d.INSERT_DATE AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.DOCUMENT d ON sb.SHIPMENT_GID = d.OBJECT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE d.OBJECT_TYPE_GID = 'SHIPMENT' AND d.DOCUMENT_TYPE_GID = 'POD'
UNION ALL
-- 12. Freight Bill Audited
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Freight Bill Audited' AS "ActivityName",
b.UPDATE_DATE AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.BILL b ON sb.SHIPMENT_GID = b.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE b.APPROVAL_STATUS_GID = 'VOUCHER_AUDITED'
UNION ALL
-- 13. Payment Processed
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Payment Processed' AS "ActivityName",
v.UPDATE_DATE AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.BILL b ON sb.SHIPMENT_GID = b.SHIPMENT_GID
JOIN GLOGOWNER.VOUCHER v ON b.BILL_GID = v.BILL_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE v.VOUCHER_STATUS_GID = 'VOUCHER_PAID' -- This status may vary based on configuration
UNION ALL
-- 14. Shipment Cancelled
SELECT
sb.SHIPMENT_GID AS "ShipmentId",
'Shipment Cancelled' AS "ActivityName",
ss.INSERT_DATE AS "EventTime",
sp.SERVPROV_NAME AS "CarrierName",
sb.LATE_DELIVERY_DATE AS "RequestedDeliveryDate",
sb.TotalShipmentCost AS "ShipmentCost",
sb.TRANSPORT_MODE_GID AS "TransportationMode",
CAST(NULL AS VARCHAR(255)) AS "DelayReason"
FROM ShipmentBase sb
JOIN GLOGOWNER.SHIPMENT_STATUS ss ON sb.SHIPMENT_GID = ss.SHIPMENT_GID
LEFT JOIN GLOGOWNER.SERVPROV sp ON sb.SERVPROV_GID = sp.SERVPROV_GID
WHERE ss.STATUS_CODE_GID LIKE '%CANCELLED%';