使用约束属性规则防止峰值负载出现尖峰
首先,您将在 ArcGIS Utility Network 中创建两个属性规则,以强制执行和报告数据完整性。 接下来,您将使用 Arcade 配置和测试新的弹出表达式,这些表达式将从您通过计算规则创建的日志中获取有用信息。 您将了解如何执行以下操作:
- 创建约束规则以防止峰值负载出现尖峰。
- 创建相关的计算规则,以在对低压服务要素进行编辑时报告峰值负载值。
- 通过编辑低压服务要素并查看每个规则的输出来测试属性规则。
- 使用 Arcade 命令配置弹出窗口以从使用计算规则创建的日志中获取有用的信息。
在开始之前,您可能需要查看电力数据模型。
添加约束属性规则
在公共设施网络中,从低压服务资产组的要素中观察到不规则的属性编辑。 但是,如果您打开 Electric Network Editor 地图或查看包含公共设施网络以识别不规则之处的地理数据库的 UtilityNetwork 要素数据集中的要素类,则可能会注意到低压服务要素类不可用。
这是因为 ArcGIS Utility Network 使用子类型图层组和属性域实现了分类模型,从而减少了对大量单个要素类的需求。 另外,在地图的内容窗格中,复合图层将被用于将相关的公共设施网络图层分组。 这些复合图层通过减少查询、编辑或刷新图层时对数据源的请求数量,相比于单个图层更能有效地发挥作用。
- 下载 ArcGIS Utility Network 中的属性规则工程包。
- 在计算机上找到 Attribute_rules_in_the_ArcGIS_Utility_Network_ 工程包。 如有必要,将文件移动至合适的位置,然后双击它。
使用属性规则工程会在 ArcGIS Pro 中打开。
注:
如果您没有 ArcGIS Pro 的访问权限或者 ArcGIS 组织帐户,请参阅软件访问权限选项。
- 在目录窗格中,展开数据库,然后展开 electricnetworkeditor.gdb。
注:
如果目录窗格不可见,请在工具栏的视图选项卡的窗口组中单击目录窗格。
- 在 electricnetworkeditor.gdb 中,展开 UtilityNetwork 要素数据集。
查看在要素数据集中组织的要素类和关系类。 这些信息代表包含公共设施网络的地理数据库的架构(结构)。
- 在目录窗格中,右键单击 ElectricDevice,指向数据设计,然后选择子类型。
ElectricDevice 要素类的子类型视图随即出现。 该要素类已经应用了几种子类型和相关领域。
- 在子类型视图中,查看 *ASSETGROUP 子类型。
*ASSETGROUP 是用于定义各种类型资产的子类型,例如高压避雷器、低压开关、低压避雷器和低压服务。 此外,ASSETTYPE 将提供一种用于定义资产的子分类级别的机制。 例如,低压服务被分为单相住宅和三相商业。
- 在子类型视图中,滚动到与 ASSETGROUP 22 对应的低压服务列中。
对于低压服务的子类型,已为很多字段分配了域,且有些字段已设置了默认值。 这些字段通过将更新限制在特定的选项列表或值范围内来强制执行数据完整性(有效值)。 如果未指定任何值,则将使用默认值。
- 对于 *ASSETGROUP 22,向下滚动到 peakload 字段。
未向 peakload 字段分配域。
注:
峰值负载(或峰值需求)在每日周期中可能会波动多次,并且其值在不同服务之间可能会有所不同。 因此,默认的值和域不是维护此属性数据完整性的有效工具。 一种解决方案是使用属性规则配置文件中的 Arcade 全局 $originalFeature,该项将检测到分配给 peakload 属性的较大更改。 全局 $originalFeature Arcade 可在编辑之前显示要素状态,从而使脚本作者可以灵活地将 $feature 的当前值与要素的原始值进行比较。
尽管峰值负载每天都会变化,但是通常其变化范围每天都是一致的,并且仅应反映月度性或季节性的较大变化。 对 peakload 应用新的约束规则后,将无法对该字段进行过大的更改。 在随后的步骤中,您将通过创建计算属性规则来填充表中行以记录对 peakload 字段所做的更改,从而增强此错误检测功能。
- 关闭子类型视图。
接下来,您将添加一条属性规则。 属性规则可改善地理数据库数据集的编辑体验并提高数据完整性。 这些规则均为用户定义的规则,可用于自动填充属性、在编辑操作期间限制无效编辑,以及对现有要素执行质量保证检查。
属性规则是对地理数据库中现有规则(如域和子类型)的补充。 例如,可以为编辑器提供有效值的选择列表,从而将域分配给属性字段以协助数据采集过程。 要提升此行为,在执行字段计算时,可使用属性规则来限制不属于该属性域的属性字段值。 将规则添加到数据集后,可以在进行编辑当时或之后对其进行评估。
重要的是要注意属性规则不是特定的 ArcGIS Utility Network 功能,可以跨所有地理数据库要素类和表进行部署,以执行编辑操作、数据验证、质量保证和其他操作。
- 在目录窗格中,右键单击 ElectricDevice,指向数据设计,然后选择属性规则。
随即打开属性规则视图。 该视图包含三个选项卡,用于标识不同的规则类型:计算、约束和验证。
- 在属性规则视图中的计算规则中,滚动到代表低压服务要素的 ID_Device_22 规则名称。
- 单击规则以将其选中。 在 ID_Device_22 窗格中查看表达式和触发器部分。
在插入新的低压服务要素期间应用此表达式时,该表达式将使用唯一的 ID 值填充 assetid 字段。
接下来,您将添加一个新的约束规则,以阻止峰值负载值修改量达到 50 以上的编辑。 约束规则用于指定要素上允许的属性配置和一般关系。 这可以防止在编辑操作期间输入无效数据,以确保数据完整性。 可以使用添加属性规则和导入属性规则地理处理工具或属性规则视图为文件和企业级地理数据库中的数据集创建约束规则。
- 在属性规则视图中,单击约束选项卡并单击添加规则。
新建规则窗格随即显示。 尚未定义约束规则。
接下来,您将更新规则属性以为 ElectricDevice 要素类创建约束规则。
- 在新建规则窗格中,输入以下参数:
- 对于规则名称,输入 Prevent load spikes。
- 对于描述,输入 If the peak load attribute is changed by a factor of more than 50, fail the edit。
- 对于子类型,选择低压服务。
选择低压服务子类型是因为您希望仅在对该子类型的服务仪表进行编辑时才执行此属性规则。
- 在 Prevent load spikes 窗格中,对于表达式,单击表达式按钮以打开表达式构建器窗口。
- 在表达式构建器窗口的表达式文本框中,复制并粘贴以下代码:
var dLoad = $feature.peakload - $originalFeature.peakload; if (dLoad > 50) return false; else return true;
- 单击验证按钮验证表达式,然后单击确定。
注:
Arcade 全局 $originalFeature 提供了要素在被编辑之前的状态。 例如,如果某个要素的峰值负载当前值为 10,若将其更新为 20,则 $originalFeature.peakload 将返回 10,而 $feature.peakLoad 将返回 20。
接下来,您将继续更新规则属性。
- 在防止负载出现尖峰窗格的错误部分中,设置以下参数:
- 对于错误编号,输入 1001。
- 对于错误信息,输入 Load spike detected, aborting edit。
- 在触发器部分中,选中更新框。
- 在执行部分中,选中从应用程序评估中排除框。
- 在功能区属性规则选项卡的属性规则组中,单击保存。
注:
保存规则可能需要几分钟时间。
- 关闭属性规则视图。
- 在快速访问工具栏上,单击保存。
测试约束规则
要测试刚刚创建的新约束规则,您需要更新低压服务并编辑峰值负载。
- 在目录窗格中,展开地图。
- 右键单击 Electric Network Editor 地图,然后选择打开。
Electric Network Editor 地图随即打开。
- 在地图选项卡的导航组中,单击书签,然后选择测试属性规则。
地图范围更新并以位于 Beebe 小学以南的低压服务点为中心。
- 在功能区的选择组中,单击选择工具 。
- 单击低压服务点。
该要素以蓝色突出显示,指示其已处于选中状态。
- 在功能区的选择组中,单击属性。
随即出现属性窗格。
- 在属性窗格底部,确认选中自动应用。
这参数将确保可对要素自动应用编辑。
- 找到 Peak Load (kW) 属性,输入 10,然后按 Enter 键。
为该要素更新了 Peak Load (kW) 属性且未触发警告,因为仅当值超过 50 kW 时才会触发应用于该字段的约束规则。
- 对于 Peak Load (kW),输入 70,然后按 Enter 键。
更新的 Peak Load (kW) 值 70 会触发编辑失败,并在属性窗格中显示错误消息。
因为 Peak Load (kW) 值增加了 50 kW 以上,从而触发了编辑失败和错误消息。 这由将约束规则应用于 ElectricDevice 要素导致。
注:
在约束规则表达式中,初始 $originalFeature 值设置为 0。 将其更新为 10 不会触发约束,因为 10 - 0 = 10,该值小于 50。 但是,将值更新为 70 就会触发属性规则并导致失败,因为 70 - 10 = 60(大于阈值 50)。
- 通过试验不同的值来测试 Peak Load (kW) 属性的约束规则。
提示:
尝试编辑防止负载出现尖峰规则以防止错误。 使用 Arcade 中的 Abs() 函数。
如果 Peak Load (kW) 值降低超过 50,则不会发生错误。
就本教程而言,您不会保留对 Peak Load (kW) 所做的编辑。
- 在编辑选项卡的管理编辑内容组中,单击放弃以放弃所有编辑。 单击是确认。
- 关闭 Electric Network Editor 地图并保存该工程。
您已使用 Arcade 全局 $originalFeature 编写了约束属性规则,以检测对 peakload 属性进行的较大更改。
使用计算报告来报告峰值负载尖峰
之前,您使用 Arcade 全局 $originalFeature 编写了约束属性规则,以检测对 Peak Load 属性进行的较大更改。 接下来,您将创建计算规则,以在低压服务更新时报告峰值负载值。 计算属性规则将检测服务点负载历史中的更改,并将此信息记录到单独的表中。
创建负载历史表
首先,您将在 electricnetworkeditor 地理数据库中创建一个表,以记录服务点负载历史中的更改。
- 在目录窗格中,展开数据库。 右键单击 electricnetworkeditor.gdb,指向新建,然后选择表。
创建表向导随即显示。
- 在创建表向导的定义页面上,输入以下信息:
- 对于名称,输入 LoadHistory。
- 对于别名,输入 Load History。
接下来,您将向表中添加两个新字段。
- 单击下一步。
- 在字段页面中,单击单击此处添加新字段,然后输入以下信息:
- 对于字段名称,输入 peakLoad。
- 对于数据类型,选择长整型。
- 单击单击此处添加新字段,以使用以下参数添加第二个字段:
- 对于字段名称,输入 serviceGUID。
- 对于数据类型,选择 GUID。
为了追踪已编辑的服务,peakLoad 字段将存储服务点的负载,而 serviceGUID 字段将存储更新后的服务点的 GUID。
- 单击完成以创建新表。
- 在目录窗格中,确认已成功创建 LoadHistory 表。
接下来,您将在 LoadHistory 表上启用编辑者追踪,以记录并标识谁对该表进行编辑以及何时进行编辑。
- 在目录窗格内,右键单击 LoadHistory 表,然后选择管理。
- 在表属性窗口中,选中编辑者追踪。
将支持编辑者追踪的字段添加到表中。
- 单击确定以关闭表属性。
- 在目录窗格中,右键单击 LoadHistory,指向数据设计,然后选择字段。
表的字段视图随即显示。
添加的用于支持编辑者追踪的字段包括全局用户标识符和用于标识生成和编辑要素的用户以及编辑日期的字段。
- 关闭字段视图。
创建计算属性规则
接下来,您将创建计算属性规则,该规则将检测服务点负载历史记录中的更改并将此信息记录到单独的表中。 计算属性规则可用于自动填充要素上的属性配置。
- 在目录窗格中,展开 UtilityNetwork 要素数据集。
- 右键单击 ElectricDevice 类,指向数据设计,然后单击属性规则。
属性规则视图随即显示。
- 如有必要,在属性规则视图中单击计算选项卡。
现有几种计算规则。 这些规则是在公共设施网络的初始配置期间创建的,用于维护数据完整性。
- 单击添加规则下拉箭头,然后选择添加立即计算规则。
新建规则窗格随即显示。
立即计算规则由插入、更新和删除等编辑操作自动评估和触发。 您将创建由插入和更新操作触发的规则。
- 在新建规则窗格中,输入以下参数:
- 对于规则名称,输入 Log Load History。
- 对于描述,输入 Records all changes to the peak load attribute。
- 对于子类型,选择低压服务。
- 对于字段,选择 peakload。
更新规则名称字段会将窗格标题更新为 Log Load History。
- 在日志加载历史窗格中,单击表达式按钮以打开表达式构建器窗口。
- 在表达式构建器窗口中,对于表达式,输入以下 Arcade 表达式:
return { "result": $feature.peakload, "edit" : [ { "className": "LoadHistory", "adds": [{ "attributes": {"peakLoad": $feature.peakLoad, "serviceGUID": $feature.globalID } }] } ] }
注:
该脚本使用编辑字典返回类型,这是一种特殊的字典(JSON 格式),包括以下属性:
- "result" - 表示您正在编辑的要素的峰值负载返回的内容。 在此示例中,您将不会更改结果。 您要返回已编辑服务要素的当前 peakload 值,并使用 LoadHistory 表中的相同名称更新该字段。
- "edit" - 表示由于初始编辑而要进行的编辑数组。 在此示例中,您要通过执行一系列具有指定属性的 "adds" 操作来编辑 LoadHistory 表的 className 字段。
- 单击验证按钮以验证脚本并确保您的表达式能够正确执行。 单击确定。
- 在日志负载历史窗格的触发器下,选中插入和更新复选框。
- 在执行下,选中从应用程序评估中排除框。
- 在功能区属性规则选项卡的属性规则组中,单击保存。
注:
保存规则可能需要几分钟时间。
- 关闭属性规则视图窗格并保存工程。
测试计算规则
要测试刚刚创建的立即计算属性规则,必须通过编辑 peakload 属性来更新低压服务。 然后,您将确认通过该计算规则将编辑内容应用于 LoadHistory 表。
- 在目录窗格中,展开地图。 双击 Electric Network Editor 地图。
Electric Network Editor 地图随即显示。
- 单击功能区上的地图选项卡。 在导航组中,单击书签,然后选择测试属性规则。
地图范围将更新为低压服务要素的位置。
- 在地图选项卡的选择组中,单击选择工具,然后单击连接到 Electric Device 1267 的低压服务点。
- 在地图选项卡的选择组中,单击属性。
- 在属性窗格中,验证所选要素的全局 ID 为 {306A7664-7DDE-46EB-B415-A75F19658095}。
- 如有必要,请选中自动应用框以自动提交编辑内容。
- 对于 Peak Load (kW),输入 10,然后按 Enter 键。
当您更新 Peak Load (kW) 值时,新的属性规则将在 LoadHistory 表中生成记录,以追踪对低压服务点所做的编辑。
- 对于 Peak Load (kW),输入 30,然后按 Enter 键。
- 在内容窗格的独立表下,右键单击 LoadHistory 表并选择打开。
表内包含两行,其内容表示对 peakLoad 属性进行的更新。 这些内容是根据您创建的计算规则生成的。 此外,该表还包含一些字段,这些字段包含有关编辑者以及进行编辑的日期和时间的详细信息。
- 对低压服务点要素的 Peak Load (kW) 属性进行更多次编辑,并通过在编辑后刷新表来确认 LoadHistory 表已更新。
每次编辑点时,为低压服务点配置的当前计算规则都会在表中添加新行。 您的新计算规则将追踪针对低压服务资产组的峰值负载进行的每次编辑。 例如,使用 $originalFeature 全局,可以将规则配置为仅在 peakLoad 属性更改时才生成日志值。
- 保存工程。
注:
在现实情况下,可能以自动化方式更新这些服务的负载信息。 您创建的约束规则可能会通过引发错误的方式来防止异常值尖峰进入系统。
您的计算规则将自动报告这些值,并提供针对客户运营模式和趋势的深入了解。 使用 LoadHistory 表可与工程师和操作团队成员共享此信息,并在异常值指示问题时为其他分析提供资源。
您也可以使用 LoadHistory 表向客户服务人员和现场工作人员提供类似的分析。 这样,当在服务调用期间协助客户进行计费调用或在现场检查设备时,可以使用空间反馈。
接下来,您将配置弹出窗口,以显示从 LoadHistory 表中获得的信息、提供空间反馈,并在于服务调用期间协助客户进行计费调用或在现场检查设备时,向您的客户服务人员和现场工作人员提供帮助。 这可以为使用此数据的用户提供服务历史的环境。
配置弹出窗口以显示负载历史
之前,您创建了一个计算规则,用于在低压服务更新时报告峰值负载值。 计算属性规则检测到服务点负载历史中的变化,并将信息记录到表中。 接下来,您将配置弹出窗口,以显示从 LoadHistory 表获取的信息。
显示和汇总负载历史
最后一步,您将为低压服务资产组配置弹出窗口,并创建三个表达式以提取并显示在 LoadHistory 表中采集的信息。
- 在内容窗格中,展开电气设备(如有必要),请右键单击 Low Voltage Service 子图层,然后单击配置弹出窗口。
配置弹出窗口窗格随即打开。
- 在配置弹出窗口窗格中,单击表达式以创建一个 Arcade 表达式。
- 单击新建以打开表达式构建器窗口。
随即显示表达式构建器窗口。
您创建的第一个表达式将用于报告 LoadHistory 表中所选服务要素的最大峰值负载 (kW) 值。
- 在表达式构建器窗口中,输入以下参数:
- 对于名称,输入 Max。
- 对于标题,输入 MaxLoad。
此标题是弹出窗口中用于显示表达式结果的虚拟字段的显示名称。
- 在表达式文本框中,输入以下脚本:
//Create a variable to reference the LoadHistory table var fshistory = FeatureSetByName ($datastore,"LoadHistory", ["peakload"]) //Create a variable to reference the GlobalID of the selected feature in the map var GlobalID = $feature.globalID // We are interested in rows from LoadHistory.serviceGUID that match the Service feature selected. This filters results to return only ServiceGUIDs that match the $feature.GlobalID var rows = filter(fshistory,"serviceGUID = @GlobalID") //Guard logic to display 0 if no values found in the LoadHistory table if (count(rows) == 0)return 0 //Return filtered values from LoadHistory.peakload in the Low Voltage Service pop-up in bold return "<b>" + max (rows, "peakload") + "</b>"
注:
此表达式使用 max() 函数返回为峰值负载设置的最大值。 要返回为峰值负载设置的最小值,您可以使用 min() 替换 max()。
- 单击验证按钮以验证脚本并确保您的表达式能够正确执行,然后单击确定。
- 您可以自行创建第二个表达式,以报告为 LoadHistory 表中所选服务要素上的峰值负载 (kW) 设置的最小值。
提示:
考虑使用 min() 函数。
接下来,您将添加一个表达式,用于传达所选服务的编辑次数。
- 单击新建以打开表达式构建器窗口。
您创建的第一个表达式将用于报告 LoadHistory 表中所选服务要素的最大峰值负载 (kW) 值。
- 在表达式构建器窗口中,输入以下参数:
- 对于名称,输入 Count。
- 对于标题,输入 #Updates。
- 在表达式文本框中,输入以下脚本:
//Create a variable to reference the LoadHistory table var fshistory = FeatureSetByName ($datastore,"LoadHistory", ["peakload"]) //Create a variable to reference the GlobalID of the selected feature in the map var GlobalID = $feature.globalID // We are interested in rows from LoadHistory.serviceGUID that match the Service feature selected. This filters results to return only ServiceGUIDs that match the $feature.GlobalID var rows = filter(fshistory,"serviceGUID = @GlobalID") //Guard logic to display 0 if no values found in the LoadHistory table if (count(rows) == 0)return 0 //Return filtered values from LoadHistory.peakload in the Low Voltage Service pop-up return "<b>" + count (rows) + "</b>"
完成后,请查看表达式构建器设置。
- 单击验证按钮以验证脚本并确保您的表达式能够正确执行,然后单击确定。
- 在配置弹出窗口窗格中验证您的表达式。
注:
如果未创建 MinLoad 表达式,则列表可能会有所不同。
- 请自行构建一个表达式,用于计算所选服务要素峰值负载 (kW) 的平均值。
对于最后一行代码,使用 return "<b>" + max (rows, "peakload") + "</b>" 并将 max 替换为 average。
- 保存工程。
配置了弹出窗口表达式后,您将确认已生成预期结果并且结果正确显示在弹出窗口中。
- 在地图选项卡的导航组中,单击书签,然后单击测试属性规则。
地图范围将更新为低压服务点的位置。
- 在地图选项卡的导航组中,单击浏览工具并选择地图上全局 ID 值为 {306A7664-7DDE-46EB-B415-A75F19658095} 的低压服务点。
所选低压服务的弹出窗口随即显示。
- 在弹出窗口窗口中,查看表达式字段。
查看弹出窗口并记下 MaxLoad、MinLoad 和 #Updates 表达式字段及其在 LoadHistory 表中获取的字段关联值。 在此示例中,包含了用于计算所选要素的峰值负载平均值的附加表达式。
注:
在上面所使用技术的基础上,您可以移除弹出窗口中返回的值的粗体格式,或者通过将显示颜色更改为红色(如果值超过特定数字)来使这些值更加突出。 为此,请在表达式中使用 if-else 逻辑和 <font color> 标签。
在本教程中,您创建了一个约束属性规则,以维护数据完整性并在峰值负载值遇到尖峰时显示错误。 这提供了一个示例,说明如何将包含属性规则与域、子类型和条件值一起使用,以维护地理数据库要素类中的数据完整性。
然后,您创建了一个表并配置了计算属性规则,以检测服务点的峰值负载的变化,并将此变化和要素的 GUID 记录在新表中。 属性规则配置完成后,您可以使用 Arcade 创建一系列弹出窗口表达式,以从包含峰值负载历史的表中获取信息并在 ArcGIS Pro 中使用弹出窗口显示此信息。
本教程为您提供了结构单元,用于在您的地理数据库中开始创建更详细的属性规则。
您可以在教程库中找到更多教程。