public SampleFamily processRelation(String detectPointKey, List<String> serviceKeys, List<String> instanceKeys, String sourceProcessIdKey, String destProcessIdKey, String componentKey) {
        Preconditions.checkArgument(serviceKeys.size() > 0);
        Preconditions.checkArgument(instanceKeys.size() > 0);
        Preconditions.checkArgument(StringUtil.isNotEmpty(sourceProcessIdKey));
        Preconditions.checkArgument(StringUtil.isNotEmpty(destProcessIdKey));
        ExpressionParsingContext.get().ifPresent(ctx -> {
            ctx.scopeType = ScopeType.PROCESS_RELATION;
            ctx.scopeLabels.addAll(serviceKeys);
            ctx.scopeLabels.addAll(instanceKeys);
            ctx.scopeLabels.add(detectPointKey);
            ctx.scopeLabels.add(sourceProcessIdKey);
            ctx.scopeLabels.add(destProcessIdKey);
            ctx.scopeLabels.add(componentKey);
        });
        if (this == EMPTY) {
            return EMPTY;
        }
        return createMeterSamples(new ProcessRelationEntityDescription(serviceKeys, instanceKeys, sourceProcessIdKey, destProcessIdKey, detectPointKey, componentKey, Const.POINT));
    }
Following operations are used in DSL
oap-server/analyzer/meter-analyzer/src/main/java/org/apache/skywalking/oap/meter/analyzer/dsl/SampleFamily.java