Praca z modułami i środki
Ostrzeżenie
Ta funkcja zostanie usunięta z następnej wersji programu Microsoft SQL Server. Nie należy stosować tej funkcji w nowych projektach oraz jak najszybciej należy zmodyfikować aplikacje, w których obecnie jest używana ta funkcja.
Każda baza danych zawiera MDStores kolekcja modułów (czyli obiekty ClassType clsCube).Moduł jest centralnym obiektu w wielowymiarowej bazie danych.Moduł zawiera wymiary i ich poziomy środków, źródeł danych, role i poleceń.Każdy moduł zawiera również MDStores kolekcja partycji (czyli obiekty ClassType clsPartition).
Poprzednich przykładach utworzona nowa baza danych, dodać źródło danych i dodaje udostępnione wymiary i poziomy.Trzech poniższych przykładach zademonstrowano sposób listy, dodawanie i usuwanie moduł.
Lista modułów
Ponieważ każdy MDStore obiektu bazy danych zawiera kolekcja z MDStore obiektów moduł ułatwia listę modułów i ich właściwości dla każdej bazy danych.
Poniższy przykład kodu drukuje listę modułów dla każdej bazy danych na danym serwerze w oknie Immediate.SubClassType i SourceTable są drukowane również właściwości dla każdego moduł.
Private Sub ListCubes()
Dim dsoServer As New DSO.Server
Dim dsoDB As DSO.MDStore
Dim dsoCube As DSO.MDStore
' Create a connection to the Analysis server.
dsoServer.Connect "LocalHost"
' Step through the databases in the server object.
For Each dsoDB In dsoServer.MDStores
' Print the name and description of the database
Debug.Print "DATABASE: " & dsoDB.Name & " - " & _
dsoDB.Description
' Step through the cubes in the database object.
If dsoDB.MDStores.Count = 0 Then
Debug.Print " Cube: None"
Else
For Each dsoCube In dsoDB.MDStores
' Print the name of the cube.
Debug.Print " Cube: " & dsoCube.Name
' Check to see whether the cube is regular or virtual.
If dsoCube.SubClassType = sbclsRegular Then
Debug.Print " SubClassType: Regular"
Debug.Print " SourceTable: " & _
dsoCube.SourceTable
Else
Debug.Print " SubClassType: Virtual"
End If
Next
End If
Next
End Sub
Dodawanie modułu
Poniższy przykład ilustruje sposób dodawania moduł o nazwie TestCube, do MDStores kolekcja bazy danych:
Dodawanie moduł, aby MDStores bazy danych przy użyciu kolekcja AddNew metoda.
Dodaj źródło danych do nowego moduł.
Ustaw SourceTable właściwość moduł.
Ustaw EstimatedRows Właściwość przybliżoną liczbę wierszy w tabela.
Dodaj wymiary udostępnionego, utworzone w pracy z wymiarów i poziomów tematu do modułna Dimensions kolekcja z AddNew metoda.
Utworzyć klauzulę SQL INNER JOIN łączenia tabela wymiarów źródło tabeli, a następnie przypisać do moduł JoinClause właściwość.
Wprowadź zmiany do tego moduł stałe wywołując moduł Update metoda.
Poniższy przykład kodu dodaje nowy moduł, Testmoduł, do TestDB bazy danych:
Private Sub AddCube()
Dim dsoServer As New DSO.Server
Dim dsoDB As DSO.MDStore
Dim dsoCube As DSO.MDStore
Dim strDBName As String
Dim strCubeName As String
Dim strJoin As String
' Initialize variables for the database and
' cube names.
strDBName = "TestDB"
strCubeName = "TestCube"
' Define joins between the fact table and the dimension tables
' to be used later in the subroutine.
' Join the fact table to the Product table.
' sales_fact_1998.product_id = product.product_id
strJoin = "(""sales_fact_1997"".""product_id""=""product"".""product_id"")"
strJoin = strJoin & " AND "
' Join the fact table to the Store table.
' sales_fact_1998.store_id = store.store_id
strJoin = strJoin & "(""sales_fact_1997"".""store_id""=""store"".""store_id"")"
' Create a connection to the Analysis server.
dsoServer.Connect "LocalHost"
' Ensure the database exists first.
If dsoServer.MDStores.Find(strDBName) = False Then
MsgBox "Database " & strDBName & " is not found."
Else
Set dsoDB = dsoServer.MDStores(strDBName)
' Check for existing data sources, dimensions, and
' cubes.
If dsoDB.DataSources.Count = 0 Then
' No data source
MsgBox "Database " & strDBName & " has no data sources."
ElseIf dsoDB.Dimensions.Count = 0 Then
' No dimensions
MsgBox "Database " & strDBName & " has no dimensions."
ElseIf dsoDB.MDStores.Find(strCubeName) Then
' Cube already exists
MsgBox "Cube " & strCubeName & " already exists " & _
"in database" & strDBName
Else
' Add the cube to the database.
Set dsoCube = dsoDB.MDStores.AddNew(strCubeName)
' Further define the cube.
With dsoCube
' Provide the data source for the cube.
.DataSources.AddNew dsoDB.DataSources(1).Name
' Provide the fact table for the cube.
.SourceTable = """sales_fact_1997"""
' Provide an estimated number of rows.
.EstimatedRows = 100000
' Add the Products and Stores shared dimensions.
.Dimensions.AddNew "Products"
.Dimensions.AddNew "Stores"
' Join the fact table with the dimension tables.
.JoinClause = strJoin
' Update the database.
.Update
End With
' Inform the user.
MsgBox "Cube " & strCubeName & _
" created and dimensions added"
End If
End If
End Sub
Usunięcie modułu
Proces usuwania moduł z bazy danych jest wykonywane przez Remove metoda obiektu bazy danych MDStores kolekcja.Poniższy przykład kodu ilustruje to przez usunięcie moduł TestCube, utworzonego w poprzednim przykładzie kodu.
Poniższy przykład kodu usuwa moduł TestCube z TestDB bazy danych:
Private Sub RemoveCube()
Dim dsoServer As New DSO.Server
Dim dsoDB As DSO.MDStore
Dim strDBName As String
Dim strCubeName As String
' Initialize variables for the database and
' cube names.
strDBName = "TestDB"
strCubeName = "TestCube"
' Create a connection to the Analysis server.
dsoServer.Connect "LocalHost"
' Ensure the database exists on the server.
If dsoServer.MDStores.Find(strDBName) = False Then
MsgBox "Database " & strDBName & _
" is not found on this server."
Else
Set dsoDB = dsoServer.MDStores(strDBName)
' Ensure the cube exists in the database.
If dsoDB.MDStores.Find(strCubeName) = False Then
MsgBox "Cube " & strCubeName & " is not found" & _
" in database " & strDBName & "."
Else
' Remove the cube from the database.
dsoDB.MDStores.Remove strCubeName
' Inform the user.
MsgBox "Cube " & strCubeName & " removed" & _
" from database " & strDBName
End If
End If
End Sub
Wykaz środków
Kolekcje środki są zawarte w obiekty ClassType clsCube, clsPartition, i clsAggregation.Obiekty miara, zawartego w ramach każdej z tych kolekcji są ClassTypes clsCubeMeasure, clsPartitonMeasure, i clsAggregationMeasure.
Następujący kod w przykładzie wykorzystano Measures kolekcja MDStore obiektu moduł listy środków związanych z modułów każdej bazy danych na danym serwerze analizy.
Poniższy przykład kodu wyświetla każdy miara każdego moduł w każdej bazy danych na lokalnym serwerze analizy podstawowe właściwości drukowania w oknie Immediate:
Private Sub ListMeasures()
Dim dsoServer As New DSO.Server
Dim dsoDB As DSO.MDStore
Dim dsoCube As DSO.MDStore
Dim dsoMea As DSO.Measure
' Create a connection to the Analysis server.
dsoServer.Connect "LocalHost"
' Step through the databases in the MDStores collection
' of the server object.
For Each dsoDB In dsoServer.MDStores
Debug.Print "DATABASE: " & dsoDB.Name & " - " & _
dsoDB.Description
'Step through the cubes in the database collection.
For Each dsoCube In dsoDB.MDStores
Debug.Print " Cube: " & dsoCube.Name
'Step through measures for the cube.
For Each dsoMea In dsoCube.Measures
Debug.Print " Measure: " & dsoMea.Name
Next
Next
Next
End Sub
Dodawanie środków
Zadanie dodawania środków MDStore moduł obiektu jest wykonywane przez AddNew metoda Measures kolekcja, jak pokazano w przykładzie kodu.
Poniższy przykład kodu dodaje czterech środków Product ID, Store Sales, Store Cost, i Unit Sales, do TestCube moduł utworzonego w poprzednich przykładach kodu:
Private Sub AddMeasures()
Dim dsoServer As New DSO.Server
Dim dsoDB As DSO.MDStore
Dim dsoCube As DSO.MDStore
Dim dsoMea As DSO.Measure
Dim strDBName As String
Dim strCubeName As String
' Constants used for ColumnType property
' of the DSO.Level object.
' Note that these constants are identical to
' those used in ADO in the DataTypeEnum enumeration.
Const adSmallInt = 2
' Initialize variables for the database and
' cube names.
strDBName = "TestDB"
strCubeName = "TestCube"
' Create a connection to the Analysis server.
dsoServer.Connect "LocalHost"
' Ensure the database exists first.
If dsoServer.MDStores.Find(strDBName) = False Then
MsgBox "Database " & strDBName & " is not found."
Else
Set dsoDB = dsoServer.MDStores(strDBName)
' Check for existing data sources, dimensions and
' cubes.
If dsoDB.DataSources.Count = 0 Then
' No data source
MsgBox "Database " & strDBName & " has no data sources."
ElseIf dsoDB.Dimensions.Count = 0 Then
' No dimensions
MsgBox "Database " & strDBName & " has no dimensions."
ElseIf dsoDB.MDStores.Find(strCubeName) = False Then
' Cube already exists
MsgBox "Cube " & strCubeName & " does not exist " & _
"in database" & strDBName
Else
' Add the cube to the database.
Set dsoCube = dsoDB.MDStores(strCubeName)
Set dsoMea = dsoCube.Measures.AddNew("Product ID")
dsoMea.SourceColumn = """sales_fact_1997"".""product_id"""
dsoMea.SourceColumnType = adSmallInt 'The data type for the column
dsoMea.AggregateFunction = aggSum 'The method for the column
'aggSum aggregates the column by summation.
Set dsoMea = dsoCube.Measures.AddNew("Store Sales")
dsoMea.SourceColumn = """sales_fact_1997"".""store_sales"""
dsoMea.SourceColumnType = adSmallInt
dsoMea.AggregateFunction = aggSum
Set dsoMea = dsoCube.Measures.AddNew("Store Cost")
dsoMea.SourceColumn = """sales_fact_1997"".""store_cost"""
dsoMea.SourceColumnType = adSmallInt
dsoMea.AggregateFunction = aggSum
Set dsoMea = dsoCube.Measures.AddNew("Unit Sales")
dsoMea.SourceColumn = """sales_fact_1997"".""unit_sales"""
dsoMea.SourceColumnType = adSmallInt
dsoMea.AggregateFunction = aggSum
dsoCube.Update
End If
End If
End Sub
Przetworzenie modułu
Bazy danych, udostępnione wymiary i ich poziomy i moduł i jego środki obecnie miejsce i mogą być przetwarzane moduł.
Służy do przetwarzania moduł, Process metoda MDStore obiektu moduł, jak pokazano w przykładzie kodu.
Przetwarzania moduł może trwać kilka minut.Można przeglądać za pomocą Menedżera analizy po zakończeniu przetwarzania danych moduł.
Następujący kod przykład procesy TestCube moduł utworzonego w poprzednich przykładach kodu:
Private Sub ProcessCube()
Dim dsoServer As New DSO.Server
Dim dsoDB As DSO.MDStore
Dim dsoCube As DSO.MDStore
Dim dsoMea As DSO.Measure
Dim strDBName As String
Dim strCubeName As String
' Initialize variables for the database and
' cube names.
strDBName = "TestDB"
strCubeName = "TestCube"
' Create a connection to the Analysis server.
dsoServer.Connect "LocalHost"
' Ensure the database exists first.
If dsoServer.MDStores.Find(strDBName) = False Then
MsgBox "Database " & strDBName & " is not found."
Else
Set dsoDB = dsoServer.MDStores(strDBName)
' Check for existing data sources, dimensions, and
' cubes.
If dsoDB.DataSources.Count = 0 Then
' No data source
MsgBox "Database " & strDBName & " has no data sources."
ElseIf dsoDB.MDStores.Find(strCubeName) = False Then
' Cube already exists
MsgBox "Cube " & strCubeName & " does not exist " & _
"in database" & strDBName
Else
' Retrieve the cube from the database.
Set dsoCube = dsoDB.MDStores(strCubeName)
' Ensure the cube is correctly constructed.
If dsoCube.Dimensions.Count = 0 Then
' No dimensions associated with the cube
MsgBox "Cube " & strCubeName & _
" has no dimensions."
ElseIf dsoCube.Measures.Count = 0 Then
' No measures associated with the cube
MsgBox "Cube " & strCubeName & _
" has no measures."
Else
' Process the cube.
dsoCube.Process
' Inform the user.
MsgBox "Cube " & strCubeName & _
"has been processed."
End If
End If
End If
End Sub