protected function approveColumn4ParticipationInExpression(ColumnMetaData $column) { // checking if the column is available if (!$column->isUsed()) { throw new IllegalStateException(t( '%columnName column is unused and cannot participate in the expression', array('%columnName' => $column->publicName))); } }
protected function prepareAttributeColumnUIMetaData(array $datasetStack, $referencePath, CubeMetaData $cube, $dimensionName, $dimensionReferencePath, DatasetMetaData $dataset = NULL, ColumnMetaData $column) { $dimensionColumnName = isset($dimensionReferencePath) ? self::prepareReferencedElementName($dimensionReferencePath, $dataset->name, $column->name) : $column->name; $attributeUIMetaData = new AttributeColumnUIMetaData(); $attributeUIMetaData->name = self::prepareAttributeUIMetaDataName($referencePath, $cube->factsDatasetName, $dimensionName, $dimensionColumnName); $attributeUIMetaData->publicName = $column->publicName; $attributeUIMetaData->description = $column->description; $attributeUIMetaData->columnIndex = $column->columnIndex; $attributeUIMetaData->type = clone $column->type; $attributeUIMetaData->datasetName = $cube->factsDatasetName; if ($column->isKey()) { $attributeUIMetaData->isSelectable = FALSE; } if (!$column->isUsed()) { $attributeUIMetaData->isSelectable = FALSE; } if (!$column->isKey()) { $this->prepareAttributeColumnUIMetaData4ColumnBranch($datasetStack, $attributeUIMetaData, $referencePath, $cube, $dimensionName, $dimensionReferencePath, $dataset, $column); } list($referencedDatasetName) = ReferencePathHelper::splitReference($column->type->getLogicalApplicationType()); if (isset($referencedDatasetName)) { $branchReferencePath = NULL; if (isset($dataset)) { $branchReferencePath = isset($dimensionReferencePath) ? self::prepareReferencedElementName($dimensionReferencePath, $dataset->name, $column->name) : ReferencePathHelper::assembleReference($dataset->name, $column->name); } $this->generateColumnUIMetaData4DimensionDataset( $datasetStack, $attributeUIMetaData, $referencePath, $cube, $dimensionName, $branchReferencePath, $referencedDatasetName); } return $attributeUIMetaData; }
protected static function registerFactMeasure(CubeMetaData $cube, ColumnMetaData $column, $functionName, $additivity, $selectedApplicationType = NULL) { $measureName = StarSchemaNamingConvention::getFactRelatedMeasureName($column->name, $functionName); $measure = $cube->registerMeasure($measureName); $measure->publicName = t($functionName); $measure->description = t("System generated '@functionName' measure for '@columnName' column", array('@functionName' => $measure->publicName, '@columnName' => $column->publicName)); $measure->used = FALSE; $expression = FALSE; if ($column->persistence == FormulaMetaData::PERSISTENCE__CALCULATED) { if ($column->isUsed()) { try { $expressionAssembler = new FormulaExpressionAssembler($cube->factsDataset); $expression = $expressionAssembler->assemble($column); $measure->used = TRUE; } catch (Exception $e) { $message = t("@functionName measure assembled with errors. @error", array('@functionName' => $functionName, '@error' => $e->getMessage())); $measure->functionError = $message; LogHelper::log_warn($message); } } else { $measure->functionError = t("@functionName measure was not assembled for the unused column", array('@functionName' => $functionName)); } } else { $formulaExpressionParser = new FormulaExpressionParser(SQLFormulaExpressionHandler::LANGUAGE__SQL); $expression = $formulaExpressionParser->assemble($column->name); $measure->used = TRUE; } $measure->function = $expression === FALSE ? FALSE : $functionName . '(' . $expression . ')'; $measure->additivity = $additivity; $measure->type->applicationType = isset($selectedApplicationType) ? $selectedApplicationType : $column->type->applicationType; $measure->type->scale = $column->type->scale; }