home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 32 / IOPROG_32.ISO / SOFT / SqlEval7 / MSOLAP / samples / Samples.exe / VbAdoCreateCube / frmVBADOCreateCube.frm (.txt) next >
Encoding:
Visual Basic Form  |  1998-10-30  |  14.4 KB  |  216 lines

  1. VERSION 5.00
  2. Begin VB.Form frmVBADOCreateCube 
  3.    Caption         =   "Form1"
  4.    ClientHeight    =   1095
  5.    ClientLeft      =   60
  6.    ClientTop       =   345
  7.    ClientWidth     =   2640
  8.    LinkTopic       =   "Form1"
  9.    ScaleHeight     =   1095
  10.    ScaleWidth      =   2640
  11.    StartUpPosition =   3  'Windows Default
  12.    Begin VB.CommandButton cmdCreateCubeFromDatabase 
  13.       Caption         =   "Create Cube from Database"
  14.       Height          =   645
  15.       Left            =   135
  16.       TabIndex        =   0
  17.       Top             =   225
  18.       Width           =   2325
  19.    End
  20. Attribute VB_Name = "frmVBADOCreateCube"
  21. Attribute VB_GlobalNameSpace = False
  22. Attribute VB_Creatable = False
  23. Attribute VB_PredeclaredId = True
  24. Attribute VB_Exposed = False
  25. Private Sub cmdCreateCubeFromDatabase_Click()
  26. Dim cnCube As ADODB.Connection
  27. Dim s As String
  28. Dim strProvider As String
  29. Dim strDataSource As String
  30. Dim strSourceDSN As String
  31. Dim strSourceDSNSuffix As String
  32. Dim strCreateCube As String
  33. Dim strInsertInto As String
  34. On Error GoTo Error_cmdCreateCubeFromDatabase_Click
  35. '*----------------------------------------------------------------------------------------------------------------------------------------
  36. '* To build a cube file the CREATE CUBE statement is used to define the cubes structure and this structure
  37. '* is passed as the connection string for processing. The connection string is a concatenated set of keyword=value
  38. '* pairs, delimited with semicolons. The order of the keyword=value pairs is not important as long as all pairs
  39. '* necessary are present. The code to follow is a sample of a connection string against a DSN which is based
  40. '* on the Sample FoodMart Microsoft Access database.
  41. '*----------------------------------------------------------------------------------------------------------------------------------------
  42. '*----------------------------------------------------------------------------------------------------------------------------------------
  43. '* Add Provider, the name of the engine that will process the connection string.
  44. '*----------------------------------------------------------------------------------------------------------------------------------------
  45. strProvider = "PROVIDER=MSOLAP"
  46. '*----------------------------------------------------------------------------------------------------------------------------------------
  47. '* Add DataSource, the name of the cube file (.cub) that will be created.
  48. '*----------------------------------------------------------------------------------------------------------------------------------------
  49. strDataSource = "DATA SOURCE=c:\CreateCubeSample.cub"
  50. '*----------------------------------------------------------------------------------------------------------------------------------------
  51. '* Add Source DSN, the connection string for where the data comes from.
  52. '* We need to quote the value so it is parsed as one value.
  53. '* This can either be an ODBC connection string or an OLE DB connection string.
  54. '* (As returned by the Data Source Locator component.)
  55. '*       strSourceDSN = "SOURCE_DSN=DRIVER=Microsoft Access Driver (*.mdb);DBQ=\\platoue1\Samples\Sales.MDB;"
  56. '*----------------------------------------------------------------------------------------------------------------------------------------
  57. strSourceDSN = "SOURCE_DSN=FoodMart"
  58. '*----------------------------------------------------------------------------------------------------------------------------------------
  59. '* We may have some other parameters that we want applied at run time, but
  60. '* not stored in the cube file, or returned in the output string.
  61. '* Example:
  62. '* strSourceDSNSuffix = "UID=;PWD="
  63. '*----------------------------------------------------------------------------------------------------------------------------------------
  64. '*----------------------------------------------------------------------------------------------------------------------------------------
  65. '* Add CREATE CUBE.  This defines the structure of the cube, but not the data in it.
  66. '* The BNF for this is somewhere in the documentation.
  67. '* Note: The names are quoted with square brackets.
  68. '*----------------------------------------------------------------------------------------------------------------------------------------
  69. strCreateCube = "CREATECUBE=CREATE CUBE Sample( "
  70. strCreateCube = strCreateCube & "DIMENSION [Product],"
  71.         strCreateCube = strCreateCube & "LEVEL [All Products]  TYPE ALL,"
  72.         strCreateCube = strCreateCube & "LEVEL [Product Family] ,"
  73.         strCreateCube = strCreateCube & "LEVEL [Product Department] ,"
  74.         strCreateCube = strCreateCube & "LEVEL [Product Category] ,"
  75.         strCreateCube = strCreateCube & "LEVEL [Product Subcategory] ,"
  76.         strCreateCube = strCreateCube & "LEVEL [Brand Name] ,"
  77.         strCreateCube = strCreateCube & "LEVEL [Product Name] ,"
  78. strCreateCube = strCreateCube & "DIMENSION [Store],"
  79.         strCreateCube = strCreateCube & "LEVEL [All Stores]  TYPE ALL,"
  80.         strCreateCube = strCreateCube & "LEVEL [Store Country] ,"
  81.         strCreateCube = strCreateCube & "LEVEL [Store State] ,"
  82.         strCreateCube = strCreateCube & "LEVEL [Store City] ,"
  83.         strCreateCube = strCreateCube & "LEVEL [Store Name] ,"
  84. strCreateCube = strCreateCube & "DIMENSION [Store Type],"
  85.         strCreateCube = strCreateCube & "LEVEL [All Store Type]  TYPE ALL,"
  86.         strCreateCube = strCreateCube & "LEVEL [Store Type] ,"
  87. strCreateCube = strCreateCube & "DIMENSION [Time] TYPE TIME,"
  88.     strCreateCube = strCreateCube & "HIERARCHY [Column],"
  89.         strCreateCube = strCreateCube & "LEVEL [All Time]  TYPE ALL,"
  90.         strCreateCube = strCreateCube & "LEVEL [Year]  TYPE YEAR,"
  91.         strCreateCube = strCreateCube & "LEVEL [Quarter]  TYPE QUARTER,"
  92.         strCreateCube = strCreateCube & "LEVEL [Month]  TYPE MONTH,"
  93.         strCreateCube = strCreateCube & "LEVEL [Week]  TYPE WEEK,"
  94.         strCreateCube = strCreateCube & "LEVEL [Day]  TYPE DAY,"
  95.     strCreateCube = strCreateCube & "HIERARCHY [Formula],"
  96.         strCreateCube = strCreateCube & "LEVEL [All Formula Time]  TYPE ALL,"
  97.         strCreateCube = strCreateCube & "LEVEL [Year]  TYPE YEAR,"
  98.         strCreateCube = strCreateCube & "LEVEL [Quarter]  TYPE QUARTER,"
  99.         strCreateCube = strCreateCube & "LEVEL [Month]  TYPE MONTH OPTIONS (SORTBYKEY) ,"
  100. strCreateCube = strCreateCube & "DIMENSION [Warehouse],"
  101.         strCreateCube = strCreateCube & "LEVEL [All Warehouses]  TYPE ALL,"
  102.         strCreateCube = strCreateCube & "LEVEL [Country] ,"
  103.         strCreateCube = strCreateCube & "LEVEL [State Province] ,"
  104.         strCreateCube = strCreateCube & "LEVEL [City] ,"
  105.         strCreateCube = strCreateCube & "LEVEL [Warehouse Name] ,"
  106. strCreateCube = strCreateCube & "MEASURE [Store Invoice] "
  107.     strCreateCube = strCreateCube & "Function Sum "
  108.     strCreateCube = strCreateCube & "Format '#.#',"
  109. strCreateCube = strCreateCube & "MEASURE [Supply Time] "
  110.     strCreateCube = strCreateCube & "Function Sum "
  111.     strCreateCube = strCreateCube & "Format '#.#',"
  112. strCreateCube = strCreateCube & "MEASURE [Warehouse Cost] "
  113.     strCreateCube = strCreateCube & "Function Sum "
  114.     strCreateCube = strCreateCube & "Format '#.#',"
  115. strCreateCube = strCreateCube & "MEASURE [Warehouse Sales] "
  116.     strCreateCube = strCreateCube & "Function Sum "
  117.     strCreateCube = strCreateCube & "Format '#.#',"
  118. strCreateCube = strCreateCube & "MEASURE [Units Shipped] "
  119.     strCreateCube = strCreateCube & "Function Sum "
  120.     strCreateCube = strCreateCube & "Format '#.#',"
  121. strCreateCube = strCreateCube & "MEASURE [Units Ordered] "
  122.     strCreateCube = strCreateCube & "Function Sum "
  123.     strCreateCube = strCreateCube & "Format '#.#')"
  124. 'strCreateCube = strCreateCube & ","
  125. 'strCreateCube = strCreateCube & " COMMAND [CREATE MEMBER [MEASURE].[Warehouse Profit] "
  126. 'strCreateCube = strCreateCube & "AS '[MEASURE].[Warehouse Sales] - [MEASURE].[Warehouse Cost]'])"
  127. '*----------------------------------------------------------------------------------------------------------------------------------------
  128. '*Add INSERT INTO.  This defines where the data comes from, and how it maps
  129. '* into the already-defined cube structure.
  130. '* Note:The SELECT clause might just be passed through to the relational database.
  131. '* So I could pass in a stored procedure, for example.
  132. '* Note: Columns in the SELECT can be in any order.  One merely has to
  133. '* adjust the ordering of the list of level/measure names to match the SELECT ordering.
  134. '*----------------------------------------------------------------------------------------------------------------------------------------
  135. strInsertInto = strInsertInto & "INSERTINTO=INSERT INTO Sample( Product.[Product Family], Product.[Product Department],"
  136. strInsertInto = strInsertInto & "Product.[Product Category], Product.[Product Subcategory],"
  137. strInsertInto = strInsertInto & "Product.[Brand Name], Product.[Product Name],"
  138. strInsertInto = strInsertInto & "Store.[Store Country], Store.[Store State], Store.[Store City],"
  139. strInsertInto = strInsertInto & "Store.[Store Name], [Store Type].[Store Type], [Time].[Column],"
  140. strInsertInto = strInsertInto & "[Time].Formula.Year, [Time].Formula.Quarter, [Time].Formula.Month.[Key],"
  141. strInsertInto = strInsertInto & "[Time].Formula.Month.Name, Warehouse.Country, Warehouse.[State Province],"
  142. strInsertInto = strInsertInto & "Warehouse.City, Warehouse.[Warehouse Name], Measures.[Store Invoice],"
  143. strInsertInto = strInsertInto & "Measures.[Supply Time], Measures.[Warehouse Cost], Measures.[Warehouse Sales],"
  144. strInsertInto = strInsertInto & "Measures.[Units Shipped], Measures.[Units Ordered] )"
  145. '*----------------------------------------------------------------------------------------------------------------------------------------
  146. '* Add some options to the INSERT INTO if we need to.
  147. '* These can control if the SELECT clause is analyzed or just passed through,
  148. '* and if the storage mode is MOLAP or ROLAP (DEFER_DATA).
  149. '* Example:
  150. '* strInsertInto = strInsertInto & " OPTIONS ATTEMPT_ANALYSIS"
  151. '*----------------------------------------------------------------------------------------------------------------------------------------
  152. '*----------------------------------------------------------------------------------------------------------------------------------------
  153. '* Add the SELECT clause of the INSERT INTO statement.
  154. '* Note: SELECT is merely concatenated onto the end of the INSERT INTO statement.
  155. '* OLAP Service will pass this through to the source database if unable to parse it.
  156. '* Note: that for OLAP Service to analyze the SELECT clause, each column must be
  157. '* qualified with the table name.
  158. '*----------------------------------------------------------------------------------------------------------------------------------------
  159. strInsertInto = strInsertInto & "SELECT product_class.product_family AS Col1,"
  160. strInsertInto = strInsertInto & "product_class.product_department AS Col2,"
  161. strInsertInto = strInsertInto & "product_class.product_category AS Col3,"
  162. strInsertInto = strInsertInto & "product_class.product_subcategory AS Col4,"
  163. strInsertInto = strInsertInto & "product.brand_name AS Col5,"
  164. strInsertInto = strInsertInto & "product.product_name AS Col6,"
  165. strInsertInto = strInsertInto & "store.store_country AS Col7,"
  166. strInsertInto = strInsertInto & "store.store_state AS Col8,"
  167. strInsertInto = strInsertInto & "store.store_city AS Col9,"
  168. strInsertInto = strInsertInto & "store.store_name AS Col10,"
  169. strInsertInto = strInsertInto & "store.store_type AS Col11,"
  170. strInsertInto = strInsertInto & "time_by_day.the_date AS Col12,"
  171. strInsertInto = strInsertInto & "time_by_day.the_year AS Col13,"
  172. strInsertInto = strInsertInto & "time_by_day.quarter AS Col14,"
  173. strInsertInto = strInsertInto & "time_by_day.month_of_year AS Col15,"
  174. strInsertInto = strInsertInto & "time_by_day.the_month AS Col16,"
  175. strInsertInto = strInsertInto & "warehouse.warehouse_country AS Col17,"
  176. strInsertInto = strInsertInto & "warehouse.warehouse_state_province AS Col18,"
  177. strInsertInto = strInsertInto & "warehouse.warehouse_city AS Col19,"
  178. strInsertInto = strInsertInto & "warehouse.warehouse_name AS Col20,"
  179. strInsertInto = strInsertInto & "inventory_fact_1997.store_invoice AS Col21,"
  180. strInsertInto = strInsertInto & "inventory_fact_1997.supply_time AS Col22,"
  181. strInsertInto = strInsertInto & "inventory_fact_1997.warehouse_cost AS Col23,"
  182. strInsertInto = strInsertInto & "inventory_fact_1997.warehouse_sales AS Col24,"
  183. strInsertInto = strInsertInto & "inventory_fact_1997.units_shipped AS Col25,"
  184. strInsertInto = strInsertInto & "inventory_fact_1997.units_ordered AS Col26 "
  185. strInsertInto = strInsertInto & "From [inventory_fact_1997], [product], [product_class], [time_by_day], [store], [warehouse] "
  186. strInsertInto = strInsertInto & "Where [inventory_fact_1997].[product_id] = [product].[product_id] And "
  187. strInsertInto = strInsertInto & "[product].[product_class_id] = [product_class].[product_class_id] And "
  188. strInsertInto = strInsertInto & "[inventory_fact_1997].[time_id] = [time_by_day].[time_id] And "
  189. strInsertInto = strInsertInto & "[inventory_fact_1997].[store_id] = [store].[store_id] And "
  190. strInsertInto = strInsertInto & "[inventory_fact_1997].[warehouse_id] = [warehouse].[warehouse_id]"
  191. '*----------------------------------------------------------------------------------------------------------------------------------------
  192. '* Note:Since the cube is not created anywhere, when the connection object is opened the cube is built on
  193. '*          the fly with the information in the connection string
  194. '* Set a New ADODB Connection Object
  195. '* Create the cube by passing concatenated connection string to Open method of the connection object.
  196. '*----------------------------------------------------------------------------------------------------------------------------------------
  197. MsgBox strDataSource & "; "
  198. MsgBox strSourceDSN & "; "
  199. MsgBox strCreateCube & "; "
  200. MsgBox strInsertInto & ";"
  201. Set cnCube = New ADODB.Connection
  202. s = strProvider & ";" & strDataSource & ";" & strSourceDSN & ";" & strCreateCube & ";" & strInsertInto & ";"
  203. Screen.MousePointer = vbHourglass
  204. cnCube.Open s
  205. Screen.MousePointer = vbDefault
  206. Exit Sub
  207. Error_cmdCreateCubeFromDatabase_Click:
  208.     Screen.MousePointer = vbDefault
  209.     MsgBox Err.Description
  210.     If Err.Number <> 0 Then
  211.    Msg = "Error # " & Str(Err.Number) & " was generated by " _
  212.          & Err.Source & Chr(13) & Err.Description
  213.    MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
  214.    End If
  215. End Sub
  216.