final ICanStartBuildingDimensions.DimensionsAdder dimensions =
b ->
b.withDimension("Underlyings")
.withHierarchyOfSameName()
.withLevels("UnderlierType", "UnderlierCode")
.withHierarchy("Products")
.asDefaultHierarchy()
.withLevels("ProductType", "ProductName")
.withSingleLevelDimension("HostName")
.withDimension("Currency")
.withHierarchyOfSameName()
.withLevelOfSameName()
.withFirstObjects("EUR", "GBP", "USD", "JPY")
.withDimension("CounterParty")
.withHierarchyOfSameName()
.withLevel("CouterPartyGroup")
.withLevel("CounterParty")
.withDimension("Geography")
.withHierarchy("City")
.withLevelOfSameName()
.withMemberProperties(
new PropertyInfo("Latitude", "latitude"),
new PropertyInfo("Longitude", "longitude"))
.withDimension("Trades")
.withHierarchy("Trades")
.withLevel("TradeId")
.withEpochDimension()
.withEpochLevel()
.withComparator("REVERSE_EPOCH")
.withFormatter("EPOCH[HH:mm:ss]")
.end();
final Function<ICanStartBuildingMeasures, IHasAtLeastOneMeasure> measures =
b ->
b.withContributorsCount()
.withAlias("Count")
.withFormatter("INT[#,###]")
.withAggregatedMeasure()
.sum("pnl")
.withinFolder("pnl")
.withFormatter("DOUBLE[#,###.00;-#,###.00]")
.withAggregatedMeasure()
.sum("delta")
.withinFolder("sensitivities")
.withFormatter("DOUBLE[#,###.00;-#,###.00]");
StartBuilding.cube()
.withName("MyCube")
.withMeasures(measures)
.withDimensions(dimensions)
.withAggregateProvider()
.jit()
.withProperty("rangeSharing", "true")
.withPartialProvider()
.bitmap()
.excludingHierarchy("Trades", "Trades")
.end()
.includingOnlyMeasures("pnlDelta.SUM", "pnl.SUM")
.withPartialProvider()
.bitmap()
.includingOnlyHierarchy("Underlyings", "Underlyings")
.and("HistoricalDates", "HistoricalDates")
.end()
.withPartialProvider()
.bitmap()
.includingOnlyMeasures("pnlDelta.SUM", "pnl.SUM")
.filteredOn(Map.of(LevelIdentifier.simple("Date"), "2022-06-14"))
.withPartialProvider()
.excludingMeasures("pnlDelta.SUM", "pnl.SUM")
.withDrillthroughExecutor()
.withKey("TIME_BUCKET_DT_EXECUTOR")
.withProperty("bucketHierarchy", "TimeBucketDynamic")
.withProperty("bucketedLevel", "Value Date")
.end()
.withAggregatesCache()
.withSize(10_000)
.cachingOnlyMeasures("contributors.COUNT", "pnl.SUM")
.withSharedContextValue(
new DrillthroughProperties(
new CustomComparator<>(List.of("Desk", "Currency"), null),
List.of("BookId", "City"),
List.of(
new CalculatedDrillthroughColumnDescription(
"DoubleAdder", "delta + gamma", "delta,gamma")),
List.of(
new CalculatedDrillthroughColumnSetDescription(
"PnlCurrencyColumnSet",
Immutable.map("prefix", "pnl in", "currencies", "EUR,USD,GBP,JPY,CHF,ZAR")
.toProperties()))))
.withSharedContextValue(new MdxContext())
.build();