Inventory Visibility 库存分配

业务背景和用途

组织通常必须将现有库存量预先分配给最重要的销售渠道、客户群、地区和促销活动,以确保预先分配的库存受到保护,不会用于任何其他用途,只能通过与分配相关的销售交易消耗。 库存可见性中的库存分配是销售运营计划流程的一个组成部分,在任何实际销售活动发生或创建销售订单之前完成。

例如,名为 Contoso 的公司生产流行的自行车。 不幸的是,由于最近的供应链中断影响了该自行车的所有在途库存,Contoso 的现有库存量有限,必须加以充分利用。 Contoso 同时经营线上销售和店内销售。 在每个销售渠道中,此公司都有一些重要的公司合作伙伴(商城和大型零售商),他们要求为他们保存自行车可用库存的特定部分。 因此,此自行车公司必须能够平衡跨渠道存货分配,并达到其 VIP 合作伙伴的期望。 实现这两个目标的最佳方法是使用库存分配,以便每个渠道和零售商都可以收到以后可向消费者出售的特定分配数量。

库存分配具有两个基本业务用途:

  • 库存保护(圈护)– 组织希望将受限或有限的库存预分配到优先的渠道、区域、VIP 客户和子公司。 库存可见性分配功能旨在保护分配的库存,以便其他分配、预留或其他销售需求不会影响先前分配的库存。
  • 超额销售控制 - 库存可见性分配功能旨在对先前分配的数量施加限制,以便当基于软性预留的实际销售交易生效时,接收方(例如渠道或客户组)不会过度使用它们。

库存可见性服务中的分配定义

分配虚拟池

虽然库存可见性中的分配功能未预留实际库存数量,但它确实引用了可用的实际库存数量来定义其初始可用于分配的虚拟池数量。 库存可见性中的库存分配是软分配。 此分配在实际销售交易发生之前已完成,不依赖于销售订单。 例如,在任何最终客户访问销售渠道或零售商店以购买商品之前,您可以将存货分配到最重要的销售渠道或大型公司零售商。

库存分配和软预留之间的区别

软预留通常链接到实际销售交易(销售订单行)。 分配和软预留都可以单独使用,但如果您想要一起使用,则应在分配后进行软预留。 我们建议您首先进行库存分配,然后根据分配的数量进行软预留,以实现近乎实时的基于分配的消耗。 有关详细信息,请参阅本文的以软性预留形式使用一节。

通过库存分配功能,销售计划员或关键客户经理可以跨分配组(如渠道、区域和客户组)管理和预分配重要库存。 它还支持针对分配的数量实时跟踪、调整和分析消耗量,以确保可以按时进行补货或重新分配。 这种能够实时了解分配、消耗量和分配余额的功能在快速销售或促销活动中尤为重要。

术语

以下条款和概念在讨论库存分配时很有用:

  • 分配组 - 负责分配的组,如销售渠道、客户组或订单类型。
  • 分配组名称 - 每个分配组的名称。 例如,Web商店可能是销售渠道分配组的名称,而 VIP普通可能是客户分配组的名称。
  • 分配层次结构 - 以分层方式组合分配组的一种方法。 最多支持八个层次结构级别。 在 Microsoft Power Apps 中,在库存可见性的分配配置页面上,它们标记为 Group0Group7。 例如,您可以将渠道定义为层次结构级别 1 (Group0),将区域定义为级别 2 (Group1),将客户组定义为级别 3 (Group2)。 在库存分配期间,当您指定分配组的值时,必须遵循分配层次结构序列。 例如,您可能会创建将 200 辆红色自行车分配给 Web 渠道、伦敦地区和 VIP 客户组的分配。
  • 可用于分配 - 指示可用于进一步分配的数量的虚拟公共池。 这是一个计算的度量,您可以使用自己的公式自由定义。 如果您还使用软性预留功能,我们建议您使用相同的公式来计算可用于分配和可用于预留的数量。
  • 已分配 - 显示分配组可使用的分配配额的实际度量。 在添加消耗数量的同时扣除。
  • 已消耗 - 一种实际度量,指示已根据原始分配数量消耗的数量。 将数字添加到此实际度量时,将自动减少分配的实际度量。

下图显示了库存分配的业务工作流。

库存可见性分配业务工作流。

下图显示了分配层次结构和分配组。 此处显示的虚拟公共池是可用于分配的数量。

库存可见性分配层次结构。

在 UI 版本 2 中打开并设置库存分配

