### Elasticsearch Version

8.7.0

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

all

### Problem Description

Downsampling of a time series index without any metric field fails with a validation error:

```
Index <index> does not contain any metric fields;
```

Metric fields are not required in a time series index, unlike dimension fields. For this reason failing downsampling is not consistent with the idea of allowing time series indices without metrics.

### Steps to Reproduce

Create a time series index with at least one dimension field, without any metric field and run a downsample operation (through ILM or through the API endpoint directly).

### Logs (if relevant)

_No response_
x-pack/plugin/rollup/src/test/java/org/elasticsearch/xpack/downsample/DownsampleActionSingleNodeTests.java
final MapperService mapperService = indicesService.createIndexMapperServiceForValidation(indexMetadata);
        final CompressedXContent sourceIndexCompressedXContent = new CompressedXContent(sourceIndexMappings);
        mapperService.merge(MapperService.SINGLE_MAPPING_NAME, sourceIndexCompressedXContent, MapperService.MergeReason.INDEX_TEMPLATE);
        TimeseriesFieldTypeHelper helper = new TimeseriesFieldTypeHelper.Builder(mapperService).build(config.getTimestampField());
        Map<String, TimeSeriesParams.MetricType> metricFields = new HashMap<>();
        Map<String, String> labelFields = new HashMap<>();
        MappingVisitor.visitMapping(sourceIndexMappings, (field, fieldMapping) -> {
            if (helper.isTimeSeriesMetric(field, fieldMapping)) {
                metricFields.put(field, TimeSeriesParams.MetricType.fromString(fieldMapping.get(TIME_SERIES_METRIC_PARAM).toString()));
            } else if (helper.isTimeSeriesLabel(field, fieldMapping)) {
                labelFields.put(field, fieldMapping.get("type").toString());
            }
        });
        assertRollupIndexAggregations(sourceIndex, rollupIndex, config, metricFields, labelFields);
        GetIndexResponse indexSettingsResp = client().admin().indices().prepareGetIndex().addIndices(sourceIndex, rollupIndex).get();
        assertRollupIndexSettings(sourceIndex, rollupIndex, indexSettingsResp);
        Map<String, Map<String, Object>> mappings = (Map<String, Map<String, Object>>) indexSettingsResp.getMappings()
            .get(rollupIndex)
            .getSourceAsMap()
            .get("properties");
        assertFieldMappings(config, metricFields, mappings);
        GetMappingsResponse indexMappings = client().admin()
            .indices()
            .getMappings(new GetMappingsRequest().indices(rollupIndex, sourceIndex))
            .actionGet();
        Map<String, String> rollupIndexProperties = (Map<String, String>) indexMappings.mappings()
            .get(rollupIndex)
            .sourceAsMap()
            .get("properties");
        Map<String, String> sourceIndexCloneProperties = (Map<String, String>) indexMappings.mappings()