public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list) { $hierarchyUniqueName = XMLAUtil::stringElement($row, 'HIERARCHY_UNIQUE_NAME'); $hierarchyName = XMLAUtil::stringElement($row, 'HIERARCHY_NAME') == NULL ? str_replace(array('[', ']'), array('', ''), $hierarchyUniqueName) : XMLAUtil::stringElement($row, 'HIERARCHY_NAME'); $hierarchyCaption = XMLAUtil::stringElement($row, 'HIERARCHY_CAPTION'); $description = XMLAUtil::stringElement($row, 'DESCRIPTION'); $allMember = XMLAUtil::stringElement($row, 'ALL_MEMBER'); $defaultMemberUniqueName = XMLAUtil::stringElement($row, 'DEFAULT_MEMBER'); $hierarchy = new XMLAHierarchy($context->getDimension($row), $hierarchyUniqueName, $hierarchyName, $hierarchyCaption, $description, $allMember != NULL, $defaultMemberUniqueName); $list->add($hierarchy); $this->cube->hierarchiesByUname[$hierarchy->getUniqueName()] = $hierarchy; }
public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list) { $schemaName = XMLAUtil::stringElement($row, "SCHEMA_NAME") === NULL ? '' : XMLAUtil::stringElement($row, "SCHEMA_NAME"); $catalogName = XMLAUtil::stringElement($row, "CATALOG_NAME"); if (!$catalogName && XMLAUtil::stringElement($row, "CUBE_NAME")) { $catalogName = XMLAUtil::stringElement($row, "CUBE_NAME"); } //print $catalogName . ':' . $schemaName . PHP_EOL; //echo 'XMLACatalogSchmeHandler: before if'; if ($this->catalogName == $catalogName && $list->get($schemaName) === NULL) { //echo 'XMLACatalogSchmeHandler: inside if'; if ($schemaName !== null) { $list->add(new XMLASchema($context->getCatalog($row), $schemaName)); } } }
public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list) { /* Example: <row> <CATALOG_NAME>FoodMart</CATALOG_NAME> <SCHEMA_NAME>FoodMart</SCHEMA_NAME> <CUBE_NAME>Warehouse</CUBE_NAME> <SET_NAME>[Top Sellers]</SET_NAME> <SCOPE>1</SCOPE> </row> */ $setName = XMLAUtil::stringElement($row, 'SET_NAME'); $list->add(new XMLANamedSet($context->getCube($row), $setName)); }
public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list) { /* Example: <row> <CATALOG_NAME>FoodMart</CATALOG_NAME> <SCHEMA_NAME>FoodMart</SCHEMA_NAME> <CUBE_NAME>Sales</CUBE_NAME> <MEASURE_NAME>Profit</MEASURE_NAME> <MEASURE_UNIQUE_NAME>[Measures].[Profit]</MEASURE_UNIQUE_NAME> <MEASURE_CAPTION>Profit</MEASURE_CAPTION> <MEASURE_AGGREGATOR>127</MEASURE_AGGREGATOR> <DATA_TYPE>130</DATA_TYPE> <MEASURE_IS_VISIBLE>true</MEASURE_IS_VISIBLE> <DESCRIPTION>Sales Cube - Profit Member</DESCRIPTION> </row> */ $measureName = XMLAUtil::stringElement($row, 'MEASURE_NAME'); $measureUniqueName = XMLAUtil::stringElement($row, 'MEASURE_UNIQUE_NAME'); $measureCaption = XMLAUtil::stringElement($row, 'MEASURE_CAPTION'); $description = XMLAUtil::stringElement($row, 'DESCRIPTION'); $measureAggregator = NULL; /*$measureAggregator = MeasureAggregator::getDictionary ( )::forOrdinal ( XMLAUtil::integerElement ( $row, 'MEASURE_AGGREGATOR' ) );*/ // Figure out datatype $datatype = NULL; $ordinalDatatype = DataType::getDictionary()->forName(XMLAUtil::stringElement($row, 'DATA_TYPE')); if ($ordinalDatatype == null) { $datatype = Datatype::getDictionary()->forOrdinal(XMLAUtil::integerElement($row, 'DATA_TYPE')); } else { $datatype = $ordinalDatatype; } $measureIsVisible = XMLAUtil::booleanElement($row, 'MEASURE_IS_VISIBLE'); $member = $context->getCube($row)->getMetadataReader()->lookupMemberByUniqueName($measureUniqueName); if ($member == null) { throw new OLAPException('The server failed to resolve a member with the same unique name as a measure named ' . $measureUniqueName); } $list->add(new XMLAMeasure($member->getLevel(), $measureUniqueName, $measureName, $measureCaption, $description, null, $measureAggregator, $datatype, $measureIsVisible, $member->getOrdinal())); }
public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list) { $memberOrdinal = XMLAUtil::integerElement($row, 'LEVEL_NUMBER'); $memberUniqueName = XMLAUtil::stringElement($row, 'MEMBER_UNIQUE_NAME'); $memberName = XMLAUtil::stringElement($row, 'MEMBER_NAME'); $parentUniqueName = XMLAUtil::stringElement($row, 'PARENT_UNIQUE_NAME'); $memberTypeValues = MemberType::values(); $memberType = $memberTypeValues[XMLAUtil::integerElement($row, 'MEMBER_TYPE')]; $memberCaption = XMLAUtil::stringElement($row, 'MEMBER_CAPTION'); $childrenCardinality = XMLAUtil::integerElement($row, 'CHILDREN_CARDINALITY'); $level = $context->getLevel($row); $map = array(); $this->addUserDefinedDimensionProperties($row, $level, $map); $depth = XMLAUtil::integerElement($row, 'DEPTH'); if ($depth && $depth != $level->getDepth()) { $map['DEPTH'] = $depth; } $member = new XMLAMember($level, $memberUniqueName, $memberName, $memberCaption, "", $parentUniqueName, $memberType, $childrenCardinality, $memberOrdinal, $map); $list->add($member); }
public function handle(DOMElement $row, XMLAConnectionContext $context, NamedList $list) { /* Example: <row> <CATALOG_NAME>FoodMart</CATALOG_NAME> <SCHEMA_NAME>FoodMart</SCHEMA_NAME> <CUBE_NAME>Sales</CUBE_NAME> <DIMENSION_UNIQUE_NAME>[Customers]</DIMENSION_UNIQUE_NAME> <HIERARCHY_UNIQUE_NAME>[Customers]</HIERARCHY_UNIQUE_NAME> <LEVEL_NAME>(All)</LEVEL_NAME> <LEVEL_UNIQUE_NAME>[Customers].[(All)]</LEVEL_UNIQUE_NAME> <LEVEL_CAPTION>(All)</LEVEL_CAPTION> <LEVEL_NUMBER>0</LEVEL_NUMBER> <LEVEL_CARDINALITY>1</LEVEL_CARDINALITY> <LEVEL_TYPE>1</LEVEL_TYPE> <CUSTOM_ROLLUP_SETTINGS>0</CUSTOM_ROLLUP_SETTINGS> <LEVEL_UNIQUE_SETTINGS>3</LEVEL_UNIQUE_SETTINGS> <LEVEL_IS_VISIBLE>true</LEVEL_IS_VISIBLE> <DESCRIPTION>Sales Cube - Customers Hierarchy - (All) Level</DESCRIPTION> </row> */ $levelUniqueName = XMLAUtil::stringElement($row, 'LEVEL_UNIQUE_NAME'); // SAP BW doesn't return a HIERARCHY_NAME attribute, // so try to use the unique name instead $levelName = XMLAUtil::stringElement($row, 'LEVEL_NAME') == null ? $levelUniqueName != null ? ereg_replace("\\]\$", "", ereg_replace("^\\[", "", $levelUniqueName)) : null : XMLAUtil::stringElement($row, 'LEVEL_NAME'); $levelCaption = XMLAUtil::stringElement($row, 'LEVEL_CAPTION'); $description = XMLAUtil::stringElement($row, 'DESCRIPTION'); $levelNumber = XMLAUtil::integerElement($row, 'LEVEL_NUMBER'); $levelTypeCode = XMLAUtil::integerElement($row, 'LEVEL_TYPE'); $levelType = LevelType::getDictionary()->forOrdinal($levelTypeCode); $calculated = ($levelTypeCode & self::MDLEVEL_TYPE_CALCULATED) != 0; $levelCardinality = XMLAUtil::integerElement($row, 'LEVEL_CARDINALITY'); $level = new XMLALevel($context->getHierarchy($row), $levelUniqueName, $levelName, $levelCaption, $description, $levelNumber, $levelType, $calculated, $levelCardinality); $list->add($level); $this->cubeForCallback->levelsByUname[$level->getUniqueName()] = $level; }
/** * Constructor * * @param XMLAHierarchy $hierarchy * @param string $uniqueName Unique name * @param string $name Name * @param string $caption Caption * @param string $description Description * @param integer $depth Distance to root * @param LevelType $type Level type * @param boolean $calculated Whether level is calculated * @param integer $cardinality Number of members in this level */ public function __construct(XMLAHierarchy $hierarchy, $uniqueName, $name, $caption, $description, $depth, LevelType $type = NULL, $calculated, $cardinality) { parent::__construct($uniqueName, $name, $caption, $description); assert($hierarchy != null); $this->type = $type; $this->calculated = $calculated; $this->cardinality = $cardinality; $this->depth = $depth; $this->hierarchy = $hierarchy; $levelRestrictions = array("CATALOG_NAME" => $hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getName(), "SCHEMA_NAME" => $hierarchy->getDimension()->getCube()->getSchema()->getName(), "CUBE_NAME" => $hierarchy->getDimension()->getCube()->getName(), "DIMENSION_UNIQUE_NAME" => $hierarchy->getDimension()->getUniqueName(), "HIERARCHY_UNIQUE_NAME" => $hierarchy->getUniqueName(), "LEVEL_UNIQUE_NAME" => $this->getUniqueName()); $this->propertyList = new LazyMetadataList(new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_PROPERTIES), XMLAConnectionContext::createAtLevel($this), new XMLAPropertyHandler(), $levelRestrictions); try { if ($hierarchy->getDimension()->getDimensionType() == DimensionType::getEnum(DimensionType::MEASURE)) { $restrictions = array("CATALOG_NAME" => $hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getName(), "SCHEMA_NAME" => $hierarchy->getDimension()->getCube()->getSchema()->getName(), "CUBE_NAME" => $hierarchy->getDimension()->getCube()->getName()); $this->memberList = new LazyMetadataList(new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_MEASURES), new XMLAConnectionContext($hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getMetadata()->getConnection(), $hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getMetadata(), $hierarchy->getDimension()->getCube()->getSchema()->getCatalog(), $hierarchy->getDimension()->getCube()->getSchema(), $hierarchy->getDimension()->getCube(), $hierarchy->getDimension(), $hierarchy, $this), new XMLAMeasureHandler($hierarchy->getDimension(), $restrictions)); } else { $this->memberList = new LazyMetadataList(new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_MEMBERS), new XMLAConnectionContext($hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getMetadata()->getConnection(), $hierarchy->getDimension()->getCube()->getSchema()->getCatalog()->getMetadata(), $hierarchy->getDimension()->getCube()->getSchema()->getCatalog(), $hierarchy->getDimension()->getCube()->getSchema(), $hierarchy->getDimension()->getCube(), $hierarchy->getDimension(), $hierarchy, $this), new XMLAMemberHandler(), $levelRestrictions); } } catch (OlapException $e) { throw new RuntimeException("Programming error", $e); } }
/** * Constructor * * @param XMLASchema Schema * @param string name Name * @param string description Description * * @throws OLAPException */ public function __construct(XMLASchema $schema, $name, $description) { assert($schema != null); assert($name != null); assert($description != null); $this->schema = $schema; $this->name = $name; $this->description = $description; $this->metadataReader = new XMLACachingMetadataReader(new XMLAMetadataReader($this), $this->measuresMap); $connection = $schema->getCatalog()->getMetaData()->getConnection(); $context = XMLAConnectionContext::createAtGranule($this, null, null, null); $restrictions = array('CATALOG_NAME' => $schema->getCatalog()->getName(), 'SCHEMA_NAME' => $schema->getName(), 'CUBE_NAME' => $this->getName()); $this->dimensions = new LazyMetadataList(new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_DIMENSIONS), $context, new XMLADimensionHandler($this), $restrictions); // populate measures up front; a measure is needed in every query $this->measures = new NamedList(); $connection->populateList($this->measures, $context, new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_MEASURES), new XMLAMeasureHandler($this->getDimensions()->get('Measures')), $restrictions); for ($i = 0; $i < $this->measures->size(); $i++) { $measure = $this->measures->get($i); $this->measuresMap[$measure->getUniqueName()] = $measure; } // populate named sets $this->namedSets = new LazyMetadataList(new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_SETS), $context, new XMLANamedSetHandler(), $restrictions); }
/** * Shorthand way to create a Context at Level level. * * @param XMLALevel Level (must not be null) */ public static function createAtLevel(XMLALevel $level) { return XMLAConnectionContext::createAtGranule($level->getHierarchy()->getDimension()->getCube(), $level->getHierarchy()->getDimension(), $level->getHierarchy(), $level); }
/** * Looks a member by its unique name and returns members related by * the specified tree-operations. * * @param array treeOps Collection of tree operations to travel relative to * given member in order to create list of members * * @param string memberUniqueName Unique name of member * * @param array IMember List to be populated with members related to the given * member, or empty set if the member is not found * * @throws OLAPException if error occurs */ public function lookupMemberRelatives(array $treeOps, $memberUniqueName, NamedList $list) { $context = XMLAConnectionContext::createAtGranule($this->cube, null, null, null); $treeOpMask = 0; foreach ($treeOps as $treeOp) { $treeOpMask |= $treeOp->xmlaOrdinal(); } $this->cube->getSchema()->getCatalog()->getMetaData()->getConnection()->populateList($list, $context, new XMLAMetadataRequest(XMLAMetadataRequest::MDSCHEMA_MEMBERS), new XMLAMemberHandler(), array('CATALOG_NAME' => $this->cube->getSchema()->getCatalog()->getName(), 'SCHEMA_NAME' => $this->cube->getSchema()->getName(), 'CUBE_NAME' => $this->cube->getName(), 'MEMBER_UNIQUE_NAME' => $memberUniqueName, 'TREE_OP' => $treeOpMask)); }