Repository: kylin Updated Branches: refs/heads/master c0c96bba0 -> fd4a009d4
KYLIN-2604 Use global dict as the default encoding for precise distinct count in web Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/fd4a009d Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/fd4a009d Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/fd4a009d Branch: refs/heads/master Commit: fd4a009d4d0239ed7d20ae872c8725bb5422992c Parents: c0c96bb Author: kangkaisen <kangkai...@live.com> Authored: Thu Jul 6 15:21:55 2017 +0800 Committer: chenzhx <346839...@qq.com> Committed: Sat Jul 22 22:24:23 2017 +0800 ---------------------------------------------------------------------- webapp/app/js/controllers/cubeAdvanceSetting.js | 5 -- webapp/app/js/controllers/cubeEdit.js | 52 ++++++++++++++++++++ webapp/app/js/controllers/cubeMeasures.js | 7 +++ 3 files changed, 59 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/fd4a009d/webapp/app/js/controllers/cubeAdvanceSetting.js ---------------------------------------------------------------------- diff --git a/webapp/app/js/controllers/cubeAdvanceSetting.js b/webapp/app/js/controllers/cubeAdvanceSetting.js index 7d375da..8041a12 100644 --- a/webapp/app/js/controllers/cubeAdvanceSetting.js +++ b/webapp/app/js/controllers/cubeAdvanceSetting.js @@ -187,7 +187,6 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function ($scope, $modal,cubeConfi }; $scope.initUpdateDictionariesStatus(); - $scope.addNewDictionaries = function (dictionaries, index) { if(dictionaries&&index>=0){ $scope.updateDictionariesStatus.isEdit = true; @@ -207,10 +206,6 @@ KylinApp.controller('CubeAdvanceSettingCtrl', function ($scope, $modal,cubeConfi }; $scope.saveNewDictionaries = function (){ - if(!$scope.cubeMetaFrame.dictionaries){ - $scope.cubeMetaFrame.dictionaries=[]; - } - if($scope.updateDictionariesStatus.isEdit == true) { if ($scope.cubeMetaFrame.dictionaries[$scope.updateDictionariesStatus.editIndex].column != $scope.newDictionaries.column) { if(!$scope.checkColumn()){ http://git-wip-us.apache.org/repos/asf/kylin/blob/fd4a009d/webapp/app/js/controllers/cubeEdit.js ---------------------------------------------------------------------- diff --git a/webapp/app/js/controllers/cubeEdit.js b/webapp/app/js/controllers/cubeEdit.js index 0e5038e..5f78b61 100755 --- a/webapp/app/js/controllers/cubeEdit.js +++ b/webapp/app/js/controllers/cubeEdit.js @@ -721,7 +721,59 @@ KylinApp.controller('CubeEditCtrl', function ($scope, $q, $routeParams, $locatio } } + function reGenerateAdvancedDict () { + if (!$scope.cubeMetaFrame.dictionaries) { + $scope.cubeMetaFrame.dictionaries = []; + } + + var distinctMeasures = []; + + angular.forEach($scope.cubeMetaFrame.measures, function (measure, index) { + if (measure.function.expression === 'COUNT_DISTINCT' && measure.function.returntype === 'bitmap') { + var measureColumn = measure.function.parameter.value; + distinctMeasures.push(measureColumn); + //keep backward compatibility + distinctMeasures.push(VdmUtil.removeNameSpace(measureColumn)) + + var isColumnExit = false; + angular.forEach($scope.cubeMetaFrame.dictionaries, function (dictionaries) { + if (!isColumnExit) { + //keep backward compatibility + if (dictionaries.column == measureColumn || dictionaries.column == VdmUtil.removeNameSpace(measureColumn)) + isColumnExit = true; + } + }); + + if (!isColumnExit) { + var dict = CubeDescModel.createDictionaries(); + dict.column = measureColumn; + dict.builder = cubeConfig.buildDictionaries[0].value; + $scope.cubeMetaFrame.dictionaries.push(dict) + } + } + }); + + //get all reuse columns + var reuseColumns = []; + angular.forEach($scope.cubeMetaFrame.dictionaries, function (dict, index) { + if (dict.reuse != null && reuseColumns.indexOf(dict.reuse) === -1) { + reuseColumns.push(dict.reuse); + } + }); + //remove deprecated distinct measures + angular.forEach($scope.cubeMetaFrame.dictionaries, function (dict, index) { + if (distinctMeasures.indexOf(dict.column) === -1 && reuseColumns.indexOf(dict.column) === -1) { + $scope.cubeMetaFrame.dictionaries.splice(index, 1); + } + }); + } + + $scope.$on('MeasuresEdited', function (event) { + if ($scope.cubeMetaFrame) { + reGenerateAdvancedDict(); + } + }); $scope.$on('DimensionsEdited', function (event) { if ($scope.cubeMetaFrame) { http://git-wip-us.apache.org/repos/asf/kylin/blob/fd4a009d/webapp/app/js/controllers/cubeMeasures.js ---------------------------------------------------------------------- diff --git a/webapp/app/js/controllers/cubeMeasures.js b/webapp/app/js/controllers/cubeMeasures.js index 2b86683..8b0271c 100644 --- a/webapp/app/js/controllers/cubeMeasures.js +++ b/webapp/app/js/controllers/cubeMeasures.js @@ -422,6 +422,13 @@ KylinApp.controller('CubeMeasuresCtrl', function ($scope, $modal,MetaModel,cubes } } + if ($scope.state.mode == 'edit') { + $scope.$on('$destroy', function () { + // emit measures edit event in order to re-generate advanced dict. + $scope.$emit('MeasuresEdited'); + }); + } + }); var NextParameterModalCtrl = function ($scope, scope,para,$modalInstance,cubeConfig, CubeService, MessageService, $location, SweetAlert,ProjectModel, loadingRequest,ModelService) {