使用公式列

公式列是在 Microsoft Dataverse 表中显示计算值的列。 公式使用 Power Fx,这是一种功能强大但对人类友好的编程语言。 在 Dataverse 公式列中构建公式的方式与在 Microsoft Excel 中构建公式的方式相同。 在您键入时,Intellisense 会建议函数和语法,甚至可以帮助您修复错误。

添加公式列

  1. https://make.powerapps.com 登录到 Power Apps。

  2. 选择 ,然后选择要在其中添加公式列的表。 如果项目不在侧面板窗格中,请选择 …更多,然后选择所需项目。

  3. 选择区域,然后选择新建列

  4. 输入以下信息:

    • 列的显示名称
    • (可选)输入列的说明
  5. 对于数据类型,选择 fx 公式

  6. 键入公式或使用公式建议:

    公式框中输入 Power Fx 公式。 详细信息:键入公式


  1. 选择其他属性:
    • 如果您希望此列在视图、图表、仪表板和高级查找中可用,请选择可搜索
    • 高级选项
      • 如果公式的计算结果为十进制值,请展开高级选项以更改精确位数,介于 0 和 10 之间。 默认值为 2。
  2. 选择保存

键入公式

下面的示例创建了一个名为总价的公式列。 单位数列是整数数据类型。 价格列是十进制数据类型。

公式列定义的屏幕截图。

公式列显示价格乘以单位数的结果。

带有公式列的记录的屏幕截图。

您输入的公式确定列类型。 创建列后,您将无法更改列类型。 这意味着只有在不更改列类型的情况下,您才可以在创建列后更改公式。

例如,公式 price * discount 创建数字列类型。 您可以将 price * discount 更改为 price * (discount + 10%),因为这不更改列类型。 但是,无法将 price * discount 更改为 Text(price * discount),因为这需要将列类型更改为字符串。

获取公式建议(预览版)

[本主题是预发行文档,有可能会有所更改。]

描述您希望公式做什么并获取 AI 生成的结果。 公式建议接受您的自然语言输入,使用基于 GPT 的人工智能模型来解释和建议 Power Fx 公式。

重要

这是一项预览功能,仅在美国地区可用。

预览功能不适合生产使用且功能可能受限。 这些功能在正式发布之前已经可用,以便客户可以及早使用并提供反馈。

当前,支持引用单个表的公式建议。 不支持引用相关表上的列的公式建议。

先决条件

要启用此功能,您必须启用公式列的 AI 建议环境设置。 详细信息:公式列的 AI 建议

自然语言输入示例

假设有一个客户评级列,该列按帐户显示其评级。 客户评级列示例

获取公式建议框中,以自然语言输入公式,例如如果评级列上的评级等于或大于 5,则表示“好”,如果小于 5,则表示“平均值”,如果值为空或等于零,则表示“不好”,然后选择箭头按钮(输入)。

然后,复制建议的公式 建议的公式

将其粘贴到键入公式框中。 选择保存 将公式粘贴到键入公式框中。

以下是公式在粘贴后的显示方式。

Switch(
    ThisRecord.'Customer Rating',
    Blank(), "Bad",
    0, "Bad",
    1, "Average",
    2, "Average",
    3, "Average",
    4, "Average",
    5, "Good",
    6, "Good",
    7, "Good",
    8, "Good",
    9, "Good",
    10, "Good"
)

检查计算的评级说明公式列,如下所示。

检查公式列的结果

负责 AI

有关负责任的 AI 的信息,请转到以下资源:

Operators

您可以在公式列中使用以下运算符:
+、-、*、/、%、in、exactin、&

有关详细信息,请转到 Power Apps 中的运算符

数据类型

您可以在公式列中显示以下数据类型:

货币和选择(以前称为选项集)数据类型目前不受支持。

函数类型

