维度表达式的语法

重要

阅读有关Data Workbench 生命周期终止公告.

维度表达式从不单独使用,但是可以在量度或过滤器表达式中调用维度的任何地方使用。

  1. 带下划线的字词应该在表达式文本中逐字输入。
  2. 表单 {TEXT}? 表示可选文本。
  3. 表单 {TEXT}* 表示可能出现零次或更多次的文本。
  4. 表单 {A | B | C |...} 表示只包含给定选项之一(如A或B或C…)的文本。.
  5. 表单 [A,B) 表示从A到(但不包括B)的数字范围。

标识符

标识符会引用一个已命名的维度。有关规范合法标识符的规则,请参阅 标识符的语法 .

示例:Sessions[ Session_Number = “1” ] 是会话数量为“1”的会话数。Session Number 是标识符引用的已命名维度。

(维度)

(Dimension) 的结果与 Dimension 的结果相同。括号指定表达式中的运算顺序。

示例:Sessions[ (Page) = “/home” ] 是访问“/home”页面的会话数。

Dim by Level

定义与维度 Dim 具有相同元素的维度,但是通过维度 level 与其他维度相关联。

具体而言,新维度的元素与 level 中和 Dim 的同一元素相同的元素相关联,并与任何其他维度中的元素(这些元素又与 level 中任何元素相关联)相关联。

示例:Sessions[ (Page by Visitor)=”/home” ] 是访问“/home”页面的访客所进行的会话数。

shift (Dim,Level,Group,N)

定义一个与维度 Dim 具有相同元素的维度。如果 Level 的 eth 和 e+Nth 元素与维度组的相同元素相关联,则维度 Level 的 eth 元素与新维度的元素(该元素又与通过 Level 中 e+Nth 元素相关联的 Dim 元素相同)相关联。

示例:Page_Views[ shift(Page, Page_View, Session, 1)=”/home” ] 是在同一会话中浏览的下一页为“/home”的页面查看次数。

next(Dim,Level,Group,N)

与 shift(Dim,Level,Group,N) 类似,但如果在维度中出现了空值,则会跳过它们。

segment(Level {,String->Filter}*)

定义一个根据过滤器列表分类 Level 元素的维度。新维度的元素是以参数形式给出的字符串。Level 的每个元素与过滤器允许 Level 元素的区段维度的第一个元素相关联。这与区段可视化类似。

示例:segment(Visitor, "One-Time Visitors" -> Visitor_Sessions = 1, "Very Loyal Visitors" -> Visitor_Sessions > 10, "Everyone Else" -> True) 创建一个将访客分为三个组的维度:一次性访客指只有一个会话的访客;非常忠诚的访客指具有十个以上会话的访客;其他访客指除前两种访客之外的所有访客。

bucket(Level, Metric, Count, Format {, Start {, Size}? }?)

定义其元素是数字范围(固定大小,如 [0-9], [10-19],...)的维度。Level 的元素与存储段维度(范围包括该级别元素的 Metric 值)的元素相关联。Format 是用于格式化 Metric 元素的 printf 格式字符串。

示例:如果Page_Duration_Minutes是表示每页逗留分钟数的页面查看级别维度,则bucket(Session, sum(Page_Duration_Minutes, Page_View), 100, "%0.0f minutes", 0, 5)是表示每个会话所花费的分钟数的会话级别维度;其元素间隔为5分钟 {[0-5), [5-10),...,[495-500)}.

Start 是第一个间隔的起始值(默认:0),Size 是间隔的大小(默认:1)。

prefix(Level {,ElementName->(Prefix{,Prefix}* )}* )

定义其元素是给定 ElementName 字符串且与对应 Prefix 字符串集相关联的维度。Level 元素与“前缀”维度的元素相关联,而它又与给定级别元素名称匹配的最长前缀相关联。必须完全匹配以特殊字符“$”结尾的前缀。

例如,prefix(URI, "产品" -> ("/products/"), "服务" -> ("/services/", "/products/service/"), "保修期" -> ("/products/warranty.html$", "/services/warranty.html$", "所有其他项" -> ("/"))) 创建一个将 URI 划分为以下四种类别的维度。在各页上的效果如下所示:

/products/warranty.html 转到“保修期”,因为它与 /products/warranty.html$ 前缀完全匹配。

/products/cars/specialcar.html 转到“产品”,因为它与 /products/ 前缀相匹配并且不再是前缀

/products/service/something.html 转到“服务”,因为它与 /products/service/ 前缀相匹配,比 /products/ 前缀长。

/companyinfo/aboutus.html 转到“所有其他项”类别,因为与其相匹配的唯一前缀是“/”。

latency(Level, Clip, Dim, Filter, MaxBefore, MaxAfter, FormatString)

请参阅 创建延迟维度 .

cartesian_product(Separator {,Dim}*)

定义其元素是所有给定维度元素组合(“笛卡尔积”)的维度。每个元素的名称是由对应输入维度元素的串联组成,并由给定的 Separator 字符串分隔。

例如,如果维度 D1 具有元素 {"a", "b"} 而维度 D2 具有元素 {"x", "y"},则 cartesian product("-", D1, D2) 具有元素 {"a-x", "a-y", "b-x", "b-y"}。

注意,在内部处理每个输入维度时,假设其元素的数量是二的更高次幂。这将导致具有一些虚拟元素的笛卡尔积。使用Data WorkbenchAPI时,根据输出格式,可能会忽略这些元素,或者将它们显示为“#nnn”,其中nnn是元素的序号(客户端应该忽略它)。

