blob: 2000c8c258ed90c96c7a5cc1a7aa82a95d512a78 [file] [log] [blame]
/**
*
* 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 ('{' (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;