您可以使用报表模型设计器函数来计算新属性。例如,假设您需要了解每个销售订单的总销售额。此数值为订单的销售额加上所付税额。您可以使用 Add 函数,将每个订单的销售总额与所付税额相加。下面的列表说明了可用的函数及其要求和行为。
标量函数
通过使用标量函数,您可以依据单个参数执行计算,为字段返回新的单值。
| 函数名称 | 参数 | 数据类型 | 基数 | 说明 | 
|---|---|---|---|---|
| Add | Item1 | Numeric | 1 | 要加的第一项。 | 
| Item2 | Numeric | 1 | 要加的第二项。 | |
| Return | 如果任意一项为 Float 类型,则为 Float 类型;或者,如果任意一项是 Decimal 类型,则为 Decimal 类型;否则,为 Integer 类型。 | |||
| Subtract | Item1 | Numeric | 1 | 被减数项。 | 
| Item2 | Numeric | 1 | 减数项。 | |
| Return | 如果任意一项为 Float 类型,则为 Float 类型;或者,如果任意一项是 Decimal 类型,则为 Decimal 类型;否则,为 Integer 类型。 | |||
| Multiply | Item1 | Numeric | 1 | 要乘的第一项。 | 
| Item2 | Numeric | 1 | 要乘的第二项。 | |
| Return | 如果任意一项为 Float 类型,则为 Float 类型;或者,如果任意一项是 Decimal 类型,则为 Decimal 类型;否则,为 Integer 类型。 | |||
| Divide | Item1 | Numeric | 1 | 被除数项。 | 
| Item2 | Numeric | 1 | 除数项。 | |
| Return | 如果任意一项为 Float 类型,则为 Float 类型;否则,为 Decimal 类型。 | |||
| Power | Base | Numeric | 1 | 要求幂的底。 | 
| Exponent | Numeric | 1 | 指数。 | |
| Return | 如果任意一项为 Float 类型,则为 Float 类型;或者,如果任意一项是 Decimal 类型,则为 Decimal 类型;否则,为 Integer 类型。 | |||
| Negate | Item | Numeric | 1 | 要求反的项。 | 
| Return | 与 Item 的类型相同。 | |||
| Mod | Item1 | Integer | 1 | 被除数项。 | 
| Item2 | Integer | 1 | 除数项。 | |
| Return | Integer | 除运算的余数。 | ||
| Equals | Item1 | Boolean、DateTime、Integer、Decimal、Float、String 或 EntityKey | 1 | 要比较的第一项。 | 
| Item2 | 1 | 要比较的第二项。Item1 和 Item2 必须为相同的数据类型。 | ||
| Return | Boolean | 指示两个项是否相同。 | ||
| NotEquals | Item1 | Boolean、DateTime、Integer、Decimal、Float、String 或 EntityKey | 1 | 要比较的第一项。 | 
| Item2 | 1 | 要比较的第二项。Item1 和 Item2 必须为相同的数据类型。 | ||
| Return | Boolean | 指示两个项是否不相同。 | ||
| GreaterThan | Item1 | DateTime、Integer、Decimal、Float 或 String | 1 | 要比较的第一项。 | 
| Item2 | 1 | 要比较的第二项。Item1 和 Item2 必须为相同的数据类型。 | ||
| Return | Boolean | 指示第一项是否大于第二项。 | ||
| GreaterThanOrEquals | Item1 | DateTime、Integer、Decimal、Float 或 String | 1 | 要比较的第一项。 | 
| Item2 | 1 | 要比较的第二项。Item1 和 Item2 必须为相同的数据类型。 | ||
| Return | Boolean | 指示第一项是否大于或等于第二项。 | ||
| LessThan | Item1 | DateTime、Integer、Decimal、Float 或 String | 1 | 要比较的第一项。 | 
| Item2 | 1 | 要比较的第二项。Item1 和 Item2 必须为相同的数据类型。 | ||
| Return | Boolean | 指示第一项是否小于第二项。 | ||
| LessThanOrEquals | Item1 | DateTime、Integer、Decimal、Float 或 String | 1 | 要比较的第一项。 | 
| Item2 | 1 | 要比较的第二项。Item1 和 Item2 必须为相同的数据类型。 | ||
| Return | Boolean | 指示第一项是否小于或等于第二项。 | ||
| And | Item1 | Boolean | 1 | 第一个条件。 | 
| Item2 | Boolean | 1 | 第二个条件。如果 Item1 为 False,则不计算 Item2。 | |
| Return | Boolean | 如果 Item1 和 Item2 均为 true,则 Return 值为 true。 | ||
| Or | Item1 | Boolean | 1 | 第一个条件。 | 
| Item2 | Boolean | 1 | 第二个条件。如果 Item1 为 true,则不计算 Item2。 | |
| Return | Boolean | 如果 Item1 和 Item2 中任意一个为 true,则 Return 值为 true。 | ||
| Not | Item | Boolean | 1 | 要求反的条件。 | 
| Return | Boolean | 如果 Item 为 false,则 Return 值为 true。 | ||
| Truncate | Item | Decimal 或 Float | 1 | 要截断的项。 | 
| Digits | Integer | 1 | 要将项截至的小数位数。例如,如果指定 3,则表示在小数点右侧第三位后将项截断。 | |
| Return | Return 的值类型与截断项的类型相同。 | |||
| Round | Item | Decimal 或 Float | 1 | 要舍入的项。 | 
| Digits | Integer | 1 | 要将项舍入至的小数位数。例如,如果指定 3,则表示将项舍入至小数点右侧的第三位。 | |
| Return | Return 的值类型与舍入项的类型相同。 | |||
| Integer | Item | Numeric 或 String | 1 | 要转换的项。在报表生成器中,Integer 在“函数”选项卡上列为 INT。 | 
| Return | Integer | 转换为整数的项。如果项是数值,则将其截断。请注意,将使用固定的区域设置转换数值字符串。句点为小数点分隔符。不允许使用逗号分隔千位。 | ||
| Decimal | Item | Numeric 或 String | 1 | 要转换的项。 | 
| Return | Decimal | 转换为十进制的项。 | ||
| Float | Item | Numeric 或 String | 1 | 要转换的项。 | 
| Return | Float | 转换为浮点值的项。 | ||
| String | Item | Numeric | 1 | 要转换的项。在报表生成器中,String 在“函数”选项卡上列为 TEXT。 | 
| Return | String | 转换为字符串的项。 | ||
| Length | String | String | 1 | 用于确定长度的字符串。 | 
| Return | Integer | 字符串长度,指定为字符串中的字符数。 | ||
| Find | String | String | 1 | 在其中搜索所包含字符串的字符串。 | 
| Substring | String | 1 | 要搜索的子字符串。 | |
| Return | Integer | 字符串内该子字符串第一个实例的位置。如果找不到该子字符串,则返回 0。 | ||
| Substring | String | String | 1 | 从中提取子字符串的字符串。 | 
| Start | Integer | 1 | 字符串内的起始位置(从 1 开始)。 | |
| Length | Integer | 1 | 字符数。 | |
| Return | String | 从字符串中提取包含从 Start 位置到 Start+Length 位置之间字符的子字符串。 | ||
| Left | String | String | 1 | 从中提取最左侧的一些字符的字符串。 | 
| Length | Integer | 1 | 字符数。 | |
| Return | String | 字符串中包含从 1 位置到 Length 位置之间字符的子字符串。 | ||
| Right | String | String | 1 | 从中提取最右侧的一些字符的字符串。 | 
| Length | Integer | 1 | 字符数。 | |
| Return | String | 字符串中包含从 Length(String)-Length+1 位置到 Length(String) 位置之间字符的子字符串。 | ||
| Concat | String1 | String | 1 | 要连接的第一个字符串。 | 
| String2 | String | 1 | 要连接的第二个字符串。 | |
| Return | String | 连接至第一个字符串末尾的第二个字符串。 | ||
| Lower | String | String | 1 | 要转换为小写的字符串。 | 
| Return | String | 全部大写字符都转换为小写字符的字符串。 | ||
| Upper | String | String | 1 | 要转换为大写的字符串。 | 
| Return | String | 全部小写字符都转换为大写字符的字符串。 | ||
| LTrim | String | String | 1 | 从中剪裁前导空格的字符串。 | 
| Return | String | 删除了全部前导空格的字符串。 | ||
| RTrim | String | String | 1 | 从中剪裁尾随空格的字符串。 | 
| Return | String | 删除了尾随空格的字符串。 | ||
| Replace | String | String | 1 | 在其中将一个子字符串的全部实例替换为另一个子字符串的字符串。 | 
| Find | String | 1 | 要搜索的子字符串。 | |
| Replace | String | 1 | 替换 Find 字符串的子字符串。 | |
| Return | String | 用 Replace 字符串替换了 Find 字符串的全部实例的字符串。 | ||
| Date | Year | Integer | 1 | 日期的年份。 | 
| Month | Integer | 1 | 日期的月份 (1-12)。 | |
| Day | Integer | 1 | 日期 (1-31),必须是指定年份和月份的有效日期。 | |
| Return | DateTime | 给定年、月、日的 00:00:00 的日期时间值。 | ||
| DateTime | Year | Integer | 1 | 日期的年份。 | 
| Month | Integer | 1 | 日期的月份 (1-12)。 | |
| Day | Integer | 1 | 日期 (1-31),必须是指定年份和月份的有效日期。 | |
| Hour | Integer | 1 | 时间的“时”部分 (0-23)。 | |
| Minute | Integer | 1 | 时间的“分”部分 (0-59)。 | |
| Second | Decimal | 1 | 时间的“秒”部分 (0-60)。 | |
| Return | DateTime | 所指定年、月、日、小时、分钟和秒的日期时间。 | ||
| Year | DateTime | DateTime | 1 | 从中提取“年”的日期。 | 
| Return | Integer | 日期时间的年份。 | ||
| Quarter | DateTime | DateTime | 1 | 从中提取“季度”的日期。 | 
| Return | Integer | 日期时间的季度 (1-4)。 | ||
| Month | DateTime | DateTime | 1 | 从中提取“月”的日期。 | 
| Return | Integer | 日期时间的月份 (1-12)。 | ||
| Day | DateTime | DateTime | 1 | 从中提取“日”的日期。 | 
| Return | Integer | 日期时间的“日”部分 (1-31)。 | ||
| Hour | DateTime | DateTime | 1 | 从中提取“时”的日期。 | 
| Return | Integer | 日期时间的“时”部分 (0-23)。 | ||
| Minute | DateTime | DateTime | 1 | 从中提取“分”的日期。 | 
| Return | Integer | 日期时间的“分”部分 (0-59)。 | ||
| Second | DateTime | DateTime | 1 | 从中提取“秒”的日期。 | 
| Return | Integer | 日期时间的“秒”部分 (0-60)。 | ||
| DayofYear | DateTime | DateTime | 1 | 从中提取“一年中的第几天”的日期。 | 
| Return | Integer | 日期时间在一年中的第几天 (1-366)。 | ||
| Week | DateTime | DateTime | 1 | 从中提取“周”的日期。 | 
| Return | Integer | 日期时间在一年中的第几周 (1-53)。与语义模型区域性相关的默认的每周第一天将确定每周的第一天。 | ||
| DayofWeek | DateTime | DateTime | 1 | 从中提取“星期几”的日期。 | 
| Return | Integer | 日期时间为星期几 (1-7)。值从 Monday=1 开始到 Sunday=7。 | ||
| Date | DateTime | DateTime | 1 | 从中删除时间的日期。在报表生成器中,此 Date 函数在“函数”选项卡上列为 DATEONLY。 | 
| Return | Integer | 时间清零 (00:00:00) 的日期时间。 | ||
| Now | Return | DateTime | 当前日期/时间。Now 是一个静态函数。 | |
| Today | Return | DateTime | 时间清零 (00:00:00) 的当前日期/时间。Today 是一个静态函数。 | |
| DateDiff | Interval | String | 1 | 用于指定日期之差的单位。必须是以下单位之一:年、季度、月、天、小时、分钟、秒或星期。必须是文字值。 | 
| Start | DateTime | 1 | 起始日期时间。 | |
| End | DateTime | 1 | 结束日期时间。 | |
| Return | Integer | Start 日期时间和 End 日期时间之差,以 Interval 所指定的相同单位表示。如果起始日期时间在结束日期时间之后,结果将为负。 | ||
| DateAdd | Interval | String | 1 | 用于指定日期之和的单位。必须是以下单位之一:年、季度、月、天、小时、分钟、秒或星期。必须是文字值。 | 
| Number | Integer | 1 | 要加至日期时间的 Interval 的单位数。 | |
| DateTime | DateTime | 1 | 要加上 Interval 的日期时间。 | |
| Return | DateTime | 原始日期时间加上指定的 Interval 单位数所得的日期时间。 | 
聚合函数
通过使用聚合函数,您可以对一组值或单个值执行计算,再根据表达式返回单个值。
| 函数名称 | 参数 | 数据类型 | 基数 | 说明 | 
|---|---|---|---|---|
| Sum | Items | Numeric | N | 要求和的项。 | 
| Return | 1 | 项的值之和。返回值的数据类型和项的数据类型相同。 | ||
| Avg | Items | Numeric | N | 要求平均值的项。在报表生成器中,Avg 在“函数”选项卡上列为 AVERAGE。 | 
| Return | 1 | 项的非空值的平均值。如果项为 Decimal 或 Integer 类型,则数据类型为 Decimal;否则,为 Float 类型。 | ||
| Max | Items | DateTime、Integer、Decimal、Float 或 String | N | 要确定最大值的排序项。 | 
| Return | 1 | 项中的非空值的最大值。返回值的数据类型和项的数据类型相同。 | ||
| Min | Items | DateTime、Integer、Decimal、Float 或 String | N | 要确定最小值的排序项。 | 
| Return | 1 | 项中的非空值的最小值。返回值的数据类型和项的数据类型相同。 | ||
| Count | Items | 任意 | N | 要计数的项。 | 
| Return | Integer | 1 | 项的非空值计数。 | |
| CountDistinct | Items | 任意 | N | 要计数的项。项的数据类型不能为 EntityKey。 | 
| Return | Integer | 1 | 项的非重复非空值的计数。 | |
| StDev | Items | Numeric | N | 用于确定标准偏差的项。 | 
| Return | Float | 1 | 项的非空值的标准偏差。 | |
| StDevP | Items | Numeric | N | 用于确定总体标准偏差的项。 | 
| Return | Float | 1 | 项的非空值的总体标准偏差。 | |
| Var | Items | Numeric | N | 用于确定方差的项。 | 
| Return | Float | 1 | 项的非空值的方差。 | |
| VarP | Items | Numeric | N | 用于确定总体方差的项。 | 
| Return | Float | 1 | 项的非空值的总体方差。 | 
信息函数
通过使用信息函数,您可以获得用户的基本信息。
| 函数名称 | 参数 | 数据类型 | 基数 | 说明 | 
|---|---|---|---|---|
| GetUserID | Return | String | 1 | 用户的 ID。GetUserID 是一个静态函数。 | 
| GetUserCulture | Return | Language | 1 | 用户的语言或区域设置。GetUserCulture 是一个静态函数。 | 
其他函数
除了上述函数外,语义模型定义语言中还使用了以下函数:
| 函数名称 | 参数 | 数据类型 | 基数 | 说明 | 
|---|---|---|---|---|
| Filter | Filter Items | 任意 | N | 要筛选的值。若要筛选项,请使用“筛选器”对话框。 | 
| Filter Condition | Boolean | 1 | 指示是否包含相应的实例。 | |
| Return | N | 返回值的数据类型与 Filter Items 的类型相同。 | ||
| In | Item | Boolean、DateTime、Integer、Decimal、Float、String 或 EntityKey | 1 | 要检查集成员身份的项。 | 
| Set | N | 此参数必须是不带 Path 的 Literal 表达式。Item 和 Set 必须具有相同的数据类型。 | ||
| Return | Boolean | 1 | 指示项是否在该集中。 | |
| If | Condition | Boolean | 1 | 要测试的条件。 | 
| TrueCase | 任意 | 1 | 条件为 True 时返回的值。如果条件为 False,则不对 TrueCase 进行求值。不能为 EntityKey 数据类型。 | |
| FalseCase | 任意 | 1 | 条件为 False 时返回的值。FalseCase 与 TrueCase 必须具有相同的值类型。如果条件为 True,则不对 FalseCase 进行求值。 | |
| Return | 1 | 必须与 TrueCase 的类型相同。 | ||
| Switch | Condition1 | Boolean | 1 | 要测试的条件。Switch 可以有零个或多个附加 Condition/Value 对: | 
| Value1 | 任意 | 1 | Condition1 为 True 时返回的值。 | |
| Condition/N | Boolean | 1 | 要测试的条件。如果前面任何条件为 True,则不求值。 | |
| Value/N | Boolean | 1 | Condition/N 为 True 时返回的值。它必须与 Value1 具有相同的数据类型。如果未对 Condition/N 求值或 Condition/N 为 False,则不求值。 | |
| Return | Boolean | 1 | 与 Value1 的类型相同。如果所有条件均为 False,则返回 Null。 | |
| Evaluate | Expression | 任意 | N | 要计算的表达式。使用此函数可控制在其中对表达式进行求值的实体上下文。例如,下面的表达式对客户订购的每个非重复产品的价格求均值: Avg([customer->order->product]Price). 下面的表达式对客户的每个订单的价格求均值(从产品实体中获得): Avg([customer->order]Evaluate([order->product]Price)). 由于求值位置可以通过路径上的多个点控制聚合的非重复性,因此可以多次独立地使用的 Evaluate。下面是在一个模型中多次独立使用的 Evaluate 的示例,在该模型中每个产品均可由多个制造商生产: Average([customer->order]Evaluate([order->product]Evaluate([product->manufacturer->city]population))) | 
| Return | N | 类型与表达式相同。 | ||
| Aggregate | Expression | 任意 | N | 要求值的聚合表达式。使用此函数可控制在其中对聚合进行求值的实体上下文。例如,假设在 Order 实体中定义了一个 TotalSales 属性。表示订单上下文中总销售额的表达式很简单:TotalSales。计算客户上下文中总销售额的表达式应为: Aggregate([customer->order]TotalSales). 该表达式参数必须包含一个非定位表达式或者一个或多个嵌套的传递函数(必须采用任意数据类型),其中最内层的传递参数应具有非定位的 ExpressionNode。例如: Aggregate([customer->order]Filter([order->product]Sum(UnitPrice),=(Shipped, "True")). | 
| Return | 1 | 类型与表达式相同。 | 
请参阅
概念
模型设计器对象属性
模型设计器查询属性
模型设计器数据类型
使用函数(报表生成器)