例如,在上面的示例中,如果 D2 具有三个元素 {"x", "y", "z"},则在处理它时,将假设它具有四个元素,因而笛卡尔积具有元素 {"a-x", "a-y", "a-z", "#3", "b-x", "b-y", "b-z", "#7"}。

如果未给定维度,则结果是具有一个元素“#0”的维度,等同于无维度。

nearest_countable(Dim)

指已经存在的维度:架构中 Dim 的最接近可计数原型。例如,nearest countable(URI) 与 Page_View 相同。

normalized(Dim,Count)

定义一个基于非正规维度 Dim 的规范化维度,其元素数最多为 Count 个。

last_n(Dim, TimeMetric, FormatString, Count, Offset, TrimToData {, WeekStart}?)

定义一个具有维度 Dim 元素子集的维度,其元素代表时间段,例如天、星期或年。

子集是一个约为特定时间(常量量度 TimeMetric 的值)的范围,将其解释为自 1970 年 1 月 1 日 UTC 午夜开始的时间值(以秒为单位)。范围具有 Count 个元素,其中最后一个是 Dim 给定元素后的 Offset 元素,其名称是使用给定 FormatString 字符串格式化量度值的结果。FormatString 使用相同的 % 转义作为标准 C 库函数 strftime。

如果 trimToData 为 true,则会删除结果维度开始部分的任何元素,即 Dim 开始前的元素。当它为 false 时,则始终都有 Count 指定的确切元素数。请注意,结果维度的结束部分可能始终会有一些 Dim 中并不实际存在的元素。

WeekStart 为可选参数,如果指定,则必须是 { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" } 中的一项。它将修改 TimeMetric,方法是将其向后移动到与该工作日最接近的日期。

示例:如果 Week 具有元素 { "10/03/10", "10/10/10", ..., "12/12/10" } 并且内置 As Of 量度具有值 1292348109(代表 2010 年 12 月 14 日中午的某个时间),则 last n(Week, As_Of, "%m/%d/%y", 4, 0, false, "Sun") 定义具有元素 { "12/12/10", "12/19/10", "12/23/10", "12/30/10" } 的维度。

示例 2:如果 Week 维度仅有元素 {"12/19/10", "12/26/10", ..., "01/30/11"},并且 As Of 量度具有与上例相同的值,则 last n(Week, As_Of, "%m/%d/%y", 4, 0, true, "Sun") 给出一个具有元素 {"12/19/10", "12/23/10", "12/30/10"} 的维度。

days_of_previous_months(Dim, TimeMetric, FormatString, nMonths, includeThisMonth, TrimToData)

定义具有 Dim 元素子集的维度,其元素代表天。子集是一个约为特定时间(常量量度 TimeMetric 的值)的范围,将其解释为自 1970 年 1 月 1 日 UTC 午夜开始的时间值(以秒为单位)。范围包括的元素对应于指定时间前 nMonths 个月中的每一天。如果 includeThisMonth 为 true,则该范围还包括该月中包含指定时间的每一天。

FormatString 指定 Dim 元素的格式,将“%”转义用作标准 C 库函数 strftime。

如果 trimToData 为 true,则会删除结果维度开始部分的任何元素,即 Dim 开始前的元素。当它为 false 时,则始终都有 Count 指定的确切元素数。请注意,结果维度的结束部分可能始终会有一些 Dim 中并不实际存在的元素。

示例:如果 Day 具有元素 { "01/01/10", "01/02/10", ..., "12/31/10" } 并且内置 As Of 量度具有值 1292348109(代表 2010 年 12 月 14 日中午的某个时间),则 days of previous months(Day, As_Of, "%m/%d/%y", 2, false, false) 将会具有元素 { "10/01/10", "10/02/10", ..., "11/30/10" }。

days_of_current_month(Dim, TimeMetric, FormatString, allMonth, trimToData)

与 days of previous months 类似,但元素仅对应与 TimeMetric 指定时间相同月份的日期。如果 allMonth 为 true,则相应月份的每一天对应一个元素;否则,维度将仅包括从相应月份的第一天到包含指定时间的当天的天数。

days_of_future_months(Dim, TimeMetric, FormatString, nMonths, includeThisMonth, TrimToData)

与 days of previous months 类似,但元素对应于包含 TimeMetric 指定时间的月份之后(而非之前)数月的天数。

hours_of_day(Dim, Metric, TimeFormatString, nDaysForward, TrimData)

定义具有 Dim 元素子集的维度,其元素代表小时。子集是一个约为特定时间(常量量度 TimeMetric 的值)的范围,将其解释为自 1970 年 1 月 1 日 UTC 午夜开始的时间值(以秒为单位)。范围包括的元素对应于 nDaysForward 日期的每个小时,该日期在包含 TimeMetric 指定时间的日期之后。

FormatString 指定 Dim 元素的格式,将“%”转义用作标准 C 库函数 strftime。格式化字符串应始终输出表示传入时间当天开始午夜的字符串。

如果 trimToData 为 true,则会删除结果维度开始部分的任何元素,即 Dim 开始前的元素。当它为 false 时,则始终都有 Count 指定的确切元素数。请注意,结果维度的结束部分可能始终会有一些 Dim 中并不实际存在的元素。

示例:如果 Hour 具有元素 { "01/01/10 00:00", "01/01/10 01:00", ..., "12/31/10 23:00" },并且内置 As Of 量度具有值 1292348109(代表 2010 年 12 月 14 日中午的某个时间),则 hours of day(Hour, As_Of, "%x 00:00", 0, false) 具有元素 { "12/12/10 00:00", "12/12/10 01:00", ..., "12/12/10 23:00" }。

在此页面上