public function prepareDatasetColumnLookupIds($datasetName, ColumnMetaData $column, array &$lookupValues) { $lookupValueColumn = new ColumnMetaData(); $lookupValueColumn->name = self::$COLUMN_NAME__ATTRIBUTE_LOOKUP_VALUE; $lookupValueColumn->initializeTypeFrom($column->type); $this->prepareIdentifiers(DateDimensionDatasetNames::YEARS, array($lookupValueColumn), NULL, self::$SEQUENCE_NAME__TIME, $lookupValues); }
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))); } }
public function prepareDatasetColumnLookupIds($datasetName, ColumnMetaData $column, array &$lookupValues) { $lookupDatasetName = StarSchemaNamingConvention::getAttributeRelatedName($datasetName, $column->name); $sequenceName = $lookupDatasetName; $lookupValueColumn = new ColumnMetaData(); $lookupValueColumn->name = 'value'; $lookupValueColumn->initializeTypeFrom($column->type); $this->prepareIdentifiers($lookupDatasetName, array($lookupValueColumn), NULL, $sequenceName, $lookupValues); }
public function prepareDatasetColumnLookupIds($datasetName, ColumnMetaData $column, array &$lookupValues) { $entryDateColumn = new ColumnMetaData(); $entryDateColumn->name = self::$COLUMN_NAME__ATTRIBUTE_LOOKUP_VALUE; $entryDateColumn->initializeTypeFrom($column->type); $this->loadIdentifiers(DateDimensionDatasetNames::DATES, array($entryDateColumn), $lookupValues); // even if we find a record for a particular date we still need to check if there are corresponding records for related fiscal year and quarters $dates = NULL; foreach ($lookupValues as $lookupKey => $lookupPproperties) { $entryDate = $lookupPproperties->{self::$COLUMN_NAME__ATTRIBUTE_LOOKUP_VALUE}; $datetime = new DateTimeProxy(new DateTime($entryDate)); $dates[$lookupKey] = $datetime; } $processedYearValues = $this->prepareYearIds($dates); $this->prepareQuarterIds($processedYearValues, $dates); $processedMonthValues = $this->prepareMonthIds($processedYearValues, $dates); $this->prepareDateIds($column, $lookupValues, $processedMonthValues, $dates); }
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 function detectColumnNameOwner(ColumnMetaData $column, array $columnNames = NULL) { $factsColumnNames = $dimensionColumnNames = NULL; foreach ($columnNames as $columnName) { if ($column->findBranch($columnName) == NULL) { $dimensionColumnNames[] = $columnName; } else { $factsColumnNames[] = $columnName; } } return array($factsColumnNames, $dimensionColumnNames); }
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; }
public function __construct() { parent::__construct(); $this->persistence = self::PERSISTENCE__CALCULATED; }