| /** |
| * |
| * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| * |
| */ |
| |
| grammar org.eclipse.osbp.xtext.cubedsl.CubeDSL with org.eclipse.osbp.xtext.oxtype.OXtype |
| |
| import "http://osbp.eclipse.org/xtext/cubedsl/CubeDSL" |
| |
| import "http://osbp.eclipse.org/dsl/common/types/v1" |
| import "http://osbp.eclipse.org/dsl/entity/v1" as entity |
| import "http://www.eclipse.org/emf/2002/Ecore" as ecore |
| |
| CubeModel: |
| {CubeModel} |
| importSection=XImportSection? |
| pckg=CubePackage; |
| |
| CubePackage: |
| 'package' name=QualifiedName ('{' (schemaTableNamesToLowerCase?='schemaTableNamesToLowerCase')? (dimensions+=CubeDimension)* (cubes+=CubeType)* '}')?; |
| |
| CubeType: |
| 'cube' name=ID (defaultMeasure?='defaultMeasure' defaultMeasureValue=STRING)? '{' cubeTypeEntity=CubeTypeEntity'}'; |
| |
| CubeDimensionUsage: |
| 'dimensionUsage' sourceValue=[CubeDimension] 'over' overValue=[entity::LEntityFeature|LFQN] ; |
| |
| CubeDimension: |
| 'dimension' name=TRANSLATABLEID (typeTime?='typeTime')? '{' hierarchies+=CubeHierarchy* '}'; |
| |
| CubeHierarchy: |
| {CubeHierarchy} 'hierarchy' (name=TRANSLATABLEID)? (hasAll?='hasAll')? (allMemberName?='allMemberName' allMemberNameValue=TRANSLATABLESTRING)? (defaultMember?='defaultMember' defaultMemberValue=TRANSLATABLESTRING)? |
| '{' cubeDimEntity=CubeDimensionEntity '}'; |
| |
| CubeEntity: |
| 'entity' entityValue=[entity::LEntity|LFQN] (key?='key' keyValue=[entity::LEntityFeature|LFQN])?; |
| |
| CubeTypeEntity: |
| entityRef=CubeEntity '{' dimensionUsages+=CubeDimensionUsage* measures+=CubeMeasure* '}'; |
| |
| CubeDimensionEntity: |
| {CubeDimensionEntity} entityRef=CubeEntity '{' hierarchLevels+=CubeLevel* (dimEntity=CubeDimensionEntityEntity)? '}'; |
| |
| CubeDimensionEntityEntity: |
| {CubeDimensionEntityEntity} entityRef=CubeEntity '{' 'over' overValue=[entity::LEntityFeature|LFQN] hierarchLevels+=CubeLevel* (dimEntity=CubeDimensionEntityEntity)? '}'; |
| |
| CubeLevel: |
| 'level' name=TRANSLATABLEID 'column' levelColValue=[entity::LEntityFeature|LFQN] (nameColumn?='nameColumn' levelNameColValue=[entity::LEntityFeature|LFQN])? (captionColumn?='captionColumn' levelCaptionColValue=[entity::LEntityFeature|LFQN])? (ordinalColumn?='ordinalColumn' levelOrdinalColValue=[entity::LEntityFeature|LFQN])? (uniqueMembers?='uniqueMembers')? |
| (levelType?='levelType' levelTypeValue=CubeLevelLevelType)? ('{' properties+=CubeLevelProp* '}')?; |
| |
| CubeLevelProp: |
| 'property' name=TRANSLATABLEID 'column' levelPropColValue=[entity::LEntityFeature|LFQN] (type?='type' typeValue=CubeLevelPropType)?; |
| |
| CubeMeasure: |
| 'measure' name=TRANSLATABLEID aggregator=CubeAggregatorEnum 'column' measureCol=[entity::LEntityFeature|LFQN] (notVisible?='notVisible')?; |
| |
| enum CubeAggregatorEnum: |
| SUM='sum'| COUNT='count'| MIN='min'| MAX='max'| AVG='avg'| DSC='distinct-count'; |
| |
| enum CubeLevelPropType: |
| STRING='String' | NUMERIC='Numeric' | INTEGER='Integer' | BOOLEAN='Boolean' | DATE='Date' | TIME='Time' | TIMESTAMP='Timestamp'; |
| |
| enum CubeLevelLevelType: |
| MDLEVEL_TYPE_TIME='Time' | MDLEVEL_TYPE_TIME_YEARS='TimeYears' | MDLEVEL_TYPE_TIME_HALF_YEARS='TimeHalfYears' | MDLEVEL_TYPE_TIME_QUARTERS='TimeQuarters' | MDLEVEL_TYPE_TIME_MONTHS='TimeMonths' | MDLEVEL_TYPE_TIME_WEEKS='TimeWeeks' | |
| MDLEVEL_TYPE_TIME_DAYS='TimeDays' | MDLEVEL_TYPE_TIME_HOURS='TimeHours' | MDLEVEL_TYPE_TIME_MINUTES='TimeMinutes' | MDLEVEL_TYPE_TIME_SECONDS='TimeSeconds'; |
| |
| LFQN: |
| ID ('.' ID)*; |
| |
| TRANSLATABLEID: |
| ID; |
| |
| TRANSLATABLESTRING: |
| STRING; |