Show Menu
主题×

维度表达式的语法

维度表达式从不单独使用,但是可以在量度或过滤器表达式中调用维度的任何地方使用。
  1. 带下划线的字词应该在表达式文本中逐字输入。
  2. The form {TEXT}? represents optional text.
  3. The form {TEXT}* represents text that may occur zero or more times.
  4. The form {A | B | C |...} represents text that consists of exactly one of the given options, such as A or B or C....
  5. The form [A,B) represents a range of numbers, from A up to but not including 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 格式字符串。
Example: If Page_Duration_Minutes is a Page View-level dimension representing the number of minutes spent on each page, then bucket(Session, sum(Page_Duration_Minutes, Page_View), 100, "%0.0f minutes", 0, 5) is a Session-level dimension representing the number of minutes spent in each Session; its elements are 5 minute intervals {[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" }。