当您使用库存可见性 UI 版本 2 时,本部分适用。

若要设置库存分配,您必须完成本节的各小节中描述的以下任务:

  • 启用分配功能,并更新配置以对其进行初始化。
  • 设置可用于分配计算度量(并在计算中包含已分配实际度量)。
  • 设置您的分配组。
  • 更新配置以激活新设置。

启用库存分配功能

按照以下步骤启用库存分配功能。

  1. 在 Power Apps 中,打开库存可见性应用。

  2. 在导航窗格上,选择功能管理

  3. 库存分配磁贴上,选择管理

  4. 启用功能选项设置为

  5. 在工具栏上,选择保存

  6. 在导航窗格上,选择管理员设置

  7. 更新配置磁贴上,选择管理

  8. 在对话框中查看您的修改。

    重要提示

    请务必验证即将对数据源、实际度量和维度映射进行的所有重要修改。

  9. 选择确认更新以应用您的配置更改。

设置“可用于分配”计算度量

当您启用库存分配功能并更新配置(如上一节所述)时,库存可见性将创建一个预定义的数据源和多个初始度量。

数据源名为 @iv。 它包括以下默认实际度量集:

  • @allocated
  • @cumulative_allocated
  • @consumed
  • @cumulative_consumed

若要使用分配,您必须为可用于分配计算度量 (*@iv.@available\_to\_allocate*) 正确设置公式。 例如,您在 fno 数据源中有 onordered 实际度量,在 pos 数据源中有 inbound 实际度量。 然后,您可以根据 fno.onorderedpos.inbound 的总和分配现有存货。 在此情况下,*@iv.@available\_to\_allocate* 应在公式中包含 pos.inboundfno.onordered。 以下是一个计算示例:

*@iv.@available\_to\_allocate* = fno.onordered + pos.inbound – *@iv.@allocated*

注意

@iv 数据源是预定义的数据源,@iv 中使用与号 (@) 作为前缀的实际度量是预定义的度量。 这些度量是分配功能的预定义配置。 因此,请勿更改或删除它们。 否则,您在使用分配功能时可能会遇到意外错误。

您可以将新的实际度量添加到预定义的 *@iv.@available\_to\_allocate* 计算度量。 但是,您不得更改其名称。

按照以下步骤设置可用于分配计算度量:

  1. 在库存可见性应用中,在导航窗格上选择功能管理
  2. 数据源设置磁贴上,选择管理
  3. 打开名为 @iv 的数据源。
  4. 计算度量部分中,打开名为 @available_to_allocate 的记录(如果存在)。 否则,创建一条记录,其中计算度量名称值为 @available_to_allocate,并保存新记录。
  5. 计算度量详细信息部分中,添加要用于计算可用于分配数量的实际度量。 请务必在公式中包含 *@iv.@allocated* 实际度量。

设置分配组和层次结构

在库存可见性中创建的每个分配都必须分配到特定的分配组。 您最多可以创建八个分配组,每个分配组都有一个名称和一个级别。 您必须分配级别才能建立组层次结构。

每个级别都定义为从 0(零)到 7 的整数,对应于组层次结构中的 Group0Group7。 级别可确定组在分配层次结构中的使用顺序。 分配到级别 0 的组是层次结构中的最高级别,分配到级别 7 的组是层次结构中的最低级别。

创建分配时,您必须按从最高级别到最低级别的顺序指定层次结构。 例如,在您的配置中,国家/地区Group0省/自治区/直辖市Group1城市Group2。 在此情况下,当指定城市时,国家/地区省/自治区/直辖市都是必需的。 但是,可以仅使用国家/地区省/自治区/直辖市或仅使用国家/地区创建分配。

按照以下步骤设置您的分配组和层次结构。

  1. 在库存可见性应用中,在导航窗格上选择功能管理
  2. 库存分配磁贴上,选择管理
  3. 分配组部分中,使用工具栏上的新分配组按钮为所需的每个分配组添加一行。 分配一个介于 07 之间的级别。 若要编辑现有组,请在分配组名称列中选择其名称。
  4. 在页面顶部的工具栏上,选择保存

重要提示

删除或更改分配层次结构时要小心。 如需指南,请参阅使用分配的提示部分。

更新配置以激活新设置

完成配置更新后,您必须应用更改才能激活它们。

  1. 在库存可见性应用中,在导航窗格上选择管理员设置

  2. 更新配置磁贴上,选择管理

  3. 在对话框中查看您的修改。

    重要提示

    请务必验证即将对数据源、实际度量和维度映射进行的所有重要修改。

  4. 选择确认更新以应用您的配置更改。

