|
@ -158,12 +158,28 @@ public class ViewService extends BaseJpaService<View, ViewDao> {
|
|
//region 聚合组装
|
|
//region 聚合组装
|
|
if (groupTopRowDimensionList.size() == 0) {
|
|
if (groupTopRowDimensionList.size() == 0) {
|
|
if (!"1".equals(view.getDisplayType())) {
|
|
if (!"1".equals(view.getDisplayType())) {
|
|
// 视图展示类型非数值场合
|
|
|
|
|
|
// 视图展示为非数值类型场合
|
|
throw new ApiException("请为视图至少配置一个行维度。");
|
|
throw new ApiException("请为视图至少配置一个行维度。");
|
|
} else if (viewQuotaList == null || viewQuotaList.size() == 0) {
|
|
} else if (viewQuotaList == null || viewQuotaList.size() == 0) {
|
|
throw new ApiException("请为视图至少配置一个指标。");
|
|
throw new ApiException("请为视图至少配置一个指标。");
|
|
} else {
|
|
} else {
|
|
// 视图为数值展示类型的场合,没有行/列维度,直接对指标聚合。
|
|
|
|
|
|
// 视图展示为数值类型的场合
|
|
|
|
// 如果有多个多维数据集时,添加指标的过滤条件,指定其数据来自哪个多维数据集。
|
|
|
|
for (ViewQuota quota : viewQuotaList) {
|
|
|
|
ViewQuotaFilter indexFilter = new ViewQuotaFilter();
|
|
|
|
indexFilter.setDimensionCode("_index");
|
|
|
|
indexFilter.setCompareType("and");
|
|
|
|
indexFilter.setCompareType("belong");
|
|
|
|
indexFilter.setFilterValue(quota.getEsIndex());
|
|
|
|
quota.getQuotaFilterList().add(indexFilter);
|
|
|
|
ViewQuotaFilter typeFilter = new ViewQuotaFilter();
|
|
|
|
typeFilter.setDimensionCode("_type");
|
|
|
|
typeFilter.setCompareType("and");
|
|
|
|
typeFilter.setCompareType("belong");
|
|
|
|
typeFilter.setFilterValue(quota.getEsType());
|
|
|
|
quota.getQuotaFilterList().add(typeFilter);
|
|
|
|
}
|
|
|
|
// 因为该场合没有行/列维度,直接对指标聚合。
|
|
List<AbstractAggregationBuilder> quotaAggList = this.gatherQuotaMetricsAgg(viewQuotaList, null);
|
|
List<AbstractAggregationBuilder> quotaAggList = this.gatherQuotaMetricsAgg(viewQuotaList, null);
|
|
for (AbstractAggregationBuilder quotaAgg : quotaAggList) {
|
|
for (AbstractAggregationBuilder quotaAgg : quotaAggList) {
|
|
searchRequestBuilder.addAggregation(quotaAgg);
|
|
searchRequestBuilder.addAggregation(quotaAgg);
|
|
@ -175,13 +191,15 @@ public class ViewService extends BaseJpaService<View, ViewDao> {
|
|
// 有多个多维度数据集时,设定顶层行维度聚合的数据来自哪个多维数据集。
|
|
// 有多个多维度数据集时,设定顶层行维度聚合的数据来自哪个多维数据集。
|
|
FilterAggregationBuilder topFilterAgg = null;
|
|
FilterAggregationBuilder topFilterAgg = null;
|
|
if (indexCount > 1) {
|
|
if (indexCount > 1) {
|
|
String aggName = topRowDimension.getDimensionCode() + "-index-filter";
|
|
|
|
QueryBuilder queryBuilder = QueryBuilders.termQuery("_index", topRowDimension.getEsIndex());
|
|
|
|
topFilterAgg = AggregationBuilders.filter(aggName).filter(queryBuilder);
|
|
|
|
|
|
String aggName = topRowDimension.getDimensionCode() + "-filter";
|
|
|
|
QueryBuilder indexQueryBuilder = QueryBuilders.termQuery("_index", topRowDimension.getEsIndex());
|
|
|
|
QueryBuilder typeQueryBuilder = QueryBuilders.termQuery("_type", topRowDimension.getEsType());
|
|
|
|
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
|
|
|
|
boolQueryBuilder.must(indexQueryBuilder);
|
|
|
|
boolQueryBuilder.must(typeQueryBuilder);
|
|
|
|
topFilterAgg = AggregationBuilders.filter(aggName).filter(boolQueryBuilder);
|
|
}
|
|
}
|
|
|
|
|
|
// TODO 当顶层行维度是合计维度时,合计维度与列维度组合的聚合都在聚合节点顶层。
|
|
|
|
|
|
|
|
// 顶层行维度聚合
|
|
// 顶层行维度聚合
|
|
AggregationBuilder topAgg = this.joinDimensionAgg(topRowDimension);
|
|
AggregationBuilder topAgg = this.joinDimensionAgg(topRowDimension);
|
|
|
|
|
|
@ -338,7 +356,7 @@ public class ViewService extends BaseJpaService<View, ViewDao> {
|
|
}
|
|
}
|
|
|
|
|
|
// 设置分组个数
|
|
// 设置分组个数
|
|
if (memberCount!= null && memberCount > 0) {
|
|
|
|
|
|
if (memberCount != null && memberCount > 0) {
|
|
((TermsBuilder) dimensionAgg).size(memberCount);
|
|
((TermsBuilder) dimensionAgg).size(memberCount);
|
|
} else {
|
|
} else {
|
|
// TODO 需动态获取全部的分组个数进行设置
|
|
// TODO 需动态获取全部的分组个数进行设置
|
|
@ -423,9 +441,6 @@ public class ViewService extends BaseJpaService<View, ViewDao> {
|
|
if (viewDimension == null) {
|
|
if (viewDimension == null) {
|
|
// 视图展示为数值类型的场合
|
|
// 视图展示为数值类型的场合
|
|
aggNamePre += quota.getCode() + "-";
|
|
aggNamePre += quota.getCode() + "-";
|
|
} else if (ViewConstant.TOTAL_DIMENSION_CODE.equals(viewDimension.getDimensionCode())) {
|
|
|
|
// 合计维度场合
|
|
|
|
aggNamePre = ViewConstant.TOTAL_DIMENSION_CODE + "-";
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if ("sum".equals(quota.getBasicFormulaType())) {
|
|
if ("sum".equals(quota.getBasicFormulaType())) {
|