protected function prepareCubeRequestColumns(CubeQueryRequest $request, CubeMetaData $cube, array $columnNames) { $metamodel = data_controller_get_metamodel(); foreach ($columnNames as $requestColumnIndex => $columnName) { list($elementName, $subElementName, $propertyName) = ParameterHelper::splitName($columnName); list($referencedDatasetName, $referencedElementName) = ReferencePathHelper::splitReference($elementName); // checking that referenced cube exists $referencedCube = isset($referencedDatasetName) ? $metamodel->getCubeByDatasetName($referencedDatasetName) : NULL; if (isset($subElementName)) { if (isset($referencedCube)) { throw new IllegalArgumentException(t('Referenced dimensions are not supported')); } // checking the level exists $dimension = $cube->getDimension($elementName); $level = $dimension->getLevel($subElementName); // adding the level if (isset($propertyName)) { $request->addDimensionLevelProperty($requestColumnIndex, $elementName, $subElementName, $propertyName); } else { $request->addDimensionLevel($requestColumnIndex, $elementName, $subElementName); } } else { $selectedRequest = $request; if (isset($referencedCube)) { // checking the measure exists in the referenced cube $measure = $referencedCube->getMeasure($referencedElementName); // preparing referenced request $selectedRequest = $request->registerReferencedRequest($referencedCube->name); } else { // checking the measure exists $measure = $cube->getMeasure($referencedElementName); } // adding the measure $selectedRequest->addMeasure($requestColumnIndex, $referencedElementName); } } }
protected function prepareAttributeCustomMeasure(AbstractAttributeUIMetaData $attributeUIMetaData, $referencePath, CubeMetaData $cube, $measureName) { $measure = $cube->getMeasure($measureName); $measureUIMetaData = new FactMeasureUIMetaData(); $measureUIMetaData->name = self::prepareMeasureUIMetaDataName($referencePath, $cube, $measureName); $measureUIMetaData->publicName = $measure->publicName; $measureUIMetaData->description = $measure->description; $measureUIMetaData->type = clone $measure->type; $attributeUIMetaData->registerElement($measureUIMetaData); }
public function prepareCubeMetaData(DataControllerCallContext $callcontext, CubeMetaData $cube) { $measureNames = NULL; if (isset($cube->measures)) { foreach ($cube->measures as $measure) { if ($measure->isComplete()) { continue; } $measureNames[] = $measure->name; } } // we need at least one incomplete measure to proceed if (!isset($measureNames)) { return; } $environment_metamodel = data_controller_get_environment_metamodel(); $datasource = $environment_metamodel->getDataSource($cube->sourceDataset->datasourceName); $queryRequest = new CubeQueryRequest($cube->name); // requesting all measures to get their type foreach ($measureNames as $requestColumnIndex => $measureName) { $queryRequest->addMeasure($requestColumnIndex, $measureName); } // we do not need to return any records, we just analyze structure $queryRequest->setPagination(0); $aggrStatement = $this->prepareCubeQueryStatement($callcontext, $queryRequest); list($isSubqueryRequired, $assembledAggregationSections) = $aggrStatement->prepareSections(NULL); $sql = Statement::assemble($isSubqueryRequired, NULL, $assembledAggregationSections); // applying pagination $this->applyPagination($queryRequest, $sql); $measureDatasetMetaData = $this->processDatasetMetaData($callcontext, $datasource, $sql); // processing all measures and setting up types foreach ($measureNames as $measureName) { $column = $measureDatasetMetaData->getColumn($measureName); $cube->getMeasure($measureName)->initializeTypeFrom($column->type); } }