在 UI 版本 1 中打开并设置库存分配

当您使用库存可见性 UI 版本 1 时,本部分适用。

如果您使用的是 UI 版本 1,请按照以下步骤启用库存分配并设置分配组。

  1. 启用库存分配功能。

    1. 转到旧版 UI>配置
    2. 功能管理和设置选项卡上,打开名为库存分配的功能。
    3. 选择右上角的更新配置以应用新设置。
  2. 配置可用于分配计算度量和已分配实际度量。

    1. 计算度量选项卡上,查看名为 *@iv.@available\_to\_allocate* 的初始计算度量。
    2. 通过添加和删除实际测量来编辑公式以满足您的业务需求。 请务必在公式中包含 *@iv.@allocated* 实际度量。
  3. 设置分配组和层次结构。

    1. 选择分配选项卡。
    2. 在默认分配配置中,有四个级别的层次结构。 这些级别从最高到最低依次为Channel (Group0)、customerGroup (Group1)、Region (Group2) 和 OrderType (Group3). 您可以通过使用编辑配置字段来编辑组。 若要删除现有分配组,请选择其名称旁边的 X。 若要添加分配组,请直接在编辑配置字段中输入名称。
    3. 编辑完组后,选择保存
  4. 更新配置以激活新设置。

    • 配置完分配组和层次结构设置后,选择保存,然后选择右上角的更新配置

当使用用户界面或 API POST (/api/environment/{environmentId}/allocation/allocate) 创建分配时,将更新配置的分配组的值。 本文稍后将提供有关这两种方法的详细信息。 如果您使用四个组名称并将其设置为 [channelcustomerGroupregionorderType],则当您调用配置更新 API 时,这些名称将对与分配相关的请求有效。

注意

在 UI 版本 1 中适用于分配功能的启用状态和分配组的设置不会影响 UI 版本 2 中的相应设置。 同样,在 UI 版本 2 中适用于启用状态和分配组的设置不会影响 UI 版本 1 中的相应设置。 仅应用适用于有效 UI 版本中的这些设置。

重要提示

删除或更改分配层次结构时要小心。 如需指南,请参阅使用分配的提示部分。

使用分配的提示

  • 对于每个产品,根据在现有量索引配置中设置的现有量索引配置,分配函数必须使用相同的维度级别。 例如,您的索引层次结构是 [SiteLocationColorSize]。 您在 [SiteLocationColor] 维度级别为一个产品分配一些数量。 在此情况下,下次要分配相同产品时,您必须在同一级别进行分配。 如果您使用 [SiteLocationColorSize] 级别或 [SiteLocation] 级别,数据将不一致。
  • 当您修改分配组和层次结构时,如果系统中已经存在分配数据,删除现有分配组或改变分配组层次结构将破坏分配组之间的现有映射。 因此,在更新配置之前,请务必使用 unallocate API 删除所有旧数据。 但是,如果只向最低层次结构添加新分配组,则不必清理数据。
  • 仅当产品 available_to_allocate 数量为正时,分配才会成功。
  • 若要将产品从高分配层次结构组分配到子组,请使用 Reallocate API。 例如,您的分配组层次结构是 [channelcustomerGroupregionorderType],您想要将一些产品从 [OnlineVIP] 分配组分配到 [OnlineVIPEU] 分配子组。 在此情况下,使用 Reallocate API 移动数量。 当您使用 Allocate API 时,它将从虚拟公共池分配数量。
  • 若要查看整体产品可用性(公共池),请使用查询现有量 API 请求可用于分配的库存量。 然后,您可以根据此信息作出分配决定。

使用分配 API

下表列出了可用的分配 API。

方法 API 描述
POST /api/environment/{environmentId}/allocation/allocate 创建分配
POST /api/environment/{environmentId}/allocation/unallocate 还原或删除分配的记录
POST /api/environment/{environmentId}/allocation/reallocate 将已分配数量从现有分配移至其他分配组
POST /api/environment/{environmentId}/allocation/consume 扣除(使用)分配的数量
POST /api/environment/{environmentId}/allocation/query 对照分配组和层次结构检查现有分配记录

分配

调用 Allocate API 以分配具有特定维度的产品。 以下是请求正文的架构。

