private MdxAxis GetWrappedAxis(MdxAxis ax, IList<DrillActionContainer> actions) { MdxExpression axisExpression = ax.Expression; // 1. Если первым на оси стоит ключевое слово NON EMPTY то выражение формируем из его аргументов, а уже потом все это выражение обрамляем ключевым словом NON EMPTY // 2. Если запрос на оси обрамлен функцией HIERARCHIZE, то выражение формируем из ее аргумента, а уже потом все это выражение обрамляем функцией HIERARCHIZE /* * Флаг NonEmpty перенесен в MdxAxis. Проверок не требуется. * MdxNonEmptyExpression nonEmpty = ax.Expression as MdxNonEmptyExpression; if (actions != null && actions.Count > 0) { if (nonEmpty != null) { MdxExpression expression = nonEmpty.Expression; MdxFunctionExpression hierarchize = expression as MdxFunctionExpression; if (hierarchize != null && hierarchize.Name.ToLower() == "hierarchize" && hierarchize.Arguments.Count == 1) { expression = hierarchize.Arguments[0]; } axisExpression = new MdxNonEmptyExpression( new MdxFunctionExpression("HIERARCHIZE", new MdxExpression[] { GetWrappedExpression(expression, actions) })); } else { MdxExpression expression = ax.Expression; MdxFunctionExpression hierarchize = expression as MdxFunctionExpression; if (hierarchize != null && hierarchize.Name.ToLower() == "hierarchize" && hierarchize.Arguments.Count == 1) { expression = hierarchize.Arguments[0]; } axisExpression = new MdxFunctionExpression( "HIERARCHIZE", new MdxExpression[] { GetWrappedExpression(expression, actions) }); } } */ if (actions.Count > 0) { var expression = ax.Expression; var hierarchize = expression as MdxFunctionExpression; if (hierarchize != null && hierarchize.Name.ToLower() == "hierarchize" && hierarchize.Arguments.Count == 1) { expression = hierarchize.Arguments[0]; } axisExpression = new MdxFunctionExpression( "HIERARCHIZE", new MdxExpression[] { GetWrappedExpression(expression, actions) }); } // Возможность убрать пустые колонки /* if (nonEmpty == null && actions == History.CurrentHistoryItem.ColumnsActionChain && HideEmptyColumns) { axisExpression = new MdxNonEmptyExpression(axisExpression); } */ // Возможность убрать пустые строки /* if (nonEmpty == null && actions == History.CurrentHistoryItem.RowsActionChain && HideEmptyRows) { axisExpression = new MdxNonEmptyExpression(axisExpression); } */ if (History.CurrentHistoryItem.ColumnsActionChain.Equals(actions) && HideEmptyColumns) { ax.NonEmpty = true; } if (History.CurrentHistoryItem.RowsActionChain.Equals(actions) && HideEmptyRows) { ax.NonEmpty = true; } return new MdxAxis( ax.Name, axisExpression, ax.Having, ax.DimensionProperties ) { NonEmpty = ax.NonEmpty }; }
internal MdxAxis GetWrappedAxis(MdxAxis ax /*, Func<MdxObject, MdxActionContext, MdxObject> ConcretizeMdxObject */) { MdxExpression axisExpression = ax.Expression; // 1. Если первым на оси стоит ключевое слово NON EMPTY то выражение формируем из его аргументов, а уже потом все это выражение обрамляем ключевым словом NON EMPTY // 2. Если запрос на оси обрамлен функцией HIERARCHIZE, то выражение формируем из ее аргумента, а уже потом все это выражение обрамляем функцией HIERARCHIZE /* * Флаг NonEmpty перенесен в MdxAxis. Проверок не требуется. * MdxNonEmptyExpression nonEmpty = ax.Expression as MdxNonEmptyExpression; if (actions != null && actions.Count > 0) { if (nonEmpty != null) { MdxExpression expression = nonEmpty.Expression; MdxFunctionExpression hierarchize = expression as MdxFunctionExpression; if (hierarchize != null && hierarchize.Name.ToLower() == "hierarchize" && hierarchize.Arguments.Count == 1) { expression = hierarchize.Arguments[0]; } axisExpression = new MdxNonEmptyExpression( new MdxFunctionExpression("HIERARCHIZE", new MdxExpression[] { GetWrappedExpression(expression, actions) })); } else { MdxExpression expression = ax.Expression; MdxFunctionExpression hierarchize = expression as MdxFunctionExpression; if (hierarchize != null && hierarchize.Name.ToLower() == "hierarchize" && hierarchize.Arguments.Count == 1) { expression = hierarchize.Arguments[0]; } axisExpression = new MdxFunctionExpression( "HIERARCHIZE", new MdxExpression[] { GetWrappedExpression(expression, actions) }); } } */ if (Actions.Count > 0) { var expression = ax.Expression; axisExpression = this.GetWrappedExpression(expression/*, ConcretizeMdxObject*/); } axisExpression = SortExpression(axisExpression, MeasuresSort); return new MdxAxis( ax.Name, axisExpression, ax.Having, ax.DimensionProperties ) { // Возможность убрать пустые колонки NonEmpty = HideEmpty }; }