详细程度表达式允许您指定与可视化的详细程度不同的聚合计算粒度。 本页介绍如何在 AI/BI 仪表板中使用详细表达式级别。
什么是详细表达式级别?
通过细节表达式级别,您可以准确指定计算聚合时应使用的维度,这样可以无视当前可视化中包含的维度。 这样就可以对计算范围进行精细控制。 详细信息表达式级别可以是维度或度量值。
详细信息表达式有两种类型的级别:
- 固定的详细信息级别:聚合表达式本身中指定的预定义维度集,忽略可视化效果中的所有其他维度。
- 较粗粒度的详细信息级别:通过在分组集中排除特定维度,实现比可视化效果更粗粒度的聚合。
细节级别表达式是使用窗口函数在特定使用模式的数据集计算中创建的。
何时使用明细程度表达式
当您需要使用细节级别表达式时,请:
- 计算总销售额的百分比(例如,每个类别的总销售额份额)。
- 将单个值与数据集范围的聚合进行比较(例如,销售额与平均销售额)。
- 创建在不同分组中保持不变的队列或段级指标。
- 在单个计算中执行多级聚合。
在固定的细节级别定义表达式
固定级别的详细信息表达式按定义的粒度计算聚合,忽略可视化效果中的维度。 固定的详细表达式级别是维度,并且是使用带子句的标量窗口函数 PARTITION BY 实现的。
Syntax
<AGGREGATE_FUNCTION>(<column>) OVER (PARTITION BY <dimension1>, <dimension2>, ...)
若要聚合整个数据集,请忽略 PARTITION BY 条件,并在 OVER 后留空括号。
何时使用固定级别的详细信息
如果需要,请使用固定级别的详细信息表达式:
- 不依赖可视化分组: 对于所有用途均具有静态分区的指标。
- 数据集级汇总: 全局汇总与其他行级别或分组进行比较(例如,按区域划分的总销售额百分比)。
- 多层次结构: 同一视图中的详细级别和汇总级别指标。
示例:区域销售总额
假设你有一个销售数据集,并想要显示每个产品的销售额及其区域的总销售额。 下面是示例数据:
| Region | 产品 | Sales |
|---|---|---|
| 西 | 笔记本电脑 | 五千 |
| 西 | 鼠标 | 500 |
| 东 | 笔记本电脑 | 六千 |
| 东 | 显示器 | 3000 |
若要按区域计算总销售额,请使用:
SUM(Sales) OVER (PARTITION BY Region)
结果:
| Region | 产品 | Sales | 区域总计 |
|---|---|---|---|
| 西 | 笔记本电脑 | 五千 | 5500 |
| 西 | 鼠标 | 500 | 5500 |
| 东 | 笔记本电脑 | 六千 | 九千 |
| 东 | 显示器 | 3000 | 九千 |
每行显示各个产品销售额及其区域的固定总计。 无论按产品筛选或分组的方式,区域总数都保持不变。
示例:总计百分比
固定级别的详细信息表达式可以组合成更复杂的表达式,包括执行“总计百分比”计算的计算度量。 为此,可以在度量值表达式中引用固定详细级别表达式,使可视化分组动态化。
例如,我们可以首先定义 total_sales 为一个固定粒度的表达式,该表达式作为一项独立的计算在整个数据集中运行。
SUM(sales) OVER ()
然后,我们可以在计算度量值定义中引用固定级别的详细信息表达式:
SUM(Sales) / ANY_VALUE(total_sales)
上述表达式可用作按任何维度(如 Product)分组的可视化效果中的度量值,以显示每个不同产品的总销售额百分比。
注释
需要将固定级别的详细信息表达式包装在聚合函数中,才能用于度量值计算。 如果固定级别的详细信息表达式的结果应为常量,并在组的行内重复,则可以使用类似 ANY_VALUE 函数从聚合结果中返回单个值,如上面的示例所示。
对固定级别的详细信息表达式进行筛选
由于在应用可视化效果分组和筛选器之前计算了固定级别的详细信息表达式,因此,如果希望它们受仪表板上的动态筛选器的影响,则必须定义此类筛选器(如影响基础 SQL 数据集文本的参数)。 有关仪表板参数的更多详细信息,请参阅 “使用仪表板参数 ”。
在更粗糙的详细信息级别定义表达式
细节级别较粗的表达式通过从可视化效果分组集中排除一个或多个维度,以比可视化粒度更粗糙的粒度计算聚合。 此类表达式作为度量,通过使用包含PARTITION BY的*子句的聚合窗口函数来实现。PARTITION BY用于表示所有从周围查询继承的分区。
Syntax
<AGGREGATE_EXPRESSION> AGGREGATE OVER (
PARTITION BY * EXCEPT (<field> [, ...])
)
在此语法中:
-
PARTITION BY *表示从可视化分组继承的所有分区 -
EXCEPT (<field> [, ...])指定要从这些分区中排除的维度
有关详细信息,请参阅 “聚合”窗口函数。
示例:
排除单个维度:
SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Region))
排除多个维度:
SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Region, Product))
将排除项与部分聚合组合在一起:
SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Customer) ORDER BY Date TRAILING 7 DAY)
何时使用更粗糙的详细信息级别
如果需要,请使用更粗细的详细信息表达式级别:
- 动态分组: 计算适应可视化分组的百分比或聚合(例如,任何所选维度的总计百分比)
- 筛选器感知聚合: 在遵循仪表板筛选器的同时,以较粗的粒度进行计算
示例:总计百分比
更粗细表达式级别的最常见用例是计算总值的百分比。 若要按以下方式 Region计算总销售额的百分比,但在动态分区中:
SUM(Sales) / (SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Region)))
此表达式:
- 计算可视化效果分区内的总销售额,例如
Region和Product。 - 计算在可视化分区内的总销售额,排除
Region后(汇总所有Product的值)。 - 将两者相除以获得一个百分比,表示每个
Region在每个Product中对总销售额的贡献百分比。
若要排除多个维度,请:
SUM(Sales) / (SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Region, Product)))
这会在分类汇总 Region 和 Product 配对的基础上计算总销售额的百分比。
示例
产品销售频率
计算每个产品的销售额非常简单,但计算特定销售范围内产品的总计数需要不同的方法。 例如,请考虑如何创建一个直方图,该直方图显示按销售量区间分组的产品计数。
自定义计算:
-
sale_count被定义为固定细节级别的表达式:COUNT(*) OVER (PARTITION BY Product)
使用方法:创建一个在 x 轴上按 sale_count 分组的条形图,并在 y 轴上选择 COUNT(*)。
与队列平均值进行比较
交易规模如何与其同一区域中的平均交易大小进行比较?
自定义计算:
-
average_deal_amount_by_region被定义为固定细节级别的表达式:AVG(deal_amount) OVER (PARTITION BY Region) - 将
percentage_of_region_average定义为deal_amount - average_deal_amount_by_region
上述两个表达式也可以合并为单个计算。
用法:定义一个表格,然后选择 percentage_of_region_average 以及任何其他可视化所需的维度
局限性
标量窗口函数中的 DISTINCT
不能直接在标量窗口函数中使用 DISTINCT 。 例如,这不起作用:
COUNT(DISTINCT customer_id) OVER (PARTITION BY region)
ARRAY_SIZE请改用 :COLLECT_SET
ARRAY_SIZE(COLLECT_SET(customer_id) OVER (PARTITION BY region))
聚合的标量窗口函数
在创作度量值表达式时,无法直接聚合标量窗口函数(用于固定的详细级别)。
模式 1:将窗口函数定义为单独的维度计算,并在度量值表达式中引用它,如上面的 总示例的百分比 所示。
另一种模式: 对于可分解聚合SUM,可以使用嵌套聚合,首先在每个组中计算内部(非窗口)聚合,然后在第二次遍历中对组结果进行聚合。
SUM(quantity) / SUM(SUM(quantity)) OVER ()
此模式适用于类似SUM、MINMAX和COUNT,但不适用于类似MEDIAN或PERCENTILE不可分解的函数。 请仔细记下括号定义的作顺序;类似 SUM(SUM(quantity) OVER ())表达式(虽然类似)不会被识别为有效,应使用本节中的第一个模式来表示。