{
    "id": "string",
    "productId": "string",
    "dimensionDataSource": "string",
    "groups": {
        "groupA": "string",
        "groupB": "string",
        "groupC": "string"
    },
    "quantity": decimal,
    "organizationId": "string",
    "dimensions": {
        "dimension1": "string",
        "dimension2": "string",
        "dimension3": "string"
    }
}

例如,您要针对自行车产品、站点 1、位置 11红色颜色、在线渠道、VIP 客户组和美国区域分配数量 10。 要执行此分配,您可以进行具有以下正文内容的调用。

{
    "id": "test101",
    "productId": "Bike",
    "groups": {
        "channel": "Online",
        "customerGroup": "VIP",
        "region": "US"
    },
    "quantity": 10,
    "organizationId": "usmf",
    "dimensions": {
        "siteId": "1",
        "locationId": "11",
        "colorId": "red"
    }
}

数量必须始终大于 0(零)。

取消分配

使用 Unallocate API 撤销 Allocate 操作。 Allocate 操作中不允许存在负数量。 Unallocate 的正文与 Allocate 的正文完全相同。

重新分配

使用 Reallocate API 将一些分配的数量移动到其他组组合。 以下是请求正文的架构。

{
    "id": "string",
    "productId": "string",
    "dimensionDataSource": "string",
    "sourceGroups": {
        "groupA": "string",
        "groupB": "string",
        "groupC": "string"
    },
    "groups": {
        "groupD": "string",
        "groupE": "string",
        "groupF": "string"
    },
    "quantity": decimal,
    "organizationId": "string",
    "dimensions": {
        "dimension1": "string",
        "dimension2": "string",
        "dimension3": "string"
    }
}

例如,通过调用 Reallocate API 并提供以下正文文本,您可以将维度为 [站点=1、位置=11、颜色=红色] 的两辆自行车从 [在线、VIP、美国] 分配组移到 [在线、VIP、EU] 分配组。

{
    "id": "test102",
    "productId": "Bike",
    "sourceGroups": {
        "channel": "Online",
        "customerGroup": "VIP",
        "region": "US"
    },
    "groups": {
        "channel": "Online",
        "customerGroup": "VIP",
        "region": "EU"
    },
    "quantity": 2,
    "organizationId": "usmf",
    "dimensions": {
        "siteId": "1",
        "locationId": "11",
        "colorId": "red"
    }
}

使用

使用 Consume API 根据分配过帐消耗量。 例如,您可能会使用此 API 将分配的数量移到一些实际度量。 以下是请求正文的架构。

{
    "id": "string",
    "productId": "string",
    "dimensionDataSource": "string",
    "groups": {
        "groupA": "string",
        "groupB": "string",
        "groupC": "string"
    },
    "quantity": decimal,
    "organizationId": "string",
    "dimensions": {
        "dimension1": "string",
        "dimension2": "string",
        "dimension3": "string"
    },
    "physicalMeasures": {
        "datasource1": {
            "measure": "string" // Addition or Subtraction
        }
    }
}

例如,为 [在线、VIP、US] 分配组分配了 8 辆维度为 [站点=1、位置=11、颜色=红色] 的自行车。 使用了以下可用于分配的公式:

@iv.@available_to_allocate = fno.onordered + pos.inbound@iv.@allocated

pos.inbound 度量中分配了八辆自行车。

现在,已售出三辆自行车,这些自行车是从分配池中购买的。 要登记此变动,您可以进行具有以下请求正文的调用。

{
    "id": "test103",
    "organizationId": "usmf",
    "productId": "Bike",
    "dimensions": {
        "siteId": "1",
        "locationId": "11",
        "colorId": "red"
    },
    "groups": {
        "channel": "Online",
        "customerGroup": "VIP",
        "region": "US"
    },
    "quantity": 3,
    "physicalMeasures": {
        "pos": {
            "inbound": "Subtraction"
        }
    }
}

进行此调用后,产品的分配数量将减少 3。 此外,库存可见性将生成一个 pos.inbound = -3 的现有更改事件。 或者,您可以将 pos.inbound 值保持原样,仅使用分配的数量。 但是,在这种情况下,您必须创建另一个实际度量,以保留消耗的数量或使用预定义的度量 @iv.@consumed

在此请求中,请注意您在 consume 请求正文中使用的实际度量应使用与在计算量度中使用的修饰符类型相反的修饰符类型(加法或减法)。 因此,在此 consume 正文中,iv.inbound 具有的值是 Subtraction,而不是 Addition

fno 数据源不能在 consume 正文中使用,因为我们一直声称库存可见性不能更改 fno 数据源的任何数据。 数据流是单向的,这意味着 fno 数据源的所有数量变化都必须来自您的 Supply Chain Management 环境。

