Spatie Laravel Analytics中如何使用多个dimensionFilter?
在Spatie Laravel Analytics中使用多维度过滤器的正确方式
你当前代码的问题是在FilterExpression的构造数组里重复使用了filter键——PHP数组中重复的键会被后面的值覆盖,所以只有最后一个eventName的过滤器生效。
要实现多维度过滤,需要通过**逻辑组(AND/OR)**来组合多个过滤器,具体步骤如下:
- 分别创建每个维度的
Filter实例 - 使用
and_group(或or_group,根据业务需求选择逻辑关系)将多个过滤器包裹起来,传入FilterExpression
以下是修正后的完整代码:
$data = Analytics::get( period: Period::create($startDate, $endDate), metrics: ['eventCount'], dimensions: ['pagePath','eventName','day','month','linkText','linkClasses','linkUrl'], maxResults: 1000, dimensionFilter: new FilterExpression([ 'and_group' => [ 'expressions' => [ new FilterExpression([ 'filter' => new Filter([ 'field_name' => 'pagePath', 'string_filter' => new StringFilter([ 'match_type' => MatchType::EXACT, 'value' => '/example/abc', ]), ]), ]), new FilterExpression([ 'filter' => new Filter([ 'field_name' => 'eventName', 'string_filter' => new StringFilter([ 'match_type' => MatchType::EXACT, 'value' => 'click', ]), ]), ]), ], ], ]), keepEmptyRows:true );
补充说明
- 如果需要或逻辑(满足任一条件即可),只需将
and_group替换为or_group - 每个子过滤器都需要包裹在
FilterExpression实例中,再放入expressions数组内
内容的提问来源于stack exchange,提问作者Pecel Ponorogo
相关产品推荐
相关产品推荐

