public ActionResult ExecuteSubReport(SubReportParams  subReportParams)
        {
            var subReport = GetUserReport(subReportParams.SubReportId, GetLoggedUserId());

            var arguments = GetSubReportArguments(subReport, subReportParams);

            subReport.ExtraArguments = arguments;

            //Updating the last applied range date in case it comes from a SubReport Column Values
            SaveLastDateRangeInSession(subReportParams.BeginDate, subReportParams.EndDate);

            //Saving the reportID and args associated with it so they can be retrieved further on
            SaveObjectInSession(subReportParams.SubReportId, arguments);

            ViewBag.Reports = GetStandAloneUserReports(GetLoggedUserId());

            IEnumerable<ExpandoObject> data;

            subReport.FiltersData = GetFiltersData(subReportParams.SubReportId, out data, arguments);

            subReport.Data = data;

            //Defining numeric columns
            var numericColumns = GetNumericColumnsForReport(subReportParams.SubReportId);

            subReport.Columns.ForEach(col => col.IsNumeric = numericColumns.Contains(col.Name));

            //Saving last date range saved by the user
            var currentDateRange = GetLastDateRangeInSession();

            if (!currentDateRange.IsNull())
            {
                subReport.StartDate = currentDateRange.StartDate;
                subReport.EndDate = currentDateRange.EndDate;
            }

            return View("ReportViewer", subReport);
        }
        private List<Argument> GetSubReportArguments(UserReportViewModel subReport, SubReportParams subReportParams)
        {
            var predefinedFilters = subReport.PredefinedFilters;

            var argsResult = predefinedFilters.Where(pref => pref.Type == FilterType.Value).Select(predefinedFilter => new Argument(predefinedFilter.ParameterName, predefinedFilter.Value)).ToList();

            var indexArg = new Argument(subReportParams.IndexParamName, subReportParams.IndexParamValue);

            var columnNameFilter = predefinedFilters.FirstOrDefault(filter => filter.ColumnName == subReportParams.ColumnName);

            var columnNameArg = !columnNameFilter.IsNull() ? new Argument(columnNameFilter.ParameterName, subReportParams.ColumnValue) : null;

            argsResult.AddRange(new List<Argument> { indexArg, columnNameArg });

            return argsResult;
        }