您可以在公式列中使用以下函数类型:

  • 小数
  • 字符串
  • 布尔型
  • 选项集
  • 日期/时间 (TZI)
  • 日期/时间(用户本地)(仅限于与其他用户本地值 DateAdd 和 DateDiff 函数进行比较)
  • 日期/时间(仅限日期)(仅限于与其他纯日期值和 DateAdd 和 DateDiff 函数进行比较)
  • 货币
  • 整数,已升级为小数

函数

您可以在公式列中使用以下标量函数:

Abs

And

Day

Value *

If

Int

Len

Max

Mid

Min

Mod

Not

Or

Sum

Text *

* TextValue 函数仅适用于不涉及小数分隔符的整数。 小数分隔符因地区而异。 由于系统在不了解区域设置的情况下计算公式列,因此无法正确解释或生成小数分隔符。

公式列中的 WeekNumWeekday 函数不支持 * StartOfWeek 参数。

函数示例

Description 示例
检索日期值。 DateAdd(UTCNow(),-1,TimeUnit.Years)

创建小数公式列

创建一个返回十进制数的公式列。

  1. 创建列时,请输入以下信息:
    • 列的显示名称
    • (可选)输入列的说明
  2. 对于数据类型,选择 fx 公式
  3. 输入一个公式,该公式在 “编辑 ”栏中返回一个数值。 本示例创建一个名为 “Total Amount”的公式列单价 列为十进制数据类型。 用于十进制数的“创建新公式列”窗格的屏幕截图。
  4. 展开“ 高级选项”,选择 “十进制 ”作为 “公式” 数据类型,然后设置所需的小数位数。 十进制公式列定义的屏幕截图。
  5. 选择保存

创建整数公式列

创建一个返回整数的公式列。

  1. 创建列时,请输入以下信息:
    • 列的显示名称
    • (可选)输入列的说明
  2. 对于数据类型,选择 fx 公式
  3. 输入一个公式,该公式在 “编辑 ”栏中返回一个数值。 本示例创建一个名为 “单位数” 的公式列。 “总价 ”和 “单价 ”列为十进制数据类型。 创建用于整数的新公式列窗格的屏幕截图。
  4. 展开“ 高级选项”,选择 “整数 ”作为 “公式” 数据类型,并为整数列设置所需的格式。 整数公式列定义的屏幕截图。
  5. 选择保存

准则和限制

本节介绍 Dataverse 中公式列的准则和已知限制。

货币字段使用情况验证

  • 公式列不支持在公式中使用相关表货币列,如本例中所示。 具有不受支持的 Account.Annual Revenue 公式的公式列
  • 当前不支持直接在公式中使用货币列和汇率。 通过 Decimal 函数(例如 Decimal(currency column)Decimal(exchange rate))可以使用货币列和汇率列。 Decimal 函数确保输出在接受的范围内。 如果货币或汇率列值超出接受的范围,公式将返回 NULL。
  • 公式列表达式不支持基础货币列,因为它们是用于报告目的的系统列。 如果希望得到类似结果,可以将货币列类型以及汇率列组合使用:CurrencyField_Base = (CurrencyField / ExchangeRate)

日期时间列使用情况验证

  • 日期时间公式列的行为只能在其他公式列未使用它时更新。
  • 对于日期时间公式列,当使用 DateDiff 函数时,请确保:
    • 无法将用户当地时间行为列与 DateTime(TZI)/DateOnly 行为列进行比较,也无法一起使用。
    • 用户当地时间行为列只能与其他用户当地时间列进行比较或一起使用。
    • DateTime(TZI) 行为列只能与其他 DateTime(TZI)/DateOnly 行为列进行比较,或在 DateDiff 函数中与后者一起使用。
    • DateOnly 行为列可以与其他 DateTime(TZI)/DateOnly 行为列进行比较,或在 DateDiff 函数中与后者一起使用。 公式列不支持的日期时间配置
  • 日期时间列和日期时间函数 UTCNow()Now() 不能作为参数传递给字符串函数。 在公式中传递了不受支持的日期时间参数的公式列

