CSummarize.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  1. /****************************************************************
  2. ** Licensed Materials - Property of IBM
  3. **
  4. ** BI and PM: qs
  5. **
  6. ** (C) Copyright IBM Corp. 2001, 2015
  7. **
  8. ** US Government Users Restricted Rights - Use, duplication or
  9. ** disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  10. *****************************************************************/
  11. // Copyright (C) 2008 Cognos ULC, an IBM Company. All Rights Reserved.
  12. // Cognos and the Cognos logo are trademarks of Cognos ULC (formerly Cognos Incorporated) in the United States and/or other countries. IBM and the IBM logo are trademarks of International Business Machines Corporation in the United States, or other countries, or both. Other company, product, or service names may be trademarks or service marks of others.
  13. function CSummarize()
  14. {
  15. this.m_bFeatureRequiresQualityOfService = true;
  16. };
  17. CSummarize.prototype = new AFeatureObject();
  18. CSummarize.prototype.setup = function (aFeatureParams)
  19. {
  20. if (typeof aFeatureParams != "undefined" && aFeatureParams instanceof Array && aFeatureParams.length > 0)
  21. {
  22. if (aFeatureParams[0] == "default")
  23. {
  24. defaultSummary();
  25. }
  26. else if (aFeatureParams[0] == "summarize")
  27. {
  28. summarize(aFeatureParams[1]);
  29. }
  30. }
  31. };
  32. function defaultSummary()
  33. {
  34. cfgSet("LAST_DIALOG", "summarize");
  35. if (validateSummarization() != "error")
  36. {
  37. doSummary("default", "mixed");
  38. }
  39. };
  40. function validateSummarization()
  41. {
  42. var oMQMgr = goApplicationManager.getMiniQueryManager();
  43. var numSelCols = cfgSize("SelColumns");
  44. if (numSelCols == 0)
  45. {
  46. dlgShowMessage("SUMMARY_TITLE", "", "SUMMARY_NO_SELECTION");
  47. return "error";
  48. }
  49. var i;
  50. var bCalcSel = false;
  51. var bNonCalcSel = false;
  52. var selType = "";
  53. for (i = 0; i < numSelCols; i++)
  54. {
  55. var sel = cfgGetAt("SelColumns", i);
  56. var isMeasure = oMQMgr.isMeasure(sel);
  57. var bIsFakeMeasure = oMQMgr.isFakeMeasure(sel);
  58. if (oMQMgr.isReportExpression(sel))
  59. {
  60. selType = "reportExpression";
  61. break;
  62. }
  63. else if (isMeasure && !bIsFakeMeasure && (selType == "" || selType == "measuresOnly"))
  64. {
  65. selType = "measuresOnly";
  66. }
  67. else if ((!isMeasure || bIsFakeMeasure) && (selType == "" || selType == "nonMeasuresOnly"))
  68. {
  69. selType = "nonMeasuresOnly";
  70. }
  71. else
  72. {
  73. selType = "mixed";
  74. }
  75. if (oMQMgr.isCalculation(sel))
  76. {
  77. bCalcSel = true;
  78. if (bNonCalcSel)
  79. {
  80. break;
  81. }
  82. if(isMeasure == false && (oMQMgr.getColumnRole(sel) === MINI_QUERY_GROUP_SECTION || oMQMgr.getColumnRole(sel) === MINI_QUERY_GROUP_LIST))
  83. {
  84. selType = "calcGroup"
  85. break;
  86. }
  87. }
  88. else
  89. {
  90. bNonCalcSel = true;
  91. if (bCalcSel)
  92. {
  93. break;
  94. }
  95. }
  96. }
  97. if (selType == "reportExpression")
  98. {
  99. dlgShowMessage("SUMMARY_TITLE", "", "SUMMARY_INVALID_SELECTION");
  100. return "error";
  101. }
  102. else if (selType == "calcGroup")
  103. {
  104. dlgShowMessage("SUMMARY_TITLE", "", "SUMMARY_INVALID_CALC_SELECTION");
  105. return "error";
  106. }
  107. if (bCalcSel && bNonCalcSel)
  108. {
  109. dlgShowMessage("SUMMARY_TITLE", "", "SUMMARY_INVALID_CALC_NONCALC_SELECTION");
  110. return "error";
  111. }
  112. if (oMQMgr.hasPivottedColumns() && ((selType == "nonMeasuresOnly") || (selType == "mixed")))
  113. {
  114. for (i = 0; i < numSelCols; i++)
  115. {
  116. var sel = cfgGetAt("SelColumns", i);
  117. if (oMQMgr.isMeasure(sel) === false && oMQMgr.isFakeMeasure(sel) === false)
  118. {
  119. dlgShowMessage("SUMMARY_TITLE", "", "SUMMARY_XTAB_NONMEASURE");
  120. return "error";
  121. }
  122. }
  123. }
  124. if (!checkForValidSelection(true,true))
  125. {
  126. return "error";
  127. }
  128. return selType;
  129. };
  130. function summarize(bAdv, footerState)
  131. {
  132. setupSummarize(bAdv, footerState);
  133. };
  134. function setupSummarize(bAdv, footerState)
  135. {
  136. var oMQMgr = goApplicationManager.getMiniQueryManager();
  137. cfgSet("LAST_DIALOG", "summarize");
  138. var selType = validateSummarization();
  139. if (selType == "error")
  140. {
  141. return;
  142. }
  143. var bCalcSel = isCalcColSel();
  144. dlgReset();
  145. dlgGlobalReset();
  146. if (bCalcSel)
  147. {
  148. dlgSetParm("m", "/" + qs_dir + "/calculationSummary.xts");
  149. }
  150. else
  151. {
  152. dlgSetParm("m", "/" + qs_dir + "/summary.xts");
  153. }
  154. var bIsHardSumCount = false;
  155. var bIsHardDetailCount = false;
  156. for (var idxCt = 0; idxCt < cfgSize("SelColumns"); idxCt++)
  157. {
  158. if (oMQMgr.getSummaryAggregate(cfgGetAt("SelColumns", idxCt)) == "count")
  159. {
  160. bIsHardSumCount = true;
  161. }
  162. if (oMQMgr.getDetailAggregate(cfgGetAt("SelColumns", idxCt)) == "count")
  163. {
  164. bIsHardDetailCount = true;
  165. }
  166. }
  167. var sSummAggType = getAggType("Summary", selType);
  168. if (sSummAggType == "count" && selType == "nonMeasuresOnly" && !bIsHardSumCount)
  169. {
  170. sSummAggType = "countDistinct";
  171. }
  172. var sDetailAggType = getAggType("Detail", selType);
  173. if (sDetailAggType == "count" && selType == "nonMeasuresOnly" && !bIsHardDetailCount)
  174. {
  175. sDetailAggType = "countDistinct";
  176. }
  177. if (sDetailAggType == "none" && selType != "nonMeasuresOnly" && bAdv == true)
  178. {
  179. sDetailAggType = "automatic";
  180. }
  181. dlgGlobalSetParm("xxCurrentSummaryAgg", sSummAggType);
  182. dlgGlobalSetParm("xxCurrentDetailAgg", sDetailAggType);
  183. if (!checkCalcFunctionAgainstDB("CAN_USE_CELL_AGGREGATION"))
  184. {
  185. dlgSetParm("CanUseCellAggregation", false);
  186. dlgGlobalSetParm("CanUseCellAggregation", false);
  187. }
  188. else
  189. {
  190. dlgSetParm("CanUseCellAggregation", true);
  191. dlgGlobalSetParm("CanUseCellAggregation", true);
  192. }
  193. var summSelType = getSummarySelectionType(false);
  194. dlgGlobalSetParm("xxColType", summSelType);
  195. dlgSetParm("xxColType", summSelType);
  196. dlgGlobalSetParm("xxIsMeasure", selType);
  197. var semiAdditive = oMQMgr.getSemiAdditive(cfgGetAt("SelColumns", 0));
  198. if ( (semiAdditive === true) ||
  199. (typeof oLimitedDataPreference === "object" &&
  200. oLimitedDataPreference.getProperty("gsUseModelAggr") === true) )
  201. {
  202. dlgGlobalSetParm("xxSemiAdditive", true);
  203. if (oMQMgr.getSummaryAggregate(cfgGetAt("SelColumns", 0)) == "default")
  204. {
  205. dlgGlobalSetParm("xxCurrentSummaryAgg", "automatic");
  206. dlgGlobalSetParm("xxCurrentDetailAgg", "automatic");
  207. }
  208. }
  209. else
  210. {
  211. dlgGlobalSetParm("xxSemiAdditive", false);
  212. }
  213. populateDetailAggTypeOptions();
  214. populateSummaryAggTypeOptions();
  215. if (dlgGlobalGetParm("xxCurrentSummaryAgg") == "mixed")
  216. {
  217. dlgGlobalSetParm("xxShowMixed", true);
  218. }
  219. if (footerState != null)
  220. {
  221. if (footerState == "count" && selType == "nonMeasuresOnly" && !bIsHardSumCount)
  222. {
  223. footerState = "countDistinct";
  224. }
  225. dlgGlobalSetParm("xxCurrentSummaryAgg", footerState);
  226. }
  227. for (var i = 0; i < cfgSize("SelColumns"); i++)
  228. {
  229. var colIdx = cfgGetAt("SelColumns", i);
  230. if (oMQMgr.isMeasure(colIdx) === false && (oMQMgr.getColumnRole(colIdx) === MINI_QUERY_GROUP_SECTION || oMQMgr.getColumnRole(colIdx) === MINI_QUERY_GROUP_LIST))
  231. {
  232. dlgGlobalSetParm("xxDisableAdvLink", true);
  233. dlgSetParm("xxSummaryDlgAdvanced", false);
  234. dlgSubmit();
  235. return;
  236. }
  237. }
  238. dlgSetParm("xxSummaryDlgAdvanced", bAdv);
  239. dlgSubmit();
  240. };
  241. function summarizeNonMeasure(dAgg)
  242. {
  243. dlgReset();
  244. dlgGlobalReset();
  245. if (isCalcColSel())
  246. dlgSetParm("m", "/" + qs_dir + "/calculationSummary.xts");
  247. else
  248. dlgSetParm("m", "/" + qs_dir + "/summary.xts");
  249. dlgGlobalSetParm("xxCurrentDetailAgg", dAgg);
  250. dlgSetParm("xxSummaryDlgAdvanced", true);
  251. dlgGlobalSetParm("xxIsMeasure", "nonMeasuresOnly");
  252. if (dAgg == "count" || dAgg == "countDistinct")
  253. {
  254. dlgGlobalSetParm("xxColType", "numeric");
  255. dlgGlobalSetParm("xxCurrentSummaryAgg", "total");
  256. }
  257. else if (dAgg == "none")
  258. {
  259. var summSelType = getSummarySelectionType(false);
  260. dlgGlobalSetParm("xxColType", summSelType);
  261. dlgSetParm("xxColType", summSelType);
  262. dlgGlobalSetParm("xxCurrentSummaryAgg", "none");
  263. }
  264. else
  265. {
  266. var summSelType = getSummarySelectionType(false);
  267. dlgGlobalSetParm("xxColType", summSelType);
  268. dlgSetParm("xxColType", summSelType);
  269. dlgGlobalSetParm("xxCurrentSummaryAgg", "none");
  270. }
  271. if (!checkCalcFunctionAgainstDB("CAN_USE_CELL_AGGREGATION"))
  272. {
  273. dlgSetParm("CanUseCellAggregation", false);
  274. dlgGlobalSetParm("CanUseCellAggregation", false);
  275. }
  276. else
  277. {
  278. dlgSetParm("CanUseCellAggregation", true);
  279. dlgGlobalSetParm("CanUseCellAggregation", true);
  280. }
  281. populateDetailAggTypeOptions();
  282. populateSummaryAggTypeOptions();
  283. dlgSubmit();
  284. };
  285. function getSummarySelectionType(bUseOldType)
  286. {
  287. var selType = "other";
  288. if (selectionIsInterval(bUseOldType))
  289. selType = "interval"
  290. else if (selectionIsDateType(bUseOldType))
  291. selType = "datetime";
  292. else if (selectionIsNumeric(bUseOldType))
  293. selType = "numeric";
  294. return selType;
  295. };
  296. function isCalcColSel()
  297. {
  298. var numSelCols = cfgSize("SelColumns");
  299. for (var i=0; i < numSelCols; i++)
  300. {
  301. if (goApplicationManager.getMiniQueryManager().isCalculation(cfgGetAt("SelColumns", i)))
  302. {
  303. return true;
  304. }
  305. }
  306. return false;
  307. };
  308. function populateDetailAggTypeOptions()
  309. {
  310. var bIsAutomaticSet = false;
  311. var detailAggTypeOptions = new Array();
  312. if ((dlgGlobalGetParm("xxIsMeasure") == 'measuresOnly') || (isCalcColSel() && (dlgGlobalGetParm("xxColType") == "numeric")))
  313. {
  314. if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_TOTAL"))
  315. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_TOTAL"], "total");
  316. if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_AVERAGE"))
  317. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AVERAGE"], "average");
  318. if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_MAXIMUM"))
  319. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MAXIMUM"], "maximum");
  320. if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_MINIMUM"))
  321. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MINIMUM"], "minimum");
  322. if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_MEDIAN"))
  323. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MEDIAN"], "median");
  324. if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_STANDARD_DEVIATION"))
  325. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_STANDARD_DEVIATION"], "standardDeviation");
  326. if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_VARIANCE"))
  327. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_VARIANCE"], "variance");
  328. setupCountAndCountDistinct(detailAggTypeOptions);
  329. if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_CALCULATED"))
  330. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_CALCULATED"], "calculated");
  331. if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_AUTOMATIC"))
  332. {
  333. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AUTOMATIC"], "automatic");
  334. bIsAutomaticSet = true;
  335. }
  336. }
  337. else
  338. {
  339. setupCountAndCountDistinct(detailAggTypeOptions);
  340. }
  341. if (dlgGlobalGetParm("xxSemiAdditive") == true)
  342. {
  343. if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_AUTOMATIC") && !bIsAutomaticSet)
  344. {
  345. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AUTOMATIC"], "automatic");
  346. bIsAutomaticSet = true;
  347. }
  348. }
  349. if (dlgGlobalGetParm("xxIsMeasure") == 'nonMeasuresOnly')
  350. {
  351. detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_NOSUMMARY"], "none");
  352. }
  353. dlgGlobalSetParm("xxDetailAggTypeOptions", detailAggTypeOptions);
  354. };
  355. function populateSummaryAggTypeOptions()
  356. {
  357. var bIsAutomaticSet = false;
  358. var summaryAggTypeOptions = new Array();
  359. if (dlgGlobalGetParm("xxColType") == "datetime")
  360. {
  361. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_MAXIMUM"))
  362. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_LATEST"], "maximum");
  363. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_MINIMUM"))
  364. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_EARLIEST"], "minimum");
  365. }
  366. if ((dlgGlobalGetParm("xxColType") == "numeric") || (dlgGlobalGetParm("xxColType") == "interval"))
  367. {
  368. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_TOTAL"))
  369. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_TOTAL"], "total");
  370. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_AVERAGE"))
  371. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AVERAGE"], "average");
  372. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_MAXIMUM"))
  373. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MAXIMUM"], "maximum");
  374. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_MINIMUM"))
  375. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MINIMUM"], "minimum");
  376. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_MEDIAN"))
  377. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MEDIAN"], "median");
  378. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_STANDARD_DEVIATION"))
  379. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_STANDARD_DEVIATION"], "standardDeviation");
  380. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_VARIANCE"))
  381. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_VARIANCE"], "variance");
  382. setupCountAndCountDistinct(summaryAggTypeOptions);
  383. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_CALCULATED"))
  384. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_CALCULATED"], "calculated");
  385. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_AUTOMATIC"))
  386. {
  387. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AUTOMATIC"], "automatic");
  388. bIsAutomaticSet = true;
  389. }
  390. }
  391. else
  392. {
  393. setupCountAndCountDistinct(summaryAggTypeOptions);
  394. }
  395. if (dlgGlobalGetParm("xxSemiAdditive") == true)
  396. {
  397. if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_AUTOMATIC") && !bIsAutomaticSet)
  398. {
  399. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AUTOMATIC"], "automatic");
  400. bIsAutomaticSet = true;
  401. }
  402. }
  403. summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_NOSUMMARY"], "none");
  404. dlgGlobalSetParm("xxSummaryAggTypeOptions", summaryAggTypeOptions);
  405. };
  406. function getAggType(SummaryOrDetail, selType)
  407. {
  408. var oMQMgr = goApplicationManager.getMiniQueryManager();
  409. if (cfgSize("SelColumns") < 1 || selType == "mixed")
  410. {
  411. return "mixed";
  412. }
  413. var summSelType = getSummarySelectionType(false);
  414. var aggType= "";
  415. for (var i = 0; i < cfgSize("SelColumns"); i++)
  416. {
  417. if (!oMQMgr.isReportExpression(cfgGetAt("SelColumns", i)))
  418. {
  419. var nextAggType;
  420. if (SummaryOrDetail == "Summary")
  421. {
  422. nextAggType = oMQMgr.getSummaryAggregate(cfgGetAt("SelColumns", i));
  423. }
  424. else
  425. {
  426. nextAggType = oMQMgr.getDetailAggregate(cfgGetAt("SelColumns", i));
  427. }
  428. if (nextAggType == "default")
  429. {
  430. nextAggType = oMQMgr.getRegularAggregate(cfgGetAt("SelColumns", i));
  431. if (nextAggType == null || nextAggType == "" || nextAggType == "none")
  432. {
  433. if (summSelType == "numeric" || summSelType == "interval")
  434. {
  435. nextAggType = "total";
  436. }
  437. else
  438. {
  439. nextAggType = "count";
  440. }
  441. }
  442. }
  443. if (aggType == "")
  444. {
  445. aggType = nextAggType;
  446. }
  447. if (nextAggType != aggType)
  448. {
  449. return "mixed";
  450. }
  451. }
  452. }
  453. if (aggType == "")
  454. {
  455. return "mixed";
  456. }
  457. return aggType;
  458. };
  459. function doSummary(sumAggType, detailAggType)
  460. {
  461. var oMQMgr = goApplicationManager.getMiniQueryManager();
  462. var i;
  463. var command = "";
  464. var cmdArray = new Array();
  465. if (cfgSize("SelColumns") < 1)
  466. return;
  467. addColumnsForReselection();
  468. if (sumAggType == detailAggType && sumAggType != "mixed")
  469. {
  470. cmdArray[0] = "All";
  471. cmdArray[1] = sumAggType;
  472. for (i = 0; i < cfgSize("SelColumns"); i++)
  473. cmdArray[cmdArray.length] = escapeParam(oMQMgr.getColumnId(cfgGetAt("SelColumns", i)));
  474. command = createCommand("O","S",cmdArray);
  475. sendCmd(command, "", true);
  476. return;
  477. }
  478. if (detailAggType != "mixed")
  479. {
  480. cmdArray = new Array();
  481. cmdArray[0] = "Detail"
  482. cmdArray[1] = detailAggType;
  483. for (i = 0; i < cfgSize("SelColumns"); i++)
  484. cmdArray[cmdArray.length] = escapeParam(oMQMgr.getColumnId(cfgGetAt("SelColumns", i)));
  485. command = createCommand("O","S", cmdArray);
  486. }
  487. if (sumAggType != "mixed")
  488. {
  489. cmdArray = new Array();
  490. cmdArray[0] = "Footer"
  491. cmdArray[1] = sumAggType;
  492. for (i = 0; i < cfgSize("SelColumns"); i++)
  493. cmdArray[cmdArray.length] = escapeParam(oMQMgr.getColumnId(cfgGetAt("SelColumns", i)));
  494. if (detailAggType == "mixed")
  495. command = createCommand ("O","S", cmdArray);
  496. else
  497. command += ";" + createCommand ("O","S", cmdArray);
  498. }
  499. if (command != "")
  500. sendCmd(command, "", true);
  501. hideDialogFrame();
  502. };
  503. function setupCountAndCountDistinct(aAggOptions)
  504. {
  505. var bIsRelational = isDetailFilterEnabled();
  506. var sColumnType = getSummaryColumnType();
  507. if (sColumnType !== "" && sColumnType != "mixed")
  508. {
  509. if ((bIsRelational && sColumnType != "measure") || (sColumnType != "attribute" && sColumnType != "measure"))
  510. {
  511. aAggOptions[aAggOptions.length] = new Option(summaryMsgStrings["SUMMARY_COUNT_DISTINCT"], "countDistinct");
  512. }
  513. if ((bIsRelational && sColumnType != "level" && sColumnType != "hierarchy") || sColumnType == "measure")
  514. {
  515. aAggOptions[aAggOptions.length] = new Option(summaryMsgStrings["SUMMARY_COUNT"], "count");
  516. }
  517. }
  518. };
  519. function getSummaryColumnType()
  520. {
  521. var sColumnType = "";
  522. var oMQMgr = goApplicationManager.getMiniQueryManager();
  523. var oCol = null;
  524. for (var idxCols = 0; idxCols < cfgSize("SelColumns"); idxCols++)
  525. {
  526. oCol = oMQMgr.getColumnFromParameter(cfgGetAt("SelColumns", idxCols));
  527. if (typeof oCol == "object" && oCol !== null)
  528. {
  529. if (sColumnType === "")
  530. {
  531. sColumnType = oCol.getAttribute("metadataType");
  532. if (! sColumnType)
  533. {
  534. sColumnType = "";
  535. }
  536. if (sColumnType.toLowerCase().indexOf("measure") > -1)
  537. {
  538. sColumnType = "measure";
  539. }
  540. }
  541. else if (sColumnType != oCol.getAttribute("metadataType"))
  542. {
  543. sColumnType = "mixed";
  544. break;
  545. }
  546. }
  547. }
  548. return sColumnType;
  549. };