class AggDevicePropertyDimension implements MeasurementDimension {

        @Override
        public DimensionDefinition getDefinition() {
            return CommonDimensionDefinition.agg;
        }

        @Override
        public DataType getValueType() {
            return new ObjectType()
                .addProperty("value", "数据", new ObjectType()
                    .addProperty("property", StringType.GLOBAL)
                    .addProperty("value", metadata.getValueType())
                    .addProperty("formatValue", StringType.GLOBAL))
                .addProperty("timeString", "时间", StringType.GLOBAL);
        }

        @Override
        public ConfigMetadata getParams() {
            return aggConfigMetadata;
        }

        @Override
        public boolean isRealTime() {
            return false;
        }

        @Override
        public Flux<SimpleMeasurementValue> getValue(MeasurementParameter parameter) {<FILL_FUNCTION_BODY>}
    }


            String deviceId = parameter.getString("deviceId", null);
            DeviceDataService.AggregationRequest request = new DeviceDataService.AggregationRequest();
            DeviceDataService.DevicePropertyAggregation aggregation = new DeviceDataService.DevicePropertyAggregation(
                metadata.getId(), metadata.getId(), parameter.getString("agg").map(String::toUpperCase).map(Aggregation::valueOf).orElse(Aggregation.AVG)
            );
            String format = parameter.getString("format", "HH:mm:ss");
            DateTimeFormatter formatter = DateTimeFormat.forPattern(format);

            request.setLimit(parameter.getInt("limit", 10));
            request.setInterval(parameter.getInterval("time", Interval.ofSeconds(10)));
            request.setFormat(format);
            request.setFrom(parameter.getDate("from", DateTime.now().plusDays(-1).toDate()));
            request.setTo(parameter.getDate("to", DateTime.now().plusDays(-1).toDate()));
            Flux<AggregationData> dataFlux;

            if (StringUtils.hasText(deviceId)) {
                dataFlux = deviceDataService
                    .aggregationPropertiesByDevice(deviceId, request, aggregation);
            } else {
                dataFlux = deviceDataService.aggregationPropertiesByProduct(productId, request, aggregation);
            }
            return dataFlux
                .map(data -> {
                    long ts = data.getString("time")
                        .map(time -> DateTime.parse(time, formatter).getMillis())
                        .orElse(System.currentTimeMillis());
                    return SimpleMeasurementValue.of(createValue(
                        data.get(metadata.getId()).orElse(0)),
                        data.getString("time",""),
                        ts);
                })
                .sort();
        
<methods>public void <init>(org.jetlinks.community.dashboard.MeasurementDefinition) ,public org.jetlinks.community.dashboard.supports.StaticMeasurement addDimension(org.jetlinks.community.dashboard.MeasurementDimension) ,public Mono<org.jetlinks.community.dashboard.MeasurementDimension> getDimension(java.lang.String) ,public Flux<org.jetlinks.community.dashboard.MeasurementDimension> getDimensions() <variables>private org.jetlinks.community.dashboard.MeasurementDefinition definition,private Map<java.lang.String,org.jetlinks.community.dashboard.MeasurementDimension> dimensions