protected function generateAttributes(__CubeUIMetaDataGenerator_CallContext $callcontext, DatasetUIMetaData $datasetUIMetaData, CubeMetaData $cube, $referencePath) { $metamodel = data_controller_get_metamodel(); $dimensions = $cube->getDimensions(); if (!isset($dimensions)) { return; } $datasetStack = array($cube->factsDatasetName => TRUE); $keyColumn = $cube->factsDataset->findKeyColumn(FALSE); // preparing root element for 'distinct count' measures $distinctCountRootUIMetaData = new RootElementUIMetaData(); $distinctCountRootUIMetaData->name = self::prepareReferencedElementName( $referencePath, $cube->factsDatasetName, StarSchemaNamingConvention::$MEASURE_NAME_SUFFIX__DISTINCT_COUNT); $distinctCountRootUIMetaData->publicName = t('Distinct Count'); $distinctCountRootUIMetaData->description = t('List of columns for which count of distinct values could be calculated'); $distinctCountRootUIMetaData->isSelectable = FALSE; foreach ($dimensions as $dimension) { $attributeColumn = $cube->factsDataset->getColumn($dimension->attributeColumnName); $dimensionUIMetaData = new AttributeUIMetaData(); $dimensionUIMetaData->name = self::prepareAttributeUIMetaDataName($referencePath, $cube->factsDatasetName, $dimension->name, NULL); $dimensionUIMetaData->publicName = $dimension->publicName; $dimensionUIMetaData->description = $dimension->description; $dimensionUIMetaData->columnIndex = $attributeColumn->columnIndex; $dimensionUIMetaData->type = clone $attributeColumn->type; $dimensionUIMetaData->datasetName = $cube->factsDatasetName; // fixing public name (borrowing public name from corresponding facts column) if (($dimension->name == $dimensionUIMetaData->publicName) && ($attributeColumn->name != $attributeColumn->publicName)) { $dimensionUIMetaData->publicName = $attributeColumn->publicName; } // registering 'Distinct Count' measure for this dimension $this->prepareAttributeDistinctCountMeasure( $callcontext, $distinctCountRootUIMetaData, $referencePath, $cube, $attributeColumn, ParameterNameHelper::assemble($dimension->name)); // registering the dimension-specific measures $this->prepareColumnMeasures($callcontext, $dimensionUIMetaData, $referencePath, $cube, $dimension->attributeColumnName); // supporting extension tables (PK - to - PK) if (isset($keyColumn) && ($keyColumn->name == $attributeColumn->name)) { $this->prepareColumnUIMetaData4ExtensionDataset($datasetStack, $dimensionUIMetaData, $referencePath, $cube, $dimension->name, NULL, $cube->factsDataset, $keyColumn); } if (isset($dimension->datasetName)) { $dimensionDataset = $metamodel->getDataset($dimension->datasetName); $dimensionDatasetUIMetaData = $dimensionUIMetaData; // creating additional root element if the attribute has branches if (count($attributeColumn->branches) > 0) { $dimensionDatasetUIMetaData = new AttributeColumnUIMetaData(); $dimensionDatasetUIMetaData->name = self::prepareAttributeUIMetaDataName($referencePath, $cube, $dimension->name, $dimensionDataset->getKeyColumn()->name) . '/*dimensionDataset*/'; $dimensionDatasetUIMetaData->publicName = $dimensionDataset->publicName; $dimensionDatasetUIMetaData->description = $dimensionDataset->description; $dimensionDatasetUIMetaData->isSelectable = FALSE; $dimensionUIMetaData->registerElement($dimensionDatasetUIMetaData); } // supporting hierarchical dimension $this->generateColumnUIMetaData4DimensionDataset($datasetStack, $dimensionDatasetUIMetaData, $referencePath, $cube, $dimension->name, NULL, $dimension->datasetName); } // registering all column branches for the dimension $this->prepareAttributeColumnUIMetaData4ColumnBranch($datasetStack, $dimensionUIMetaData, $referencePath, $cube, $dimension->name, NULL, NULL, $attributeColumn); $datasetUIMetaData->registerAttribute($dimensionUIMetaData); $callcontext->usedColumnNames[$dimension->attributeColumnName] = TRUE; } if (count($distinctCountRootUIMetaData->elements) > 0) { $datasetUIMetaData->registerMeasure($distinctCountRootUIMetaData); } }