汇总字段中的公式列使用情况

  • 简单公式列是指公式使用同一记录中的列或使用硬编码值。 对于汇总列,公式列必须是简单公式列,例如本例中的汇总列。 汇总列的简单公式列示例 汇总列配置示例
  • 依赖于时间绑定函数 UTCNow()UTCToday() 的公式列不能用于汇总字段。

Power Fx Text 函数建议

  • 公式列不支持具有“数字”类型的单个参数的 Text() 函数。 数字可以是整数、小数或货币。 具有不受支持的包含数字参数的 Text 函数的公式列

  • 公式列不支持在以下配置中使用数字:

    • 在字符串函数中。 这些字符串函数放置在需要文本参数的位置:Upper、Lower、Left、Right、Concatenate、Mid、Len、StartsWith、EndsWith、TrimEnds、Trim、Substitute 和 Replace。
    • 在隐式公式中,例如 12 & "foo"12 & 34"foo" & 12
    • 不支持将内部数字强制转换为文本。 建议使用 Text(Number, Format) 将数字转换为文本。 在 Text 函数中传递 String 参数的情况下,不支持 Format 参数。
    • 下面是使用 Text 函数将数字转换为文本并向其追加字符串的示例:
    Concatenate(Text(123,"#"),"ab")
    Text(123,"#") & "foo"
    
  • 公式列中不支持特定于区域设置的格式标记,例如 "." 和 ","。 公式中不受支持的特定于区域设置的格式标记作为参数传递到 Text 函数

公式列的范围验证

  • 不能设置公式列的最小值最大值属性。
  • 所有内部计算应位于小数类型公式列的 Dataverse 范围内(-100000000000 到 100000000000)。
  • 在公式栏中输入的硬编码文字值应位于 Dataverse 范围内。
  • 如果数字列为 NULL,它在中间操作中将会视为 0。 例如,a+b+c and If a = null, b=2, c=3,公式列将给出 0 + 2 + 3 = 5
    • 在这种情况下,此行为不同于计算列,因为计算列给出 null + 2 + 3 = null

公式列的常规验证

  • 公式列可以引用其他公式列,但公式列不能引用自身。
  • 公式列不支持循环链,例如 F1 = F2 + 10, F2 = F1 * 2
  • 公式列中的公式表达式最大长度为 1000 个字符。
  • 公式列中允许的最大深度为 10。 深度定义为引用其他公式的公式列或或汇总列的链。
    • 例如,table E1, F1 = 1*2, table E2, F2 - E1*2。 在此示例中,F2 的深度为 1。
  • 在模型驱动应用中,针对以下项禁用排序:
    • 包含相关表列的公式列。
    • 包含逻辑列(例如,地址列)的公式列。
    • 包含另一个计算列或公式列的公式列。
    • 使用时间限制函数 UTCNow() 的公式列。
  • 公式列中不支持格式为“语言、持续时间、时区”且类型为“整数”的列。
  • 公式列中不支持格式为“电子邮件、文本区域、股票代号、URL”且类型为“字符串”的列。
  • 当应用处于移动脱机模式下时,公式列不显示值。
  • 您无法触发公式列上的工作流或插件。
  • 建议不要在公式列中使用计算列,反之亦然。
  • 未对公式列触发重复检测规则。
  • Now 函数可以与公式列一起使用。 Now() 具有用户当地时间行为,UTCNow() 具有时区无关行为。
  • 您可以为小数列设置精度属性。
  • 对于返回公式的数值,默认公式数据类型值设置为 十进制
  • 不支持更新整数公式列的格式。

当前不支持 Power Fx 函数

  • Power
  • Sqrt
  • Exp
  • Ln
  • ^(运算符)

无法生成的数据类型的公式列

  • 选择(是/否选择除外)
  • 货币

另请参见

列的类型

Microsoft Power Fx 概述

使用代码的公式列、计算列和汇总列