Список используемых источников
Троэлсен Э. Язык программирование C# 2005 и платформа .NET 2.0. – М.: Вильямс, 2007. – 1168 c.
Мак-Дональд М., Шпушта М. Microsoft ASP.NET 2.0 с примерами на C# – М.: Вильямс, 2007. – 1408 c.
Малик С. Microsoft ADO.NET 2.0 – М.: Вильямс, 2007. – 560 c.
Виейра Р. Программирование баз данных Microsoft SQL Server 2005 – М.:Диалектика, 2007. – 832 c.
http://www.zedgraph.org
http://www.sourceforge.net/projects/zedgraph/
http://www.microsoft.com/downloads/details.aspx?FamilyId=7287252C-402E-4F72-97A5-E0FD290D4B76&displaylang=en
http://www.lowagie.com/iText/
http://www.itextsharp.sourceforge.net/
Lowagie B. iText in Action. Creating and Manipulating PDF – NY.:Manning, 2007. – 686 p.
http://msdn2.microsoft.com/en-us/library/aa213568(office.11).aspx
http://msdn2.microsoft.com/en-us/library/aa141155(office.10).aspx
Гражданский Кодекс Российской Федерации от 30.11.94 г. № 51-ФЗ. Ч. 1 // Российская газета №238-239 от 08.12.94 г.
Гражданский Кодекс Российской Федерации от 18.12.2006 г. № 230-ФЗ. Ч. 4 // Российская газета №289 от 22.12.2006 г.
ПРИЛОЖЕНИЕ А. Листинг кода приложения на примере реализации обработчика «сводные данные по исполнителям»
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.AnalysisServices.AdomdClient;
using System.Text;
using System.Web.UI.HtmlControls;
using System.Data;
using System.Collections;
using WebOLAP.Utils.Collection;
using Microsoft.Office.Interop.Owc11;
using System.Drawing;
using System.Security.Cryptography;
namespace WebOLAP
{
public partial class SymmeryByExecutive : System.Web.UI.Page
{
#region Members
/// <summary>
/// Список содержащий значения измерений
/// </summary>
List<DimentionItem> dimentionTable = new List<DimentionItem>();
#endregion
protected void Page_Load(object sender, EventArgs e)
{
// загружаем измерения куба
using (AdomdConnection conn = new AdomdConnection(@"Data Source=SOHATIK;Initial Catalog=FoodMart 2000;ConnectTo=8.0"))
{
// открываем соединение
conn.Open();
// выбираем куб
CubeDef mcube = conn.Cubes["SummeryByExecutive"];
// перебираем все измерения куба
foreach (Dimension dim in mcube.Dimensions)
{
if (!this.IsPostBack)
{
if (dim.Name != "Measures")
{
this.ddlAxisX.Items.Add(dim.Name);
this.ddlAxisY.Items.Add(dim.Name);
}
}
// перебираем значения измерений
foreach (Hierarchy h in dim.Hierarchies)
{
// просматриваем уровни иерархии
foreach (Level lv in h.Levels)
{
if (lv.LevelNumber == 0 && dim.Name != "Measures")
{
continue;
}
// заносим в хештайбл, для того чтобы можно было вывести во второй список
dimentionTable.Add(new DimentionItem(dim.Name, lv.Name, lv.UniqueName, false));
int counter = 10;
foreach (Member mem in lv.GetMembers())
{
counter--;
if (counter < 0)
{
break;
}
if (dim.Name == "Measures")
{
if (!this.IsPostBack)
{
this.ddlMeasures.Items.Add(mem.Name);
}
}
dimentionTable.Add(new DimentionItem(dim.Name, mem.Name, mem.UniqueName, true));
}
}
}
}
}
}
// Метод события при выборе измерения по оси Х
protected void ddlAxisX_SelectedIndexChanged(object sender, EventArgs e)
{
this.ddlAxisXHaracteries.Items.Clear();
foreach (DimentionItem dim in this.dimentionTable)
{
if (this.ddlAxisX.Text == dim.DimentionName)
{
this.ddlAxisXHaracteries.Items.Add(dim.MemberName);
}
}
}
/// Метод события при выборе измерения по оси Y
protected void ddlAxisY_SelectedIndexChanged(object sender, EventArgs e)
{
this.ddlAxisYHaracteries.Items.Clear();
foreach (DimentionItem dim in this.dimentionTable)
{
if (this.ddlAxisY.Text == dim.DimentionName)
{
this.ddlAxisYHaracteries.Items.Add(dim.MemberName);
}
}
}
/// Событие при нажатии на кнопку "Сформировать"
protected void btnGo_Click(object sender, EventArgs e)
{
#region Результат в виде таблицы
// ПРИМЕР ЗАПРОСА
//select [Год].[Год].Members on 0,
//[Вид вуза].[Название].Members on 1
//from SymmeryByRegionCube2
//where [Measures].[Финансирование]
// Найдем объекты описывающие измерения
DimentionItem dimAxisX = null;
DimentionItem dimAxisY = null;
DimentionItem dimMeasures = null;
foreach (DimentionItem dim in this.dimentionTable)
{
if (dim.DimentionName == this.ddlAxisX.Text && dim.MemberName == this.ddlAxisXHaracteries.Text)
{
dimAxisX = dim;
}
else if (dim.DimentionName == this.ddlAxisY.Text && dim.MemberName == this.ddlAxisYHaracteries.Text)
{
dimAxisY = dim;
}
else if (dim.DimentionName == "Measures" && dim.MemberName == this.ddlMeasures.Text)
{
dimMeasures = dim;
}
}
// Должны быть инициализирвоаны всегда, если нет- то ошибка
if (dimAxisX == null || dimAxisY == null || dimMeasures == null)
{
//Ошибка
}
// Формируем запрос к данным куба.
// Синтаксис MDX
string queryText = string.Empty;
// Опередеяем в выбранных параметрах, имеется ли срез по измерениям.
// Если есть, то строим запрос по варианту с о срезом, иначе строим запрос для всех значений
if (dimAxisX.IsLastSheet || dimAxisY.IsLastSheet)
{
queryText = string.Format("SELECT @{0}# ON COLUMNS ,@{1}# ON ROWS FROM SummeryByExecutive WHERE {2}",
dimMeasures.MemberScheme,
!dimAxisX.IsLastSheet ? dimAxisX.MemberScheme + ".Members" : dimAxisX.MemberScheme,
dimAxisY.MemberScheme);
queryText = queryText.Replace("@","{").Replace("#","}");
}
else
{
queryText = string.Format("SELECT {0}.Members ON 0,{1}.Members ON 1 FROM SummeryByExecutive WHERE {2}",
dimAxisX.MemberScheme,
dimAxisY.MemberScheme,
dimMeasures.MemberScheme);
}
DataTable resultsInTable = null;
using (AdomdConnection conn = new AdomdConnection(@"Data Source=SOHATIK;Initial Catalog=FoodMart 2000;ConnectTo=8.0"))
{
// открываем соединение
conn.Open();
AdomdCommand command = new AdomdCommand();
command.CommandType = CommandType.Text;
command.Connection = conn;
command.CommandText = queryText;
resultsInTable = new DataTable();
AdomdDataAdapter dataAdapter = new AdomdDataAdapter(command);
dataAdapter.Fill(resultsInTable);
//преобразование колонок
for(int i=0; i<resultsInTable.Columns.Count;i++)
{
DataColumn dtColumn = resultsInTable.Columns[i];
string colName = string.Empty;
string baseName = "current_";
if(!BaseDataList.IsBindableType(dtColumn.DataType))
{
colName = dtColumn.ColumnName;
dtColumn.ColumnName = baseName + i.ToString();
DataColumn col = new DataColumn(colName, System.Type.GetType("System.String"), "Convert(" + dtColumn.ColumnName + ", 'System.String')");
resultsInTable.Columns.Add(col);
}
}
// если данные идут с нулями, то есть в валюте, то надо убрать последние 4ре нудя
for (int j = 0; j < resultsInTable.Rows.Count; j++)
{
DataRow row = resultsInTable.Rows[j];
string str = null;
for(int k=0; k<resultsInTable.Columns.Count;k++)
{
str = row[k].ToString();
if (string.IsNullOrEmpty(str))
{
continue;
}
if (str.EndsWith("0000"))
{
row[k] = str.Substring(0, str.Length - 4);
}
}
}
this.gvDataView.DataSource = resultsInTable;
this.gvDataView.DataBind();
#endregion
#region Результат в виде гистограммы
ChartSpace barChartspace = new ChartSpaceClass();
ChChart barChart = barChartspace.Charts.Add(0);
barChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered;
barChart.HasLegend = true;
barChart.HasTitle = true;
barChart.Title.Caption = "Аналитическая гистограмма";
barChart.Axes[0].HasMajorGridlines = true;
barChart.Axes[0].HasTitle = true;
barChart.Axes[0].Title.Caption = this.ddlAxisY.Text;
barChart.Axes[1].HasTitle = true;
barChart.Axes[1].Title.Caption = this.ddlMeasures.Text;
barChart.PlotArea.Interior.Color = "White";
barChart.PlotArea.Interior.SetPatterned(ChartPatternTypeEnum.chPattern80Percent, "White", "Black");
barChart.Legend.Position = ChartLegendPositionEnum.chLegendPositionTop;
// формируем значения измерений по оси Х
string stdCategory = string.Empty;
Dictionary<string, string> stdTypesValues = new Dictionary<string, string>(); ;
// сбор категории
for (int i = 0; i < resultsInTable.Rows.Count; i++)
{
DataRow row = resultsInTable.Rows[i];
stdCategory = string.Concat(stdCategory, row[0].ToString(), ",");
}
// сбор типов
for (int i = 1; i < resultsInTable.Columns.Count; i++)
{
DataColumn col = resultsInTable.Columns[i];
if (!col.Caption.StartsWith("current"))
{
//сбор значений
string stdValues = string.Empty;
for (int k = 1; k < resultsInTable.Rows.Count; k++)
{
DataRow row = resultsInTable.Rows[k];
stdValues = string.Concat(stdValues, string.IsNullOrEmpty(row[i].ToString()) ? "0" : row[i].ToString(), ",");
}
if (stdValues.Length > 0)
{
stdValues = stdValues.Substring(0, stdValues.Length - 1); // убираем последную запятую
}
stdTypesValues.Add(col.Caption, stdValues);
}
}
stdCategory = stdCategory.Substring(0, stdCategory.Length - 1); // убираем последную запятую
int idx = 0;
foreach (KeyValuePair<string,string> item in stdTypesValues)
{
barChart.SeriesCollection.Add(idx);
barChart.SeriesCollection[idx].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, stdCategory);
barChart.SeriesCollection[idx].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, item.Value);
try
{
barChart.SeriesCollection[idx].Interior.Color = this.GetRandomColor().ToKnownColor().ToString();
}
catch
{
barChart.SeriesCollection[idx].Interior.Color = "red";
}
barChart.SeriesCollection[idx].Caption = item.Key;
ChDataLabels chLblMaths = barChart.SeriesCollection[idx].DataLabelsCollection.Add();
chLblMaths.HasValue = true;
idx++;
}
String sFileName = DateTime.Now.Ticks.ToString() + ".gif";
String sPath = "C:\\OLAPProject\\WebOLAP\\WebOLAP\\" + sFileName;
String sUrl = "http://localhost:81/olap/" + sFileName;
barChartspace.ExportPicture(sPath, "gif", 900, 600);
//ну и нацеливаем картинку на Url
imChart.ImageUrl = sUrl;
#endregion
}
}
public Color GetRandomColor()
{
KnownColor[] colors = (KnownColor[])Enum.GetValues(typeof(KnownColor));
return Color.FromKnownColor(colors[GetRandomNo(colors.Length)]);
}
private int GetRandomNo(int MaxValue)
{
RandomNumberGenerator rng = RNGCryptoServiceProvider.Create();
byte[] bytes = new byte[4];
rng.GetBytes(bytes);
int rndNum = BitConverter.ToInt32(bytes, 0);
return Math.Abs(rndNum % MaxValue);
}
}
}
- Минобрнауки россии
- 2011 Г. Минобрнауки россии
- Им. В.И.Ульянова (Ленина)” (сПбГэту) ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
- Реферат
- Введение
- 1 Обзор и анализ программных технологий разработки web-приложений для аналитической обработки данных
- 1.1 Технологии оперативной аналитической обработки данных
- 1.2 Технологии аналитической обработки данных Microsoft sql Server
- Sql dso
- PivotTable Service, ole db for olap и ado md
- Клиенты аналитических служб.
- Analysis Manager
- Приложения Microsoft Office
- 1.3 Технологии аналитической обработки данных в среде .Net
- 2 Постановка задачи дипломного проекта
- 3 Разработка многомерных моделей данных для построения olap-кубов по международному научно-техническому и образовательному сотрудничеству вузов России
- 3.1 Анализ инфологической модели базы данных
- 3.3 Многомерная модель данных для построения olap-куба по международному научно-техническому сотрудничеству вузов и научных организаций России
- 4 Разработка интерфейса web-приложения для аналитической обработки данных
- 5 Разработка программного обеспечения web-приложения для аналитической обработки данных
- 5.1 Реализация подключения к источнику данных
- 5.2 Реализация получения данных из источника аналитических данных
- 5.3 Пространство имен System.Web
- 5.4 Пространство имен System.Data
- 6. Экономическое обоснование дипломного проекта.
- 6.1 Концепция
- 6.2 Трудоемкость выполнения работ
- 6.3 Определение себестоимости проведения нир
- 6.4 Экономическая эффективность проекта
- 6.5 Рентабельность
- 6.6 Качественная оценка
- 6.7 Выводы
- 8 Охрана интеллектуальной собственности
- 8.1 Интеллектуальная собственность
- 8.2 Программа для эвм
- 8.3 Правообладатель
- Лицензионный договор на использование программы для эвм
- 1 Термины и их определение
- 2 Предмет Договора
- 3 Обеспечение Договора
- 4 Усовершенствования
- 5 Платежи
- 6 Защита передаваемых прав
- 7 Ответственность Сторон и разрешение споров
- 8 Срок действия Договора и условия его расторжения
- 9 Заключительные положения
- 10 Адреса Сторон
- Прошунин и.С. Спбгэту в.М. Кутузов Заключение
- Список используемых источников