以软性预留形式使用

Consume API 还可以将分配的数量用作软性预留。 在这种情况下,Consume 操作将减少分配的数量,然后对该数量创建软性预留。 要使用此方法,您还必须使用库存可见性的软性预留功能。

例如,您已将软预留实际度量设置为 iv.softreserved。 以下公式用于可用于预留的计算度量:

iv.available_to_reserve = fno.onordered + pos.inboundiv.softreserved

要将此设置与分配功能结合使用,请将 @iv.@allocated 添加到 iv.available_to_reserve 以生成以下公式:

iv.available_to_reserve = fno.onordered + pos.inboundiv.softreserved@iv.@allocated

然后将 @iv.@available_to_allocate 更新为相同的值。

当您想要使用值为 3 的数量并直接预留此数量时,您可以进行具有以下请求正文的调用。

{
    "id": "???",
    "organizationId": "usmf",
    "productId": "Bike",
    "dimensions": {
        "siteId": "1",
        "locationId": "11",
        "colorId": "red"
    },
    "groups": {
        "channel": "Online",
        "customerGroup": "VIP",
        "region": "US"
    },
    "quantity": 3,
    "physicalMeasures": {
        "iv": {
            "softreserved": "Addition"
        }
    }
}

在此请求中,请注意,iv.softreserved 具有的值是 Addition,而不是 Subtraction

查询

使用 Query API 检索某些产品的分配相关信息。 您可以使用维度筛选器和分配组筛选器缩小结果范围。 维度必须与您要检索的项完全匹配,例如,与 [站点=1、位置=11、颜色=红色] 相比,[站点=1、位置=11] 将具有不相关的结果。

{
    "productId": "string",
    "organizationId": "string",
    "dimensions": {
        "dimension1": "string",
        "dimension2": "string",
        "dimension3": "string"
    },
    "groups": {
        "additionalProp1": "string",
        "additionalProp2": "string",
        "additionalProp3": "string"
    },
}

例如,使用 [站点=1、位置=11、颜色=红色] 和空组字段获取所有分配记录:

{
    "organizationId": "usmf",
    "productId": "Bike",
    "dimensions": {
        "siteId": "1",
        "locationId": "11",
        "colorId": "red"
    },
    "groups": {},
}

使用 [站点=1、位置=11、颜色=红色] 和组 [渠道=线上、CustomerGroup=VIP、区域=美国] 获取此组的分配记录:

{
    "organizationId": "usmf",
    "productId": "Bike",
    "dimensions": {
        "siteId": "1",
        "locationId": "11",
        "colorId": "red"
    },
    "groups": {
        "channel": "Online",
        "customerGroup": "VIP",
        "region": "US"
    },
}

使用分配用户界面

您可以使用 Power Apps 中的库存可见性应用手动管理分配。

重要提示

在当前版本的库存可见性应用中,仅当您使用库存可见性 UI 版本 1 时才能管理分配。 如果您使用的是 UI 版本 2,则必须使用 API 才能管理分配。 有关两个 UI 版本以及如何在它们之间进行切换的详细信息,请参阅库存可见性应用用户界面版本

打开分配用户界面

运营可视性页面上的分配选项卡将用作用户界面,您可以在其中创建、使用、重新分配和查询分配,如后面小节所述。

若要打开分配用户界面,请按照以下步骤操作。

  1. 登录到您的 Power Apps 环境,然后打开库存可见性应用。
  2. 在导航窗格底部的更改区域菜单上,选择旧版 UI
  3. 在导航窗格上,选择运营可见性
  4. 选择分配选项卡。

创建分配

按照以下步骤在库存可见性应用中创建分配。

  1. 分配选项卡的工具栏上,选择分配
  2. 设置基本字段维度目标分配组值。 当您在维度部分中选择值时,首先选择一个数据源,从该数据源中选择一个维度,然后在每次添加维度时显示的字段中输入维度值。
  3. 选择提交

使用分配

分配选项卡的工具栏上,选择使用以使用分配。 若要确保您在正确的分配组和层次结构内使用,请输入您在创建分配时指定的相同组织和维度详细信息集。

重新分配分配

分配选项卡的工具栏上,选择重新分配以将现有的已分配数量从一组分配组移到另一组。

查询现有分配

分配选项卡的工具栏上,选择查询,然后输入产品、组织、维度和分配组值以获取现有分配的查询结果。