PowerApps能否嵌套LookUp?如何生成SharePoint唯一子ID
首先,你的核心问题出在用文本匹配(StartsWith)处理数值类型的ID,导致和Max的数值计算类型不兼容,而且后续的嵌套LookUp逻辑方向错了——我们需要的是筛选所有属于当前主ID的子ID,再取最大值,而不是逐个查找特定子ID。
正确的解决思路
你的子ID是主ID(如29)加上0.1的倍数(29.1、29.2...),所以所有对应主ID的子ID都满足:主ID ≤ 子ID < 主ID + 1。基于这个数值范围来筛选,就能精准拿到所有目标子ID,再取最大值加0.1即可。
直接可用的公式
先把输入的主ID文本转为数值,再筛选+取最大值,同时处理“没有子ID(第一次生成)”的情况:
Coalesce( Max( Filter( my_list, 'Prueba' >= Value(DataCardValue9_2.Text) && 'Prueba' < Value(DataCardValue9_2.Text) + 1 ), 'Prueba' ), Value(DataCardValue9_2.Text) ) + 0.1
公式解释
Value(DataCardValue9_2.Text):把输入框的文本主ID转为数值,彻底避免类型不兼容问题。Filter(...):筛选出所有大于等于主ID、且小于主ID+1的子ID(刚好覆盖29.1、29.2这类符合规则的子ID)。Max(...):从筛选结果中取出最大的子ID,如果还没有该主ID的子ID,会返回空白。Coalesce(...):如果Max返回空白(即首次生成子ID),就用主ID本身代替,再加0.1得到第一个子ID(比如29→29.1)。
为什么你之前的方法不行?
- StartsWith的问题:你把数值列
Prueba当成文本处理,会出现匹配错误(比如主ID是29,子ID129.1也会被StartsWith("29")误匹配),而且文本类型无法直接和Max的数值计算兼容,必然报错。 - 嵌套LookUp的问题:你的逻辑是逐个查找特定的子ID值(如29.3、29.2),这完全不是“找最大值”的思路,反而会把找到的结果错误拼接在一起。PowerApps是支持嵌套函数的,只是你的嵌套逻辑方向完全错了。
额外注意事项
- 确保SharePoint的
Prueba列是数值类型(小数/数字),如果是文本列,需要在Filter里把列值转为数值:Value('Prueba') >= Value(DataCardValue9_2.Text)。 - 可以加个输入验证,比如用
IsNumeric(DataCardValue9_2.Text)判断输入是否为有效数字,避免非数字输入导致公式报错。
内容的提问来源于stack exchange,提问作者Elisa B. M.
相关产品推荐
相关产品推荐

