uipath-process-mining
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseUiPath Process Mining — uip pm
Assistant
uip pmUiPath Process Mining — uip pm
助手
uip pmBuild and operate a UiPath Process Mining process app end-to-end from the terminal with : from a raw CSV to a queryable process model. The whole loop — templates, data mapping, upload, ingest, the dbt/Snowflake transformation layer, and querying — is scriptable; use the CLI, don't hand-roll the Process Mining REST API.
uip pmThis works for every app type, not just : the pipeline (mapping → upload → ingest → transform → data model → query) is identical across the event-log template and the source-system templates (P2P / O2C / IM / AP / … on SAP, Oracle, NetSuite, ServiceNow, Salesforce, …). Only what the data mapping / extract must contain differs. See .
uipath.customuipath.customreferences/app-types.mdThis skill is the process-mining domain layer — what to build and why. The
low-level mechanics of driving the tool — the command-group map, the //
output envelope, the ETag get-modify-put pattern, , , and field-id
discovery — are one layer down in .
The rules below carry the headline command and link down to it and to the domain
references for the full detail.
ResultCodeData--wait--stagereferences/uip-pm-cli.md通过终端的工具端到端构建并运行UiPath Process Mining流程应用:从原始CSV文件到可查询的流程模型。整个流程——模板、数据映射、上传、摄取、dbt/Snowflake转换层以及查询——均可编写脚本;使用CLI工具,无需手动编写Process Mining REST API。
uip pm这适用于所有应用类型,不仅限于:从映射→上传→摄取→转换→数据模型→查询的流程在事件日志模板和源系统模板(SAP、Oracle、NetSuite、ServiceNow、Salesforce等系统上的P2P/O2C/IM/AP等流程)中完全一致。仅数据映射/提取所需包含的内容有所不同。详见。
uipath.customuipath.customreferences/app-types.md本技能是流程挖掘领域层——说明要构建什么以及原因。驱动工具的底层机制——命令组映射、//输出包、ETag获取-修改-上传模式、、以及字段ID发现——在中有更详细的说明。以下规则会给出核心命令及链接,指向底层机制和领域参考文档以获取完整细节。
ResultCodeData--wait--stagereferences/uip-pm-cli.mdWhen to Use This Skill
何时使用本技能
- Build a process app from data — you have a CSV / event log and want a mined process (throughput, variants, rework, steps-to-resolution).
- Author the transformation layer — edit the dbt (Snowflake) SQL models that produce the process model, then re-run.
- Query a process app — pull numbers out: aggregate group-by + metrics, raw detail rows, percentiles, root-cause analysis, process insights.
- Expose custom analysis — surface your own analytical table (a weekly aggregate, an impact study) as a queryable entity.
- Edit the app model — change a field's data kind, add calculated fields, or fix a data-kind mismatch that locks dashboards open (DNA-46960).
- Manage the app lifecycle — stages (dev → published), RBAC, deletion.
- 从数据构建流程应用——你拥有CSV/事件日志,希望生成挖掘后的流程(吞吐量、变体、返工、解决步骤)。
- 编写转换层——编辑生成流程模型的dbt(Snowflake)SQL模型,然后重新运行。
- 查询流程应用——提取数据:聚合分组+指标、原始明细行、百分位数、根本原因分析、流程洞察。
- 展示自定义分析——将你自己的分析表(每周聚合、影响研究)作为可查询实体对外展示。
- 编辑应用模型——更改字段的数据类型、添加计算字段,或修复导致仪表板锁定无法关闭的数据类型不匹配问题(DNA-46960)。
- 管理应用生命周期——阶段(开发→已发布)、RBAC、删除。
App lifecycle
应用生命周期
An app moves through: create (from a template + data mapping) → load (upload + ingest) → transform on the dev stage (the ELT/dbt layer) → publish to the published stage → query / build dashboards. Develop against a small subset on , then publish the full dataset for real analysis (). The ELT editor is the command group over the dbt (Snowflake) model tree that turns loaded source tables into the process model — its command surface and the apply-vs-run distinction are in .
devreferences/lifecycle-and-rbac.mdtransformationsreferences/transformations.md应用会经历以下阶段:创建(从模板+数据映射)→加载(上传+摄取)→在开发阶段进行转换(ELT/dbt层)→发布到已发布阶段→查询/构建仪表板。针对阶段的小型数据集进行开发,然后发布完整数据集用于实际分析()。ELT编辑器是基于dbt(Snowflake)模型树的命令组,它将加载的源表转换为流程模型——其命令界面及应用与运行的区别详见。
devreferences/lifecycle-and-rbac.mdtransformationsreferences/transformations.mdCritical Rules
关键规则
-
To make a custom analytical table queryable, register it as a Case-linked data-model table, then RE-INGEST. Process Mining is case-centric: a queryable table must be theroot or reach
Casesvia a foreign key — an unlinked table is rejected at query time (Cases). First check the built-in Case-child slots:UserError_TableIsDeleted(multi-valued per-case labels:Tags/Tag) andTag_type(per-case SLA/deadline:Due_dates/Expected_date/Actual_date/On_time) — populate their dbt models rather than adding a table when your data fits. Otherwise register a custom table withCost, where the file is a DataModelDto entryuip pm apps data-model add-table <app> --file <table.json>(loose-link a standalone aggregate with a surrogate PK + nullable{ name, primaryKey, foreignKeys:[{table:"Cases",column:"Case_ID"}] }).Case_IDeditsadd-table(upsert, ETag-safe) then/dev/dataModel; the table only becomes queryable afterapplyCurrentDatamodel(a data-model edit takes effect only on the next ingestion). Full recipe + Tags/Due_dates decision table iningestions create --wait.references/data-model.md -
Match the template to the data — the rest of the pipeline is identical for all app types. A single denormalized log (Case, Activity, Timestamp [+ attributes]) ⇒("Event log"). Otherwise pick the
uipath.customtemplate matching your source system AND process (Purchase-to-Pay on SAP ⇒<process>.<system>; incidents from ServiceNow ⇒uipath.p2p.sap) — but only when you actually have that system's full multi-table extract, not a single log you exported from it. Every template shares the same model shape and the same mapping→ingest→transform→query machinery; only the expected input tables differ. Discover withuipath.im.servicenow, inspect a template withapp-types list. Seeapp-types get.references/app-types.md -
Patch the
uipath.customoptional-column gotcha (custom-only). Source-system templates ship their own correct transformations — this gotcha is specific to theCases.sqlevent-log template. The template'suipath.customreferencesmodels/Cases.sql,Event_log."Case","Case_status","Case_type". A minimal mapping (Case_ID/Activity/timestamp only) doesn't produce those ⇒ dbt"Case_value". Fix: pull the file, replace the missing refs with000904 invalid identifier, push, andcast(null as varchar/float).transformations apply/Tags.sqlare safeDue_dates.sqlstubs.where 1=0 -
After a transform-only failure,— don't re-ingest. The data is already loaded. Fix SQL (
apply→ edit →transformations get, ortransformations update --etag '<the get's ETag>'for a new file, which needs none) thencreate(re-transforms loaded data). Re-ingest only when the raw data or the mapping/parse settings change.transformations apply -
A wrong data mapping does NOT mean recreating the app — fix it in place with. The mapping is not create-only:
apps data-mapping→ edit →uip pm apps data-mapping get <app> --destination ./mapping.jsonreplaces it on an existing app.uip pm apps data-mapping update <app> --file ./mapping.json --etag '<etag>'is required — pass the--etagthat yourData.ETagreturned, which is what proves the edit was based on the version you read; a lost race is refusedget(re-409 UserError_ETagFileConflictfor the new version and ETag, re-apply, retry), and a table-less file is refused rather than wiping the stored mapping. Unlike a SQL fix (Rule 4), a mapping change is a parse-setting change, so it takes effect only on the next ingestion — re-getif the source columns changed, thenfiles upload. Onlyingestions createis writable (devis read-only). Facts + failure modes inpublished.references/pre-flight.md -
Useon async commands.
--waitandingestions create --waitblock to a terminal state, print the dbt/loader error on failure, and exit non-zero — no hand-rolledtransformations apply --waitpoll loop.apps list -
Query field ids come from, not column names.
query info/query runbodies take the hashedpercentileids. Prefer the sugar:F__<Table>__<Col>__<hash>resolves human names for you (fn ∈query run <app> --group-by <col> --metric <col>:<fn>).average|count|sum|min|max -
Develop onwith a data subset; publish the full dataset. The
devstage is for iterating on the mapping and transformations — keep it fast by loading a small representative subset of the data. Once the model is right, publish so the published stage carries the full dataset for the dashboards and sharing. Query/transform againstdev; consumers read the published dashboards. Note CLI--stage devis currently unreachable (noquery --stage publishedpath completes a published-stage ingestion) — do CLI querying onuip pm(dev).references/lifecycle-and-rbac.md -
RBAC is folder/role-based at the platform layer, not the process app itself. A process app lives in a folder; who can view vs. edit vs. publish is governed by Orchestrator/Identity roles and folder assignments — configure it with(roles, role assignments, effective-access) and
uipath-admin(folders). Seeuipath-platform.references/lifecycle-and-rbac.mditself does not grant access.uip pm -
Edit a field's data kind / calculated fields with— and a data-kind mismatch can lock the app open. Change a field's kind (e.g. numeric→duration), rename it, or add a calculated field with
apps model fields(the semantic model; dev-only, and nouip pm apps model fields set <app> <field> [--kind|--display-name|--expression]— it merges into the version it just read, so a lost race is fixed by re-running it; a whole-document--etagdoes requireapps model update). Relational/arithmetic operators require both operands to share a data kind, so flipping a field to--etagwhile a metric / calculated field / dashboard filter still compares it to adurationconstant persists an invalid model that throws at dashboard open — the "Must be duration, not numeric, for the 'lt' input" lockout (DNA-46960), which leaves only the data-upload module reachable.numeric/fields setvalidate and refuse such an edit with a hint; fix an already-broken app by making the comparison consistent (re-type the field or the constant). Full surface + the data-kind rule inupdate.references/model-editing.md
-
要使自定义分析表可查询,请将其注册为关联Case的数据模型表,然后重新摄取。 Process Mining是以Case为中心的:可查询表必须是根表,或通过外键关联到
Cases——未关联的表在查询时会被拒绝(Cases)。首先检查内置的Case子插槽:UserError_TableIsDeleted(每个Case的多值标签:Tags/Tag)和**Tag_type(每个Case的SLA/截止日期:Due_dates/Expected_date/Actual_date/On_time)——当你的数据符合要求时,填充它们的dbt模型而非添加新表。否则,使用Cost注册自定义表,其中文件是DataModelDto条目uip pm apps data-model add-table <app> --file <table.json>(使用代理主键+可为空的{ name, primaryKey, foreignKeys:[{table:"Cases",column:"Case_ID"}] }松散关联独立聚合表)。Case_ID会编辑add-table(更新插入,支持ETag安全),然后执行/dev/dataModel;只有在执行applyCurrentDatamodel**后,该表才可查询(数据模型编辑仅在下次摄取时生效)。完整方案及Tags/Due_dates决策表详见ingestions create --wait。references/data-model.md -
使模板与数据匹配——所有应用类型的其余流程完全一致。 单个非规范化日志(Case、Activity、Timestamp [+属性])⇒(“事件日志”)。否则,选择与你的源系统和流程匹配的
uipath.custom模板(SAP上的采购到付款⇒<process>.<system>;ServiceNow的事件⇒uipath.p2p.sap)——但仅当你实际拥有该系统的完整多表提取数据时才使用,而非从该系统导出的单个日志。每个模板共享相同的模型结构和相同的映射→摄取→转换→查询机制;仅预期的输入表有所不同。使用uipath.im.servicenow发现模板,使用app-types list查看模板详情。详见app-types get。references/app-types.md -
修复的
uipath.custom可选列陷阱(仅自定义模板)。 源系统模板自带正确的转换逻辑——此陷阱仅针对Cases.sql事件日志模板。模板的uipath.custom引用了models/Cases.sql、Event_log."Case"、"Case_status"、"Case_type"。最小化映射(仅Case_ID/Activity/timestamp)不会生成这些字段⇒dbt报错"Case_value"。修复方法:拉取文件,将缺失的引用替换为000904 invalid identifier,上传文件,然后执行**cast(null as varchar/float)**。transformations apply/Tags.sql是安全的Due_dates.sql存根。where 1=0 -
仅转换失败后,执行——不要重新摄取。 数据已加载。修复SQL(
apply→编辑→transformations get,或使用transformations update --etag '<获取到的ETag>'创建新文件,无需ETag),然后执行create(重新转换已加载的数据)。仅当原始数据或映射/解析设置更改时,才重新摄取。transformations apply -
错误的数据映射并不意味着要重新创建应用——使用就地修复。 映射并非仅可创建:
apps data-mapping→编辑→uip pm apps data-mapping get <app> --destination ./mapping.json可替换现有应用的映射。uip pm apps data-mapping update <app> --file ./mapping.json --etag '<etag>'是必填项——传入你的--etag命令返回的get,以此证明编辑基于你读取的版本;冲突会被拒绝(Data.ETag,重新409 UserError_ETagFileConflict获取新版本和ETag,重新应用更改并重试),无表的文件会被拒绝,避免擦除已存储的映射。与SQL修复(规则4)不同,映射更改属于解析设置更改,因此仅在下次摄取时生效——如果源列更改,重新执行get,然后执行files upload。仅ingestions create阶段可写(dev阶段为只读)。详情及失败模式详见published。references/pre-flight.md -
在异步命令上使用。
--wait和ingestions create --wait会阻塞直到终端状态,失败时打印dbt/加载器错误,并返回非零退出码——无需手动编写transformations apply --wait轮询循环。apps list -
查询字段ID来自,而非列名。
query info/query run的请求体需要哈希后的percentileID。推荐使用简化方式:F__<Table>__<Col>__<hash>会自动解析人性化名称(fn ∈query run <app> --group-by <col> --metric <col>:<fn>)。average|count|sum|min|max -
在阶段使用数据子集进行开发;发布完整数据集。
dev阶段用于迭代映射和转换逻辑——通过加载小型代表性子集保持开发速度。模型确定后,发布应用,使published阶段承载完整数据集用于仪表板和共享。针对dev进行查询/转换;用户读取已发布的仪表板。注意当前CLI的--stage dev不可用(没有query --stage published路径可完成已发布阶段的摄取)——在uip pm阶段进行CLI查询(dev)。references/lifecycle-and-rbac.md -
RBAC在平台层基于文件夹/角色,而非流程应用本身。 流程应用位于文件夹中;查看、编辑、发布权限由Orchestrator/Identity角色和文件夹分配管理——使用(角色、角色分配、有效访问权限)和
uipath-admin(文件夹)进行配置。详见uipath-platform。references/lifecycle-and-rbac.md本身不授予访问权限。uip pm -
使用编辑字段的数据类型/计算字段——数据类型不匹配会导致应用锁定。 使用
apps model fields更改字段类型(例如numeric→duration)、重命名或添加计算字段(语义模型;仅dev阶段可用,无需uip pm apps model fields set <app> <field> [--kind|--display-name|--expression]——它会合并到刚读取的版本中,冲突可通过重新运行命令修复;全文档的--etag需要apps model update)。关系/算术运算符要求两个操作数的数据类型相同,因此将字段改为--etag时,如果指标/计算字段/仪表板筛选器仍将其与duration常量比较,会保留无效模型,导致仪表板打开时抛出错误——即“'lt'输入必须为duration类型,而非numeric类型”锁定问题(DNA-46960),此时仅数据上传模块可访问。numeric/fields set会验证并拒绝此类编辑,并给出提示;修复已损坏的应用需使比较一致(重新设置字段类型或常量类型)。完整命令界面及数据类型规则详见update。references/model-editing.md
Quick Start
快速开始
The end-to-end CSV → queryable-app command sequence (discover template → create →
upload → ingest → patch transform / fix mapping → query) is in
.
references/uip-pm-cli.md从CSV到可查询应用的端到端命令序列(发现模板→创建→上传→摄取→修补转换/修复映射→查询)详见。
references/uip-pm-cli.mdExtending the model with custom analysis
使用自定义分析扩展模型
The killer use case is your own SQL. Add analytical dbt models with (use for existing files; inline intermediates as CTEs if you prefer fewer files), then register each queryable output as a Case-linked data-model table + re-ingest (Rule 1) so can read it. Full recipe + the DataModelDto entry shape (///) and the Tags/Due_dates decision table in ; the transformation dev loop and dbt/pm_utils notes in ; the query AST and sugar in .
transformations create <path> --fileupdatequerytypenameprimaryKeyforeignKeysreferences/data-model.mdreferences/transformations.mdreferences/querying.md核心使用场景是自定义SQL。使用添加分析型dbt模型(现有文件使用;如果偏好更少文件,可将中间结果内联为CTE),然后将每个可查询输出注册为关联Case的数据模型表+重新摄取(规则1),以便可以读取。完整方案及DataModelDto条目格式(///)、Tags/Due_dates决策表详见;转换开发循环及dbt/pm_utils说明详见;查询AST及简化方式详见。
transformations create <path> --fileupdatequerytypenameprimaryKeyforeignKeysreferences/data-model.mdreferences/transformations.mdreferences/querying.mdReference Navigation
参考文档导航
Two layers: the CLI reference (how to drive the tool) and the
process-mining domain references (what to build and why). Start with a domain
reference for the decision; drop into the CLI reference for the mechanics it uses.
uip pm| File | Read when |
|---|---|
| CLI mechanics (low-level) — the command-group map, the |
| choosing/targeting a template — custom vs source-system, why the pipeline is the same for all, what the mapping/extract must contain per family |
| before any upload — encoding/delimiter/date-format/empty-row checks and the minimal |
| authoring/fixing dbt models — the |
| exposing a custom table to |
| editing the app model — a field's data kind (e.g. numeric→duration), calculated fields, the two models (semantic |
| pulling numbers out — the aggregate body AST, the |
| dev vs published stages, publishing, and where process-app RBAC is configured |
分为两层: CLI参考(如何驱动工具)和流程挖掘领域参考(要构建什么及原因)。先查看领域参考文档做决策,再查看CLI参考文档了解具体操作机制。
uip pm| 文件 | 阅读场景 |
|---|---|
| CLI底层机制——命令组映射、 |
| 选择/定位模板——自定义模板vs源系统模板,为何所有应用类型的流程一致,各类型模板的映射/提取需包含的内容 |
| 上传前准备——编码/分隔符/日期格式/空行检查,以及最小化 |
| 编写/修复dbt模型—— |
| 向 |
| 编辑应用模型——字段的数据类型(例如numeric→duration)、计算字段、两种模型(语义 |
| 提取数据——聚合请求体AST、 |
| 开发vs已发布阶段、发布操作,以及流程应用RBAC的配置位置 |
Anti-patterns — what NOT to do
反模式——请勿执行以下操作
- Repurposing /
Tags.sqlto smuggle an unrelated analytics table through a pre-registered entity. Fine — intended, even — to populate them with their real semantics (per-case labels; per-case SLAs); wrong to jam a weekly aggregate intoDue_dates.sqlto dodge add-table. It corrupts those features and fights their primary key. Register a real Case-linked table instead (Rule 1).Due_dates - Adding a data-model table with no link to — it registers but every query fails
Cases. Give a standalone table a surrogate PK + nullableUserError_TableIsDeletedFK toCase_ID(Rule 1).Cases - Forgetting to re-ingest after . The data-model edit is inert until the next
add-tablere-materializes the tables (Rule 1).ingestions create - Re-uploading + re-ingesting after a transform-only failure. The data is loaded; fix the SQL and . Re-ingest only when raw data or parse settings change (Rule 4).
transformations apply - Deleting and recreating an app to fix a mapping mistake (or telling the user that's the only option). The mapping is editable after creation — /
apps data-mapping get(Rule 5). Recreating also throws away the transformations you already patched.update - after a mapping change.
transformations applyonly re-runs SQL over already-parsed data; a new mapping changes how the raw file is parsed, so it needsapply(Rule 5). This is the mirror of Rule 4 — get the direction wrong and the edit silently appears to do nothing.ingestions create - Re-ting a resource just to harvest a fresh
getfor a rejected write. That defeats the--etagguard — it makes the precondition pass no matter who wrote in between, silently overwriting them. A 409/412 means the resource moved: re-If-Matchthe latest document, re-apply your change on top of that, then write with the ETag that read returned. Never pair a stale local file with a freshly fetched ETag (get).references/uip-pm-cli.md - Hand-rolling an poll loop. Use
apps liston--wait/ingestions create(Rule 6).transformations apply - Passing column names in a raw body, or hand-writing the aggregate AST. Bodies take hashed field ids from
query run; use thequery infosugar (Rule 7).--group-by/--metric - Patching on a source-system template. That gotcha is
Cases.sql-only; source templates ship correct transformations — feed the expected extract and extend, don't rewrite (Rule 3).uipath.custom - Using a source template for a single flat log (or for a full multi-table extract). Match the template to the data shape (Rule 2).
uipath.custom - Iterating on the full dataset. Develop on with a small subset; publish the full data (Rule 8).
dev - Changing a field's data kind while a comparison still uses the old kind. Flipping a field to (or any kind) while a metric / calculated field / dashboard filter compares it to a constant of the old kind persists an invalid model that locks the app open (Rule 10). Reconcile the comparison first — re-type the field or the constant.
duration
- 复用/
Tags.sql将无关的分析表通过预注册实体偷偷引入。填充符合其实际语义的数据(每个Case的标签;每个Case的SLA)是可行的,甚至是预期的;但将每周聚合数据塞入Due_dates.sql以避免添加新表是错误的。这会破坏这些功能,并与它们的主键冲突。应注册真正关联Case的表(规则1)。Due_dates - 添加未关联的数据模型表——表会注册成功,但所有查询都会失败(
Cases)。为独立表添加代理主键+可为空的UserError_TableIsDeleted外键关联到Case_ID(规则1)。Cases - 添加表后忘记重新摄取——数据模型编辑在下次重新生成表前不会生效(规则1)。
ingestions create - 仅转换失败后重新上传+重新摄取——数据已加载;修复SQL并执行。仅当原始数据或解析设置更改时才重新摄取(规则4)。
transformations apply - 删除并重新创建应用以修复映射错误(或告知用户这是唯一选项)。映射可在创建后编辑——使用/
apps data-mapping get(规则5)。重新创建还会丢失你已修补的转换逻辑。update - 映射更改后执行——
transformations apply仅对已解析的数据重新运行SQL;新映射会更改原始文件的解析方式,因此需要执行apply(规则5)。这是规则4的镜像——方向错误会导致编辑看似无效。ingestions create - 仅重新获取资源以获取新的用于被拒绝的写入——这会破坏
--etag保护机制——无论期间谁进行了写入,前置条件都会通过,从而静默覆盖他人的更改。409/412错误意味着资源已更改:重新获取最新的文档,在其基础上重新应用你的更改,然后使用读取返回的ETag进行写入。切勿将过时的本地文件与新获取的ETag配对(If-Match)。references/uip-pm-cli.md - 手动编写轮询循环——在
apps list/ingestions create上使用transformations apply(规则6)。--wait - 在原始请求体中传入列名,或手动编写聚合AST——请求体需要来自
query run的哈希字段ID;使用query info简化方式(规则7)。--group-by/--metric - 修补源系统模板的——该陷阱仅针对
Cases.sql;源模板自带正确的转换逻辑——提供预期的提取数据并扩展,不要重写(规则3)。uipath.custom - 对单个扁平日志使用源模板(或对完整多表提取数据使用)——使模板与数据结构匹配(规则2)。
uipath.custom - 在完整数据集上迭代开发——在阶段使用小型子集进行开发;发布完整数据(规则8)。
dev - 更改字段数据类型时仍使用旧类型进行比较——将字段改为(或任何类型)时,如果指标/计算字段/仪表板筛选器仍将其与旧类型的常量比较,会保留无效模型,导致应用锁定(规则10)。先调整比较逻辑——重新设置字段类型或常量类型。",
duration