olap.properties 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. # Licensed Materials - Property of IBM
  2. # IBM Cognos Products: OQP
  3. # (C) Copyright IBM Corp. 2005, 2020
  4. # US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM corp.
  5. # This properties file contains default configuration attributes for all
  6. # OLAP data sources. Any data source that is different must override
  7. # the value in their own properties file.
  8. #
  9. # The following properties come from an example in the patent application
  10. # entitled "MULTIDIMENSIONAL QUERY SIMPLIFICATION USING DATA ACCESS SERVICE
  11. # HAVING LOCAL CALCULATION ENGINE"
  12. # V5 Version number
  13. # 0: Pures Cognos 8.4 Behaviour (do not use XQE)
  14. # 1: Cognos 8.4 Behaviour (where implemented)
  15. # 2: Default, XQE Behaviour (for all but a few deltas)
  16. v5.version=2
  17. #
  18. # V5 Summary - Header, footer and within detail/aggregate.
  19. #
  20. v5.summary.remote=true
  21. v5.summary.local=true
  22. # remote - process remotely
  23. # local - process locally
  24. # balance - In balanced mode the summary expression will attempt to use local processing
  25. # for simple case only.
  26. v5.summary.location=remote
  27. #
  28. # V5 Sort
  29. #
  30. v5.sort.remote=true
  31. v5.sort.local=true
  32. # remote - process remotely
  33. # local - process locally
  34. # balance - In balanced mode the sort expression will attempt to use local processing
  35. # for simple case only.
  36. v5.sort.location=remote
  37. #
  38. # Used to define if the provider could return some cell value type.
  39. # The information used to discard (performance optimization) related V5 Edge Suppression when
  40. # the provider cannot return such cell values.
  41. #
  42. result.return.divbyzero=true
  43. result.return.overflow=true
  44. function.nonempty.remote=true
  45. function.nonempty.local=true
  46. # When execution location is set to 'both' NonEmpty is always pushed to the
  47. # remote source to try to reduce the size of the result returned however it
  48. # is then also be processed locally. This is because this data source has
  49. # non empty behavior which is inconsistent with the desired non empty behavior
  50. function.nonempty.location=both
  51. function.crossjoin.remote=true
  52. function.crossjoin.local=true
  53. function.crossjoin.location=local
  54. # Local crossjoins are used normally. However remote crossjoins are enabled
  55. # when the estimated size of a crossjoin result is greater than 100,000 tuples.
  56. function.crossjoin.threshold=100000
  57. function.intersect.remote=true
  58. function.intersect.local=true
  59. function.intersect.location=remote
  60. # When an intersect contains a single member as one of its parameters the
  61. # local execution engine will attempt to resolve the intersect using
  62. # meta-data otherwise it will still be pushed to the remote MDX engine.
  63. function.intersect.singleMemberExecutionLocation=local
  64. function.filter.remote=true
  65. function.filter.local=true
  66. # In balanced mode the filter expression will attempt to use cached data or
  67. # meta-data information to locally evaluate the expressions, if the
  68. # parameters to the filter are not cached then the filter expression is
  69. # pushed to the remote engine.
  70. # FILTER( S1, <Condition>) Whether to execute this locally isn't just
  71. # dependent on the size of S1 but also the complexity of the <Condition>.
  72. # In cases where the <Condition> is complex it may be quicker to execute it
  73. # locally rather than ascertain all the dependencies of the <Condition>
  74. # expression (such as calculated members etc), especially if S1 is small.
  75. # So the cost of the filter condition and the set size are used to determine
  76. # the best execution location.
  77. function.filter.location=balance
  78. function.order.remote=true
  79. function.order.local=true
  80. # In balanced mode the order expression will attempt to use local processing
  81. # for simple case only.
  82. function.order.location=balance
  83. # The Filter rewrite process looks at the set expression of a filter to
  84. # determine if it is of the form FILTER( CROSSJOIN( S1, S2), <Condition>) )
  85. # if so it will rewrite the filter as CROSSJOIN( FILTER( S1, <Condition>),
  86. # FILTER(S2, <Condition>)) the second version will be quicker to process
  87. # locally or remotely.
  88. function.filter.enableRerite=true
  89. function.aggregate.remote=true
  90. function.aggregate.local=true
  91. function.aggregate.location=balance
  92. # Aggregate(S1, <Numeric Expression>) Where local execution is possible,
  93. # that is when the correct aggregation method to use is known, this aggregate
  94. # can be performed locally but only where S1 is small and the
  95. # <Numeric Expression> is simple. Thus the cost of the numeric expression
  96. # and the approximate size of S1 must be determined in order to balance this
  97. # query.
  98. function.aggregate.localExecutionSetSizeThreshold=10000
  99. function.generate.remote=true
  100. function.generate.local=true
  101. function.generate.location=remote
  102. # Generate functions are computationally expensive. The query execution engine
  103. # rewrites generate to remove unnecessary generates by converting them to
  104. # Crossjoins. Generate rewrite is only safe to do in certain circumstances.
  105. # i.e. GENERATE( S1, CROSSJOIN( S1.CurrentMember, S2) )(where S2 does not
  106. # contain the dimension in S1)Can be better expressed as: CROSSJOIN(S1, S2)
  107. function.generate.enableRewrite=true
  108. # Each Top.. or Bottom.. set operations is very expensive if performed locally
  109. # hence these all always pushed to the remote database for processing
  110. function.topcount.remote=true
  111. function.topcount.local=true
  112. function.topcount.location=remote
  113. function.toppercent.remote=true
  114. function.toppercent.local=true
  115. function.toppercent.location=remote
  116. function.topsum.remote=true
  117. function.topsum.local=true
  118. function.topsum.location=remote
  119. function.bottomcount.remote=true
  120. function.bottomcount.local=true
  121. function.bottomcount.location=remote
  122. function.bottompercent.remote=true
  123. function.bottompercent.local=true
  124. function.bottompercent.location=remote
  125. function.bottomsum.remote=true
  126. function.bottomsum.local=true
  127. function.bottomsum.location=remote
  128. # This config determines whether to skip the removing of null suppression from the methods
  129. # RemoveEdgeNullSuppressionwhenReportSummary() and RemoveEdgeNullSuppressionWhenOuterNestedGroupSameHierarchy
  130. # These two methods covers extremely unusual test cases in which if null suppression is enabled, there will be
  131. # an data integrity issue.
  132. suppression.aggressive=false
  133. #
  134. # This configuration flag tell us whether to assign or not unreferenced hierarchies to calculated members.
  135. #
  136. unreferencedHierarchy.calculations=true
  137. #
  138. # Use Local OLAP (LOLAP) for these queries
  139. #
  140. v5.useLocalOLAP=false
  141. #
  142. # Use Local OLAP (LOLAP) for Set Alias
  143. #
  144. v5.useLOLAPForSetAlias=false
  145. #
  146. # Use Local OLAP (LOLAP) when different hierarchies from same dimension are in the query.
  147. #
  148. v5.useLOLAPForDiffHierarchiesFromSameDimension=false
  149. #
  150. # Use Local OLAP (LOLAP) for functions
  151. #
  152. v5.useLOLAPForFunctions=false
  153. #
  154. # Use Local OLAP (LOLAP) for set expressions containing a value expression operand that is context dependent
  155. # on something in the query other than itself.
  156. #
  157. v5.useLOLAPForContextDependentSet=false
  158. #
  159. # Use Local OLAP (LOLAP) for MDX with SAP unsupported CurrentMember.
  160. #
  161. v5.useLocalOLAPForUnsupportedCurrentmember=false
  162. #
  163. # Turn on sub Query planning for Local OLAP (LOLAP) Query Cache generation
  164. #
  165. v5.planSubQueryForLocalOLAP=false
  166. #
  167. # Use Single Axis Query for LOLAP provider queries
  168. #
  169. lolap.singleAxis=false
  170. #
  171. # For LOLAP providers to decide if producing MDX that selects individual members
  172. # on an axis is worthwhile (vs. using a "dim/hier.MEMBERS" clause in the MDX produced
  173. # to retrieve measure values).
  174. # maxAxisSelectionsIgnoreRatio is a hard upper bound on the number of individual members
  175. # that can be selected. If it is set to -1, there is no upper bound.
  176. # The heuristic is as follows:
  177. # if (maxAxisSelectionsIgnoreRatio > -1 && selCount > maxAxisSelectionsIgnoreRatio ||
  178. # (selCount > maxAxisSelections && selCount > dim.getCardinality() * maxAxisSelectionsRatio))
  179. # // Use a "dim/hier.MEMBERS" clause in the MDX produced.
  180. lolap.maxAxisSelections=200
  181. lolap.maxAxisSelectionsRatio=0.5
  182. lolap.maxAxisSelectionsIgnoreRatio=-1
  183. #
  184. # For LOLAP providers to decide if splitting a symmetric query for a requested set of tuples into
  185. # multiple more precise queries is worthwhile.
  186. # The heuristic for determining whether to split a requested set into multiple queries is:
  187. # if (symmetricTuples - requiredTuples > minExcessTuplesForSplitQuery
  188. # && symmetricTuples / requiredTuples > excessTuplesRatioForSplitQuery)
  189. # When either threshold is set to -1, a requested set of tuples is never split into multiple queries.
  190. #
  191. lolap.minExcessTuplesForSplitQuery=-1
  192. lolap.excessTuplesRatioForSplitQuery=-1
  193. #
  194. # V5 master-detail optimization when allRows optimization is specified
  195. #
  196. v5.master-detail.transform=true
  197. # false - generating parameterized detail filter to detail query ( default )
  198. # true - generating extra edge to detail query
  199. #
  200. # V5 master-detail optimization disregarding the state of the allRows optimization flag
  201. # This has been introduced for debugging purposes since the allRows flag is not always
  202. # set in the V5. Here is an explanation from Daniel Rousseau:
  203. # The Report Server tries to use request hint : executionOptimization value="allRows" whenever possible.
  204. # There are a number of cases where this optimization is disabled. The main ones are:
  205. # - When recordings are enabled, since the data has to be iterated over twice: once to write it to file
  206. # and once to render the report.
  207. # - When the data is saved in the query cache (for the same reason as above).
  208. # - During an interactive session, when the output format is HTML, HTML fragment, MHT, XHTML, XHTML fragment,
  209. # raw XML or layout data XML.
  210. # - In some cases where multiple formats need to be rendered and the formats include CSV or XML.
  211. #
  212. v5.master-detail.transform.allRowsOrNot=false
  213. # false - generating parameterized detail filter to detail query ( default )
  214. # true - generating extra edge to detail query
  215. #
  216. # MDX Optimizations
  217. # This configuration flags says whether the provider supports replacing the aggregate of child members with the parent
  218. # when XQE believes this will be true. This is not guaranteed to work for all providers, so this setting must default
  219. # to false.
  220. #
  221. mdx.optimize.parentmember=false
  222. #
  223. # Force operators such as Cousin, ClosingPeriod, OpeningPeriod, ParallelPeriod, LastPeriod and PeriodsToDate
  224. # to apply on Ragged Hierarchies
  225. #
  226. engine.forceOperationsOnRaggedTimeHierarchies=false
  227. #
  228. # Null behavior of comparison operators (=, !=, <, <=, >, >=) in the MDX engine.
  229. # This should be set to "null" or "zero".
  230. # When set to null, expressions such as "null < number" and "number < null" will evaluate to null.
  231. # When set to zero, null is treated as zero.
  232. #
  233. null.comparison.operator=zero
  234. #
  235. # Null behavior of boolean operators (and, or, xor) in the MDX engine.
  236. # This should be set to "null" or "false".
  237. #
  238. null.boolean.operator=false
  239. #
  240. # Null behaviour in the MDX engine for the arithmetic operators: +, -. *, /, %
  241. # When null.divide.denominator is set to zero, a number divided by null will return /0.
  242. # When null.divide.denominator is set to null, a number divided by null will return null.
  243. #
  244. null.plus.operator=zero
  245. null.minus.operator=zero
  246. null.multiply.operator=null
  247. null.divide.numerator=null
  248. null.divide.denominator=zero
  249. null.modulo.dividend=null
  250. null.modulo.divisor=zero
  251. #
  252. # Null behaviour in the MDX engine vb functions (Abs, Int, Round).
  253. #
  254. null.vb.math.function=zero
  255. #
  256. # Null behavior of order function (TopCount, BottomCount) in the MDX engine.
  257. # Nulls treated like zero by default.
  258. #
  259. null.order.function=zero
  260. #
  261. # Null value position with sort function. This flag is associated with null.order.function.
  262. # null.order.function null.position.order.function behavior
  263. # null first null + first in the list
  264. # null last null + last in the list
  265. # zero first for numeric NULL: it's the less than zero larger than smallest negative number. This is the standard MDX behavior.
  266. # For non-numeric null: null + first in the list
  267. # zero last for numeric NULL: it's the greater than zero smaller than smallest positve number.
  268. # For non-numeric null: null + last in the list
  269. null.position.order.function=FIRST
  270. #
  271. # Threshold 1: mdx.cjs.tupleToIndBitMap.threshold
  272. # Threshold for the use of the temporary bit map tuples-to-indexes structure for
  273. # cross joined sets (cjs).
  274. # This structure is used to save memory but it could slow down the execution.
  275. # Threshold2: mdx.cjs.noTupleIndex.threshold
  276. # Threshold for skipping the use of a tuples-to-indexes structure because the set is too
  277. # big to index in memory
  278. # Threshold 3: mdx.cjs.maxTupleMaterialization.threshold
  279. # Multiplication factor used to determine whether a tuples-to-indexes structure
  280. # that is optimized for many nested crossjoined sets (where iterating over the resulting
  281. # tuples is expensive) should be used
  282. #
  283. mdx.cjs.tupleToIndBitMap.threshold=35000
  284. mdx.cjs.noTupleIndex.threshold=10000000
  285. mdx.cjs.maxTupleMaterialization.threshold=100
  286. #
  287. # Threshold controlling if result set cell storage should be in memory or in stream.
  288. # Set it to 0 to disable using in stream cell storage
  289. #
  290. mdx.cjs.maxCellsInMemory.threshold=5000000
  291. #
  292. # When processing an MDX if a member is not found, by default the mdx engine
  293. # throws an exception. Setting this parameter to "true", however, will trigger the
  294. # engine to create a null member for that member and continue the processing.
  295. #
  296. mdx.useNullForNonExistingMember=false
  297. #
  298. # MDX Function Support
  299. #
  300. mdx.support.setalias=true
  301. #
  302. # This property controls how ambiguous an ambiguous dimension identifier is resolved
  303. # within the MDX engine, when the dimension has a single hierarchy.
  304. #
  305. # For example, with a Cube with a level unique name of [Sales].[Product].[Product],
  306. # the identifer [Sales].[Product] could be referring to the level or to the hierarchy.
  307. #
  308. # This property can have the following values:
  309. #
  310. # level - The identifier will be resolved as a level
  311. # hierarchy - The identifier will be resolved as a hierarchy
  312. #
  313. mdx.level.hierarchy.ambiguity.resolution=level
  314. #
  315. # V5 Member and Measure Detail Filter timing for the postAutoAggregation flag.
  316. #
  317. # reportDetails: Apply the filter along with Summary Filters to the details of the report. This would mean it happens after OLAP functions such as TOPCOUNT, as an example.
  318. # virtualDetails: Apply the filter to the virtual details cube at the lowest projected levels. This would mean it happens before OLAP functions such as TOPCOUNT, as an example.
  319. #
  320. # Not that OR filters between different hierarchies are virtualDetails by default and this is not yet configurable.
  321. #
  322. v5.postAutoAggregation.timing=reportDetails
  323. #
  324. # Indicates if the catalog name is case insensitive or not.
  325. #
  326. olap.metadata.caseInsensitiveCatalog=false
  327. #
  328. # MDX Support for OLYMPIC rank
  329. #
  330. mdx.support.olympicRank=true
  331. #
  332. # MDX Support for OLYMPIC rank with implicit sort
  333. #
  334. mdx.support.olympicRankSort=true
  335. #
  336. # MDX supports re-aggregation for measure with non additive rollups
  337. #
  338. mdx.support.reaggregationNonAdditive=true
  339. #
  340. # This property controls how to handle the projection of nested levels of the same hierarchy.
  341. # Specifically the use of the technique involving nested level decoration rules.
  342. # In that case the planner queries only the lowest level members, later the post-processing queries the outer levels if required.
  343. # - always: always use this technique
  344. # - never: never use this technique
  345. # - automatic: allow the planner to decide whether to use or not this technique.
  346. #
  347. applyNestedLevelDecorationRules=automatic
  348. #
  349. # Some providers accept incorrect names (aliases) in the query while returning the correct name.
  350. # e.g. MSAS2005 accepts '[Time].[Year].&[1997]' but returns '[Time].[Year].[1997]'.
  351. # This may cause a XQE-DEC-0016 error at execution time.
  352. # This can only happen with:
  353. # a) legacy reports which could be fixed by opening them in the corresponding studio and saving them again.
  354. # b) defective models.
  355. # In both cases XQE would fix the problem at execution by running a secondary query.
  356. # That fix would not be persistent, the problem will take place each time the report is executed
  357. # and the solution enabled by this property slows down a bit the execution.
  358. useCheckMemberRulesSecondaryQuery=false
  359. #
  360. # Force MDX operators like TopCount to be processed by the Database/Native MDX engine even when Local processing LOLAP is turned on
  361. #
  362. v5.enableTopCountFunctionsOptimization=false
  363. #
  364. # Force MDX operators like FilterSet to be processed by the Database/Native MDX engine even when Local processing LOLAP is turned on
  365. #
  366. v5.enableFilterSetOptimization=false
  367. # If the dataset size exceeds the configurable threshold then allow the MDX operator to be processed by the
  368. # Database/Native MDX engine even when Local processing LOLAP is turned on
  369. v5.topCountFunctionsOptimization.datasetSize=10000
  370. # If the projected dataset size is less the configurable threshold then allow the MDX operator to be processed by the
  371. # Database/Native MDX engine even when Local processing LOLAP is turned on
  372. v5.topCountFunctionsOptimization.projectedSetSize=500
  373. #
  374. # Some datasources like BW get the cardinality of the level at high cost, use the dimension cardinality unstead
  375. #
  376. datasource.levelBasedDatasetCardinality=false
  377. # Defer the evaluation of named set when Topcount/Filterset optimization is on for Local processing LOLAP
  378. #
  379. v5.deferNamedSetEvaluation=false
  380. #
  381. # This property controls the application of compensation for ragged hierarchies.
  382. #
  383. applyRaggedCompensation=true
  384. #
  385. # This property controls the application of compensation for unbalanced hierarchies.
  386. #
  387. applyUnbalancedCompensation=true
  388. #
  389. # This property tells whether the provider may filter the data before applying the MDX.
  390. # It may take one of this values:
  391. # - always: the provider always filter the data before applying the MDX,
  392. # - never: the provider never filter the data before applying the MDX,
  393. # - forNonEmpty: Only in the presence of MDX edge NON EMPTY the provider filters the data before applying the MDX.
  394. #
  395. datasource.appliesFilterBeforeMDX=never
  396. #
  397. # This property tells whether the MDX should be generated in a way this is better handled for non empty on the edge
  398. # or non empty crossjoins.
  399. # It may take one of this values:
  400. # - always: always try to generate NON EMPTY friendly MDX
  401. # - never: never try to generate NON EMPTY friendly MDX
  402. # - forNonEmpty: only in the presence of MDX edge NON EMPTY
  403. #
  404. mdx.generateNonEmptyFriendlyMDX=forNonEmpty
  405. # This property controls whether the MDX NON EMPTY clause should be used to assist the V5 edge suppression of nulls.
  406. #
  407. v5.suppress.nulls.useMDXNonEmpty=true
  408. # For report with same hierarchy on row and column, reporter mode will put row and column into a single edge. This property controls the maximum number of edge groups in the single edge.
  409. #
  410. v5.reportermode.maxEdgegroupsPerEdge=300
  411. # Capability key constant for the property that controls
  412. # whether to restrict multi level set overlap with other sets in the same path.
  413. #
  414. restrictMultiLevelOverlap=true
  415. #
  416. # Allow an index in ancestor or descendants function to be converted to a level, regardless of ragged/unbalanced hierarchy condition.
  417. #
  418. convertIndexToLevelInAncDescFunc=false
  419. #
  420. # Optimize the descendants function to fetch descendants of a member directly.
  421. #
  422. OptimizeDescendantsFunctionInSAL=false
  423. #
  424. # Specify the default null expression behaviour for providers using the MDQuerySpec.
  425. #
  426. mdx.mdqs.NullExpressionBehavior=PPYBehavior
  427. # Indicates if this provider adds an implicit NON EMPTY to each MDX edge.
  428. #
  429. mdx.suppression.DatasourceAppliesImplicitNonEmpty=false
  430. #
  431. # Does the provider support caching of named sets between queries in the local MDX engine.
  432. #
  433. mdx.support.namedSetCaching=false
  434. # If true, arithmetic operations use an optimized algorithm that takes advantage of the null behavior defined
  435. # If false, algorithm used for arithmetic operations is the same regardless of the null behavior
  436. enableArithmeticOperationsSparseProcessing=true
  437. #
  438. # Specify whether or not the provider requires the DefaultMember to be transformed into a NoMember.
  439. #
  440. mdx.useNoMemberDefaultMember=false