1
public static ScalarMiningStructureColumn CreateMiningStructureColumn(CubeAttribute attribute, bool isKey)
2
{
3
ScalarMiningStructureColumn column = new ScalarMiningStructureColumn();
4
column.Name = attribute.Attribute.Name;
5
//cube attribute is usually modeled as discrete except for key column
6
column.Content = (isKey ? MiningStructureColumnContents.Key : MiningStructureColumnContents.Discrete);
7
column.IsKey = isKey;
8
//bind column source to a cube dimension attribute
9
column.Source = new CubeAttributeBinding(attribute.ParentCube.ID, ((CubeDimension)attribute.Parent).ID,
10
attribute.Attribute.ID,
11
AttributeBindingType.Name);
12
//Get the column data type from the attribute key column binding.
13
column.Type = MiningStructureColumnTypes.GetColumnType(attribute.Attribute.NameColumn.DataType);
14
return column;
15
}
16![]()
17![]()
18
public static ScalarMiningStructureColumn CreateMiningStructureColumn(Microsoft.AnalysisServices.Measure measure)
19
{
20
ScalarMiningStructureColumn column = new ScalarMiningStructureColumn();
21
column.Name = measure.Name;
22
//Set the content type to continuous for measures.
23
column.Content = MiningStructureColumnContents.Continuous;
24
column.Source = new MeasureBinding(measure.ID);
25
column.Type = MiningStructureColumnTypes.GetColumnType(measure.Source.DataType);
26
return column;
27
}
28![]()
29
public void CreateProcessSegmentationModel()
30
{
31
//connecting the server and database
32
Server myServer = new Server();
33
myServer.Connect("DataSource=localhost;Catalog=FoodMart");
34
Database myDatabase = myServer.Databases["FoodMart"];
35
Cube myCube = myDatabase.Cubes["FoodMart 2000"];
36
CubeDimension myDimension = myCube.Dimensions["Customer"];
37
MiningStructure myMiningStructure = myDatabase.MiningStructures.Add("CustomerSegement", "CustomerSegement");
38
//Bind the mining structure to a cube.
39
myMiningStructure.Source = new CubeDimensionBinding(".", myCube.ID, myDimension.ID);
40
// Create the key column.
41
CubeAttribute customerKey = myCube.Dimensions["Customer"].Attributes["Customer"];
42
ScalarMiningStructureColumn keyStructureColumn = Utilities.CreateMiningModelColumn(customerKey, true);
43
myMiningStructure.Columns.Add(keyStructureColumn);
44
//Member Card attribute
45
CubeAttribute memberCard = myCube.Dimensions["Customer"].Attributes["Member Card"];
46
ScalarMiningStructureColumn memberCardStructureColumn = Utilities.CreateMiningModelColumn(memberCard, false);
47
myMiningStructure.Columns.Add(memberCardStructureColumn);
48
//Total Children attribute
49
CubeAttribute totalChildren = myCube.Dimensions["Customer"].Attributes["Total Children"];
50
ScalarMiningStructureColumn totalChildrenStructureColumn = Utilities.CreateMiningModelColumn(totalChildren, false);
51
myMiningStructure.Columns.Add(totalChildrenStructureColumn);
52
//Store Sales measure
53
Measure storeSales = myCube.MeasureGroups[0].Measures["Store Sales"];
54
ScalarMiningStructureColumn storeSalesStructureColumn = Utilities.CreateMiningModelColumn(storeSales);
55
myMiningStructure.Columns.Add(storeSalesStructureColumn);
56
//Create a mining model from the mining structure. By default, all the
57
//structure columns are used. Nonkey columns are with usage input
58
MiningModel myMiningModel = myMiningStructure.CreateMiningModel(true, "CustomerSegment");
59
//Set the algorithm to be clustering.
60
myMiningModel.Algorithm = MiningModelAlgorithms.MicrosoftClustering;
61
//Process structure and model
62
try
63
{
64
myMiningStructure.Update(UpdateOptions.ExpandFull);
65
myMiningStructure.Process(ProcessType.ProcessFull);
66
}
67
catch (Microsoft.AnalysisServices.OperationException e)
68
{
69
string err = e.Message;
70
}
71
}
72![]()
73
public static TableMiningStructureColumn CreateMiningStructureColumn(MeasureGroup measureGroup)
74
{
75
TableMiningStructureColumn column = new TableMiningStructureColumn();
76
column.Name = measureGroup.Name;
77
column.SourceMeasureGroup = new MeasureGroupBinding(".", ((Cube)measureGroup.Parent).ID, measureGroup.ID);
78
return column;
79
}
80![]()
81
private void CreateMarketBasketModel()
82
{
83
84
cubeAttribute basketAttribute;
85
CubeAttribute itemAttribute;
86
Server myServer = new Server();
87
myServer.Connect("DataSource=localhost;Catalog=FoodMart");
88
Database myDatabase = myServer.Databases["FoodMart"];
89
Cube myCube = myDatabase.Cubes["FoodMart 2000"];
90
CubeDimension myDimension = myCube.Dimensions["Customer"];
91
MiningStructure myMiningStructure = myDatabase.MiningStructures.Add("MarketBasket", "MarketBasket");
92
myMiningStructure.Source = new CubeDimensionBinding(".", myCube.ID, myDimension.ID);
93
basketAttribute = myCube.Dimensions["Customer"].Attributes["Customer"];
94
itemAttribute = myCube.Dimensions["Product"].Attributes["Product"];
95
//basket structure column
96
ScalarMiningStructureColumn basket = Utilities.CreateMiningModelColumn(basketAttribute, true);
97
basket.Name = "Basket";
98
myMiningStructure.Columns.Add(basket);
99
//item structure column - nested table
100
ScalarMiningStructureColumn item = Utilities.CreateMiningModelColumn(itemAttribute, true);
101
item.Name = "Item";
102
MeasureGroup measureGroup = myCube.MeasureGroups[0];
103
TableMiningStructureColumn purchases = Utilities.CreateMiningModelColumn(measureGroup);
104
purchases.Name = "Purchases";
105
purchases.Columns.Add(item);
106
myMiningStructure.Columns.Add(purchases);
107
MiningModel myMiningModel = myMiningStructure.CreateMiningModel();
108
myMiningModel.Name = "MarketBasket";
109
myMiningModel.Columns["Purchases"].Usage = MiningModelColumnUsages.PredictOnly;
110
myMiningModel.Algorithm = MiningModelAlgorithms.MicrosoftAssociationRules;
111
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111
