public function load($datasetName, RecordMetaData $recordMetaData, IndexedRecordsHolder $recordsHolder) {
        // preparing columns for which we can lookup values
        $lookupableColumns = $this->selectLookupableColumns($recordMetaData);
        if (!isset($lookupableColumns)) {
            return;
        }

        // preparing required values for each lookup
        $columnsLookupValues = $this->prepareLookupValues($recordsHolder, $lookupableColumns);
        if (!isset($columnsLookupValues)) {
            return;
        }

        // loading identifier for each values
        foreach ($columnsLookupValues as $columnIndex => &$columnLookupValues) {
            $column = $lookupableColumns[$columnIndex];

            $dimensionLookupHandler = DimensionLookupFactory::getInstance()->getHandler($column->type->getLogicalApplicationType());
            $dimensionLookupHandler->prepareDatasetColumnLookupIds($datasetName, $column, $columnLookupValues);

            // checking if we loaded all values
            $this->checkMissingIdentifiers($column, $columnLookupValues);
        }
        unset($columnLookupValues);

        // replacing column values with corresponding ids
        foreach ($recordsHolder->records as $record) {
            foreach ($lookupableColumns as $columnIndex => $column) {
                $columnValue = $record->columnValues[$columnIndex];
                if (!isset($columnValue)) {
                    continue;
                }

                $lookupKey = AbstractDimensionLookupHandler::prepareLookupKey($columnValue);
                $record->columnValues[$columnIndex] = $columnsLookupValues[$columnIndex][$lookupKey]->identifier;
            }
        }
    }
    public function __construct($datatype) {
        parent::__construct($datatype);

        list($this->datasetName, $this->columnName) = ReferencePathHelper::splitReference($datatype);
    }