123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614 |
- function CSummarize()
- {
- this.m_bFeatureRequiresQualityOfService = true;
- };
- CSummarize.prototype = new AFeatureObject();
- CSummarize.prototype.setup = function (aFeatureParams)
- {
- if (typeof aFeatureParams != "undefined" && aFeatureParams instanceof Array && aFeatureParams.length > 0)
- {
- if (aFeatureParams[0] == "default")
- {
- defaultSummary();
- }
- else if (aFeatureParams[0] == "summarize")
- {
- summarize(aFeatureParams[1]);
- }
- }
- };
- function defaultSummary()
- {
- cfgSet("LAST_DIALOG", "summarize");
- if (validateSummarization() != "error")
- {
- doSummary("default", "mixed");
- }
- };
- function validateSummarization()
- {
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- var numSelCols = cfgSize("SelColumns");
- if (numSelCols == 0)
- {
- dlgShowMessage("SUMMARY_TITLE", "", "SUMMARY_NO_SELECTION");
- return "error";
- }
- var i;
- var bCalcSel = false;
- var bNonCalcSel = false;
- var selType = "";
- for (i = 0; i < numSelCols; i++)
- {
- var sel = cfgGetAt("SelColumns", i);
- var isMeasure = oMQMgr.isMeasure(sel);
- var bIsFakeMeasure = oMQMgr.isFakeMeasure(sel);
- if (oMQMgr.isReportExpression(sel))
- {
- selType = "reportExpression";
- break;
- }
- else if (isMeasure && !bIsFakeMeasure && (selType == "" || selType == "measuresOnly"))
- {
- selType = "measuresOnly";
- }
- else if ((!isMeasure || bIsFakeMeasure) && (selType == "" || selType == "nonMeasuresOnly"))
- {
- selType = "nonMeasuresOnly";
- }
- else
- {
- selType = "mixed";
- }
- if (oMQMgr.isCalculation(sel))
- {
- bCalcSel = true;
- if (bNonCalcSel)
- {
- break;
- }
- if(isMeasure == false && (oMQMgr.getColumnRole(sel) === MINI_QUERY_GROUP_SECTION || oMQMgr.getColumnRole(sel) === MINI_QUERY_GROUP_LIST))
- {
- selType = "calcGroup"
- break;
- }
- }
- else
- {
- bNonCalcSel = true;
- if (bCalcSel)
- {
- break;
- }
- }
- }
- if (selType == "reportExpression")
- {
- dlgShowMessage("SUMMARY_TITLE", "", "SUMMARY_INVALID_SELECTION");
- return "error";
- }
- else if (selType == "calcGroup")
- {
- dlgShowMessage("SUMMARY_TITLE", "", "SUMMARY_INVALID_CALC_SELECTION");
- return "error";
- }
- if (bCalcSel && bNonCalcSel)
- {
- dlgShowMessage("SUMMARY_TITLE", "", "SUMMARY_INVALID_CALC_NONCALC_SELECTION");
- return "error";
- }
- if (oMQMgr.hasPivottedColumns() && ((selType == "nonMeasuresOnly") || (selType == "mixed")))
- {
- for (i = 0; i < numSelCols; i++)
- {
- var sel = cfgGetAt("SelColumns", i);
- if (oMQMgr.isMeasure(sel) === false && oMQMgr.isFakeMeasure(sel) === false)
- {
- dlgShowMessage("SUMMARY_TITLE", "", "SUMMARY_XTAB_NONMEASURE");
- return "error";
- }
- }
- }
- if (!checkForValidSelection(true,true))
- {
- return "error";
- }
- return selType;
- };
- function summarize(bAdv, footerState)
- {
- setupSummarize(bAdv, footerState);
- };
- function setupSummarize(bAdv, footerState)
- {
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- cfgSet("LAST_DIALOG", "summarize");
- var selType = validateSummarization();
- if (selType == "error")
- {
- return;
- }
- var bCalcSel = isCalcColSel();
- dlgReset();
- dlgGlobalReset();
- if (bCalcSel)
- {
- dlgSetParm("m", "/" + qs_dir + "/calculationSummary.xts");
- }
- else
- {
- dlgSetParm("m", "/" + qs_dir + "/summary.xts");
- }
- var bIsHardSumCount = false;
- var bIsHardDetailCount = false;
- for (var idxCt = 0; idxCt < cfgSize("SelColumns"); idxCt++)
- {
- if (oMQMgr.getSummaryAggregate(cfgGetAt("SelColumns", idxCt)) == "count")
- {
- bIsHardSumCount = true;
- }
- if (oMQMgr.getDetailAggregate(cfgGetAt("SelColumns", idxCt)) == "count")
- {
- bIsHardDetailCount = true;
- }
- }
- var sSummAggType = getAggType("Summary", selType);
- if (sSummAggType == "count" && selType == "nonMeasuresOnly" && !bIsHardSumCount)
- {
- sSummAggType = "countDistinct";
- }
- var sDetailAggType = getAggType("Detail", selType);
- if (sDetailAggType == "count" && selType == "nonMeasuresOnly" && !bIsHardDetailCount)
- {
- sDetailAggType = "countDistinct";
- }
- if (sDetailAggType == "none" && selType != "nonMeasuresOnly" && bAdv == true)
- {
-
- sDetailAggType = "automatic";
- }
- dlgGlobalSetParm("xxCurrentSummaryAgg", sSummAggType);
- dlgGlobalSetParm("xxCurrentDetailAgg", sDetailAggType);
- if (!checkCalcFunctionAgainstDB("CAN_USE_CELL_AGGREGATION"))
- {
- dlgSetParm("CanUseCellAggregation", false);
- dlgGlobalSetParm("CanUseCellAggregation", false);
- }
- else
- {
- dlgSetParm("CanUseCellAggregation", true);
- dlgGlobalSetParm("CanUseCellAggregation", true);
- }
- var summSelType = getSummarySelectionType(false);
- dlgGlobalSetParm("xxColType", summSelType);
- dlgSetParm("xxColType", summSelType);
- dlgGlobalSetParm("xxIsMeasure", selType);
- var semiAdditive = oMQMgr.getSemiAdditive(cfgGetAt("SelColumns", 0));
- if ( (semiAdditive === true) ||
- (typeof oLimitedDataPreference === "object" &&
- oLimitedDataPreference.getProperty("gsUseModelAggr") === true) )
-
- {
- dlgGlobalSetParm("xxSemiAdditive", true);
-
-
- if (oMQMgr.getSummaryAggregate(cfgGetAt("SelColumns", 0)) == "default")
- {
- dlgGlobalSetParm("xxCurrentSummaryAgg", "automatic");
- dlgGlobalSetParm("xxCurrentDetailAgg", "automatic");
- }
- }
- else
- {
- dlgGlobalSetParm("xxSemiAdditive", false);
- }
- populateDetailAggTypeOptions();
- populateSummaryAggTypeOptions();
- if (dlgGlobalGetParm("xxCurrentSummaryAgg") == "mixed")
- {
- dlgGlobalSetParm("xxShowMixed", true);
- }
- if (footerState != null)
- {
- if (footerState == "count" && selType == "nonMeasuresOnly" && !bIsHardSumCount)
- {
- footerState = "countDistinct";
- }
- dlgGlobalSetParm("xxCurrentSummaryAgg", footerState);
- }
- for (var i = 0; i < cfgSize("SelColumns"); i++)
- {
-
-
-
- var colIdx = cfgGetAt("SelColumns", i);
- if (oMQMgr.isMeasure(colIdx) === false && (oMQMgr.getColumnRole(colIdx) === MINI_QUERY_GROUP_SECTION || oMQMgr.getColumnRole(colIdx) === MINI_QUERY_GROUP_LIST))
- {
- dlgGlobalSetParm("xxDisableAdvLink", true);
- dlgSetParm("xxSummaryDlgAdvanced", false);
- dlgSubmit();
- return;
- }
- }
- dlgSetParm("xxSummaryDlgAdvanced", bAdv);
- dlgSubmit();
- };
- function summarizeNonMeasure(dAgg)
- {
- dlgReset();
- dlgGlobalReset();
- if (isCalcColSel())
- dlgSetParm("m", "/" + qs_dir + "/calculationSummary.xts");
- else
- dlgSetParm("m", "/" + qs_dir + "/summary.xts");
- dlgGlobalSetParm("xxCurrentDetailAgg", dAgg);
- dlgSetParm("xxSummaryDlgAdvanced", true);
- dlgGlobalSetParm("xxIsMeasure", "nonMeasuresOnly");
- if (dAgg == "count" || dAgg == "countDistinct")
- {
- dlgGlobalSetParm("xxColType", "numeric");
- dlgGlobalSetParm("xxCurrentSummaryAgg", "total");
- }
- else if (dAgg == "none")
- {
- var summSelType = getSummarySelectionType(false);
- dlgGlobalSetParm("xxColType", summSelType);
- dlgSetParm("xxColType", summSelType);
- dlgGlobalSetParm("xxCurrentSummaryAgg", "none");
- }
- else
- {
- var summSelType = getSummarySelectionType(false);
- dlgGlobalSetParm("xxColType", summSelType);
- dlgSetParm("xxColType", summSelType);
- dlgGlobalSetParm("xxCurrentSummaryAgg", "none");
- }
- if (!checkCalcFunctionAgainstDB("CAN_USE_CELL_AGGREGATION"))
- {
- dlgSetParm("CanUseCellAggregation", false);
- dlgGlobalSetParm("CanUseCellAggregation", false);
- }
- else
- {
- dlgSetParm("CanUseCellAggregation", true);
- dlgGlobalSetParm("CanUseCellAggregation", true);
- }
- populateDetailAggTypeOptions();
- populateSummaryAggTypeOptions();
- dlgSubmit();
- };
- function getSummarySelectionType(bUseOldType)
- {
- var selType = "other";
- if (selectionIsInterval(bUseOldType))
- selType = "interval"
- else if (selectionIsDateType(bUseOldType))
- selType = "datetime";
- else if (selectionIsNumeric(bUseOldType))
- selType = "numeric";
- return selType;
- };
- function isCalcColSel()
- {
- var numSelCols = cfgSize("SelColumns");
- for (var i=0; i < numSelCols; i++)
- {
- if (goApplicationManager.getMiniQueryManager().isCalculation(cfgGetAt("SelColumns", i)))
- {
- return true;
- }
- }
- return false;
- };
- function populateDetailAggTypeOptions()
- {
- var bIsAutomaticSet = false;
-
- var detailAggTypeOptions = new Array();
- if ((dlgGlobalGetParm("xxIsMeasure") == 'measuresOnly') || (isCalcColSel() && (dlgGlobalGetParm("xxColType") == "numeric")))
- {
- if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_TOTAL"))
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_TOTAL"], "total");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_AVERAGE"))
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AVERAGE"], "average");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_MAXIMUM"))
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MAXIMUM"], "maximum");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_MINIMUM"))
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MINIMUM"], "minimum");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_MEDIAN"))
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MEDIAN"], "median");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_STANDARD_DEVIATION"))
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_STANDARD_DEVIATION"], "standardDeviation");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_VARIANCE"))
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_VARIANCE"], "variance");
- setupCountAndCountDistinct(detailAggTypeOptions);
- if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_CALCULATED"))
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_CALCULATED"], "calculated");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_AUTOMATIC"))
- {
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AUTOMATIC"], "automatic");
- bIsAutomaticSet = true;
- }
- }
- else
- {
- setupCountAndCountDistinct(detailAggTypeOptions);
- }
- if (dlgGlobalGetParm("xxSemiAdditive") == true)
- {
- if (checkCalcFunctionAgainstDB("DATA_ITEM_AGGREGATE_AUTOMATIC") && !bIsAutomaticSet)
- {
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AUTOMATIC"], "automatic");
- bIsAutomaticSet = true;
- }
- }
- if (dlgGlobalGetParm("xxIsMeasure") == 'nonMeasuresOnly')
- {
- detailAggTypeOptions[detailAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_NOSUMMARY"], "none");
- }
- dlgGlobalSetParm("xxDetailAggTypeOptions", detailAggTypeOptions);
- };
- function populateSummaryAggTypeOptions()
- {
- var bIsAutomaticSet = false;
-
- var summaryAggTypeOptions = new Array();
- if (dlgGlobalGetParm("xxColType") == "datetime")
- {
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_MAXIMUM"))
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_LATEST"], "maximum");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_MINIMUM"))
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_EARLIEST"], "minimum");
- }
- if ((dlgGlobalGetParm("xxColType") == "numeric") || (dlgGlobalGetParm("xxColType") == "interval"))
- {
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_TOTAL"))
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_TOTAL"], "total");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_AVERAGE"))
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AVERAGE"], "average");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_MAXIMUM"))
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MAXIMUM"], "maximum");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_MINIMUM"))
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MINIMUM"], "minimum");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_MEDIAN"))
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_MEDIAN"], "median");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_STANDARD_DEVIATION"))
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_STANDARD_DEVIATION"], "standardDeviation");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_VARIANCE"))
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_VARIANCE"], "variance");
- setupCountAndCountDistinct(summaryAggTypeOptions);
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_CALCULATED"))
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_CALCULATED"], "calculated");
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_AUTOMATIC"))
- {
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AUTOMATIC"], "automatic");
- bIsAutomaticSet = true;
- }
- }
- else
- {
- setupCountAndCountDistinct(summaryAggTypeOptions);
- }
- if (dlgGlobalGetParm("xxSemiAdditive") == true)
- {
- if (checkCalcFunctionAgainstDB("DATA_ITEM_ROLLUP_AGGREGATE_AUTOMATIC") && !bIsAutomaticSet)
- {
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_AUTOMATIC"], "automatic");
- bIsAutomaticSet = true;
- }
- }
- summaryAggTypeOptions[summaryAggTypeOptions.length] = new Option(summaryMsgStrings["SUMMARY_NOSUMMARY"], "none");
- dlgGlobalSetParm("xxSummaryAggTypeOptions", summaryAggTypeOptions);
- };
- function getAggType(SummaryOrDetail, selType)
- {
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- if (cfgSize("SelColumns") < 1 || selType == "mixed")
- {
- return "mixed";
- }
- var summSelType = getSummarySelectionType(false);
- var aggType= "";
- for (var i = 0; i < cfgSize("SelColumns"); i++)
- {
- if (!oMQMgr.isReportExpression(cfgGetAt("SelColumns", i)))
- {
- var nextAggType;
- if (SummaryOrDetail == "Summary")
- {
- nextAggType = oMQMgr.getSummaryAggregate(cfgGetAt("SelColumns", i));
- }
- else
- {
- nextAggType = oMQMgr.getDetailAggregate(cfgGetAt("SelColumns", i));
- }
- if (nextAggType == "default")
- {
- nextAggType = oMQMgr.getRegularAggregate(cfgGetAt("SelColumns", i));
- if (nextAggType == null || nextAggType == "" || nextAggType == "none")
- {
- if (summSelType == "numeric" || summSelType == "interval")
- {
- nextAggType = "total";
- }
- else
- {
- nextAggType = "count";
- }
- }
- }
- if (aggType == "")
- {
- aggType = nextAggType;
- }
- if (nextAggType != aggType)
- {
- return "mixed";
- }
- }
- }
- if (aggType == "")
- {
- return "mixed";
- }
- return aggType;
- };
- function doSummary(sumAggType, detailAggType)
- {
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- var i;
- var command = "";
- var cmdArray = new Array();
- if (cfgSize("SelColumns") < 1)
- return;
- addColumnsForReselection();
- if (sumAggType == detailAggType && sumAggType != "mixed")
- {
- cmdArray[0] = "All";
- cmdArray[1] = sumAggType;
- for (i = 0; i < cfgSize("SelColumns"); i++)
- cmdArray[cmdArray.length] = escapeParam(oMQMgr.getColumnId(cfgGetAt("SelColumns", i)));
- command = createCommand("O","S",cmdArray);
- sendCmd(command, "", true);
- return;
- }
- if (detailAggType != "mixed")
- {
- cmdArray = new Array();
- cmdArray[0] = "Detail"
- cmdArray[1] = detailAggType;
- for (i = 0; i < cfgSize("SelColumns"); i++)
- cmdArray[cmdArray.length] = escapeParam(oMQMgr.getColumnId(cfgGetAt("SelColumns", i)));
- command = createCommand("O","S", cmdArray);
- }
- if (sumAggType != "mixed")
- {
- cmdArray = new Array();
- cmdArray[0] = "Footer"
- cmdArray[1] = sumAggType;
- for (i = 0; i < cfgSize("SelColumns"); i++)
- cmdArray[cmdArray.length] = escapeParam(oMQMgr.getColumnId(cfgGetAt("SelColumns", i)));
- if (detailAggType == "mixed")
- command = createCommand ("O","S", cmdArray);
- else
- command += ";" + createCommand ("O","S", cmdArray);
- }
- if (command != "")
- sendCmd(command, "", true);
- hideDialogFrame();
- };
- function setupCountAndCountDistinct(aAggOptions)
- {
- var bIsRelational = isDetailFilterEnabled();
- var sColumnType = getSummaryColumnType();
- if (sColumnType !== "" && sColumnType != "mixed")
- {
- if ((bIsRelational && sColumnType != "measure") || (sColumnType != "attribute" && sColumnType != "measure"))
- {
- aAggOptions[aAggOptions.length] = new Option(summaryMsgStrings["SUMMARY_COUNT_DISTINCT"], "countDistinct");
- }
- if ((bIsRelational && sColumnType != "level" && sColumnType != "hierarchy") || sColumnType == "measure")
- {
- aAggOptions[aAggOptions.length] = new Option(summaryMsgStrings["SUMMARY_COUNT"], "count");
- }
- }
- };
- function getSummaryColumnType()
- {
- var sColumnType = "";
- var oMQMgr = goApplicationManager.getMiniQueryManager();
- var oCol = null;
- for (var idxCols = 0; idxCols < cfgSize("SelColumns"); idxCols++)
- {
- oCol = oMQMgr.getColumnFromParameter(cfgGetAt("SelColumns", idxCols));
- if (typeof oCol == "object" && oCol !== null)
- {
- if (sColumnType === "")
- {
- sColumnType = oCol.getAttribute("metadataType");
-
-
-
-
-
-
-
-
- if (! sColumnType)
- {
- sColumnType = "";
- }
-
- if (sColumnType.toLowerCase().indexOf("measure") > -1)
- {
- sColumnType = "measure";
- }
- }
- else if (sColumnType != oCol.getAttribute("metadataType"))
- {
- sColumnType = "mixed";
- break;
- }
- }
- }
- return sColumnType;
- };
|