コード例 #1
0
        public MakerPivotTable(DataTable dataTable, ConditionForMakingPivotTable condition)
        {
            _condition = ExpandOrderColumnsInConditionWithNewColumns(condition);

            _source = SetInternetTrafic(
                AddNewColumnsAtDataTable(dataTable, _condition)
                .SetColumnsOrder(condition.ColumnsCollectionAtRightOrder), _condition);
        }
コード例 #2
0
        /// <summary>
        /// Filter DataTable
        /// </summary>
        /// <param name="source">DataTable with Data</param>
        /// <returns></returns>
        public DataTable Filter(DataTable source, ConditionForMakingPivotTable condition)
        {
            DataTable result = source
                               .AsEnumerable()
                               .Where(myRow => myRow.Field <string>(condition.NameColumnWithFilteringService)
                                      .Contains(condition.FilteringService))
                               ?.CopyToDataTable();

            return(result);
        }
コード例 #3
0
        public ConditionForMakingPivotTable ExpandOrderColumnsInConditionWithNewColumns(ConditionForMakingPivotTable condition)
        {
            ConditionForMakingPivotTable result = condition;

            if (condition?.NameNewColumnWithSummary?.Length > 0 && condition?.NameNewColumnWithCount?.Length > 0)
            {
                string[] orderColumns = condition.ColumnsCollectionAtRightOrder
                                        .ExpandArray(condition.NameNewColumnWithSummary)
                                        .ExpandArray(condition.NameNewColumnWithCount);
                result.ColumnsCollectionAtRightOrder = orderColumns;
            }

            return(result);
        }
コード例 #4
0
        private DataTable AddNewColumnsAtDataTable(DataTable dataTable, ConditionForMakingPivotTable condition)
        {
            DataTable dt = dataTable.Copy();

            // DataColumn column =
            dt.Columns.Add(condition.NameNewColumnWithSummary, System.Type.GetType("System.Decimal"));
            dt.Columns.Add(condition.NameNewColumnWithCount, System.Type.GetType("System.Int32"));
            foreach (System.Data.DataColumn col in dt.Columns)
            {
                col.ReadOnly = false;
            }

            //column.Expression = $"{_condition.NameColumnWithFilteringServiceValue } * Quantity";
            dt.AcceptChanges();

            return(dt);
        }
コード例 #5
0
        public DataTable SetInternetTrafic(DataTable dataTable, ConditionForMakingPivotTable condition)
        {
            DataTable dt = dataTable.Copy();

            foreach (DataRow row in dt.Rows)
            {
                string cell = row[condition.NameColumnWithFilteringService]?.ToString()?.Trim()?.ToUpper();
                if (cell != null && cell.Contains(condition.FilteringService.ToUpper()))
                {
                    row[condition.NameNewColumnWithSummary] = row[condition.NameColumnWithFilteringServiceValue]?.ToString()?.ToInternetTrafic("Mb");             // ?? 0;
                    row[condition.NameNewColumnWithCount]   = row[condition.NameColumnWithFilteringServiceValue]?.ToString()?.ToInternetTrafic("Mb") > 0 ? 1 : 0; //только для тех у кого был трафик будет отличный от нуля результат
                }
                // иначе при генерации сводной таблицы в линк-запросе в MakePivot() будет ошибка (не обрабатывает данные)
                // или же предварительно перед MakePivot() выполнять фильтрование записей в Filter() - будут отсутствовать записи с отсутствующим значением, т.е. там где был не трафик, а звонки или смс
                else
                {
                    row[condition.NameNewColumnWithSummary] = 0;
                    row[condition.NameNewColumnWithCount]   = 0;
                }
            }
            dt.AcceptChanges();

            return(dt);
        }