**Describe the unexpected behaviour**
It's not possible to calculate min and max values for range dictionary via EXPRESSION

**How to reproduce**
ClickHouse version 21.11

```
CREATE TABLE test_range_dict
(
    `id` UInt32,
    `date` Date,
    `start` Date,
    `end` Date
)
ENGINE = Memory

CREATE DICTIONARY IF NOT EXISTS test_range_dict_d
(
    `id` UInt64,
    `date` Date,
    `start` Date,
    `end` Date,
    `start_date` Date EXPRESSION date - toIntervalDay(1),
    `end_date` Date EXPRESSION any(date) OVER (PARTITION BY id ORDER BY date ASC Rows BETWEEN 1 PRECEDING AND 1 PRECEDING)
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(TABLE 'test_range_dict'))
LIFETIME(MIN 0 MAX 120)
LAYOUT(RANGE_HASHED())
RANGE(MIN start MAX end)

Ok.

0 rows in set. Elapsed: 0.006 sec.


SELECT *
FROM test_range_dict_d

Ok.

0 rows in set. Elapsed: 0.011 sec.


DROP DICTIONARY  test_range_dict_d;

CREATE DICTIONARY IF NOT EXISTS test_range_dict_d
(
    `id` UInt64,
    `date` Date,
    `start` Date,
    `end` Date,
    `start_date` Date EXPRESSION date - toIntervalDay(1),
    `end_date` Date EXPRESSION any(date) OVER (PARTITION BY id ORDER BY date ASC Rows BETWEEN 1 PRECEDING AND 1 PRECEDING)
)
PRIMARY KEY id
SOURCE(CLICKHOUSE(TABLE 'test_range_dict'))
LIFETIME(MIN 0 MAX 120)
LAYOUT(RANGE_HASHED())
RANGE(MIN start_date MAX end_date)


Ok.

0 rows in set. Elapsed: 0.008 sec.


SELECT *
FROM test_range_dict_d


0 rows in set. Elapsed: 0.002 sec.

Received exception from server (version 21.11.1):
Code: 47. DB::Exception: Received from localhost:9000. DB::Exception: Missing columns: 'end_date' 'start_date' while processing query: 'SELECT id, start_date, end_date, date, start, end FROM default.test_range_dict', required columns: 'start_date' 'id' 'end' 'end_date' 'start' 'date', maybe you meant: ['id','end','start','date']. (UNKNOWN_IDENTIFIER)
```

**Expected behavior**
Dictionary works

const ASTDictionaryAttributeDeclaration * dict_attr)
{
    if (dict_attr->expression != nullptr)
    {
        AutoPtr<Element> expression_element(doc->createElement("expression"));
        
        String expression_str;
        if (const auto * literal = dict_attr->expression->as<ASTLiteral>();
                literal && literal->value.getType() == Field::Types::String)
        {
            expression_str = getFieldAsString(literal->value);
        }
        else
            expression_str = queryToString(dict_attr->expression);
        AutoPtr<Text> expression(doc->createTextNode(expression_str));
        expression_element->appendChild(expression);
        root->appendChild(expression_element);
    }
}
/** Transofrms single dictionary attribute to configuration
  *  third_column UInt8 DEFAULT 2 EXPRESSION rand() % 100 * 77
  * to
  *  <attribute>
  *      <name>third_column</name>
  *      <type>UInt8</type>
  *      <null_value>2</null_value>
  *      <expression>(rand() % 100) * 77</expression>
  *  </attribute>
  */
void buildSingleAttribute(