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;
 }