home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 32 / IOPROG_32.ISO / SOFT / SqlEval7 / MSOLAP / samples / Samples.exe / AspAdoComplex / ASPADOComplex.asp
Encoding:
Text File  |  1998-10-30  |  12.8 KB  |  295 lines

  1. <%@ Language=VBScript %>
  2. <%
  3. '************************************************************************************
  4. '************************************************************************************
  5. '*** Active Server Page displays OLAP data from default or provided
  6. '*** MDX Query string and writes resulting cell set to HTML table
  7. '*** structure. This ASP provides colspan features for multiple
  8. '*** dimension cell sets.
  9. '************************************************************************************
  10. '************************************************************************************
  11. Response.Buffer=True
  12. Response.Expires=0
  13. %>
  14. <html>
  15. <head>
  16. <meta NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
  17. </head>
  18. <body bgcolor="Ivory">
  19. <font FACE="Verdana">
  20.  
  21. <%
  22.  
  23. Dim cat,cst,i,j,strSource,csw,LevelValue,intDC0,intDC1,intPC0, intPC1
  24. '************************************************************************************
  25. '*** Gather Server Name and MDX Query Strings from text box and
  26. '***  text area and assign them to Session Objects of same name
  27. '************************************************************************************
  28. Session("ServerName")=Request.Form("strServerName")
  29. Session("InitialCatalog")=Request.Form("strInitialCatalog")
  30. Session("MDXQuery")=Request.Form("MDXQuery")
  31.  
  32. '************************************************************************************
  33. '*** Set Connection Objects for Multi dimensional Catalog and Cell Set
  34. '************************************************************************************
  35. Set cat = Server.CreateObject("ADOMD.Catalog")
  36. Set cst = Server.CreateObject("ADOMD.CellSet")
  37.  
  38. '************************************************************************************
  39. '*** Check to see if the Session Object Server Name is present
  40. '*** If present then: Create Active Connection using Server Name
  41. '***  and MSOLAP as connection Provider
  42. '*** If not present then: Use default settings of a known OLAP Server
  43. '*** for Server Name for Connection Set Server Name Session Object
  44. '*** to default value
  45. '************************************************************************************
  46. If Len(Session("ServerName")) > 0 Then
  47.     cat.ActiveConnection = "Data Source=" & Session("ServerName") & ";Initial Catalog=" & Session("InitialCatalog") & ";Provider=msolap;"
  48. Else
  49.  
  50. '************************************************************************************
  51. '*** Must set OLAPServerName to OLAP Server that is
  52. '*** present on network
  53. '************************************************************************************
  54. OLAPServerName = "Please set to present OLAP Server"
  55.     cat.ActiveConnection = "Data Source=" & OLAPServerName & ";Initial Catalog=FoodMart;Provider=msolap;"
  56.     Session("ServerName") = OLAPServerName
  57.     Session("InitialCatalog") = "FoodMart"
  58. End if
  59. '************************************************************************************
  60. '*** Check to see if the Session Object MDXQuery is present
  61. '*** If present then: Set strSource using MDXQuery Session Object
  62. '*** If not present then: Use default MDX Query string of a known query
  63. '*** that works with default server Set MDXQuery Session Object to default value
  64. '************************************************************************************
  65. If Len(Session("MDXQuery")) < 5 Then    
  66.     strSource = strSource & "SELECT "
  67.     strSource = strSource & "CROSSJOIN({[Store].[Store Country].MEMBERS},"
  68.     strSource = strSource & "{[Measures].[Store Invoice],[Measures].[Supply Time]}) ON COLUMNS,"
  69.     strSource = strSource & "CROSSJOIN({[Time].[Year].MEMBERS},"
  70.     strSource = strSource & "CROSSJOIN({[Store Type].[Store Type].Members},{[Product].[Product Family].members})) ON ROWS"
  71.     strSource = strSource & " FROM Warehouse"
  72. Else
  73.     strSource = Session("MDXQuery")
  74. End if
  75.  
  76. '************************************************************************************
  77. '*** Set Cell Set Source property to strSource to be passed on cell set open method
  78. '************************************************************************************  
  79.     cst.Source = strSource
  80.     
  81. '************************************************************************************
  82. '*** Set Cell Sets Active connection to use the current Catalogs Active connection
  83. '************************************************************************************
  84. Set cst.ActiveConnection = cat.ActiveConnection
  85.  
  86. '************************************************************************************
  87. '*** Using Open method, Open cell set
  88. '************************************************************************************
  89. cst.Open
  90.  
  91. '************************************************************************************
  92. '*** Standard HTML to collect Sever Name and MDX Query Information
  93. '*** Note that post action posts back to same page to process
  94. '*** thus using state of Session Variables to change look of page
  95. '************************************************************************************
  96. %>
  97. <form action="ASPADOComplex.asp" method="POST" id="form1" name="form1">
  98. <table>
  99. <tr><td align="left">
  100. <b>Olap Server name:</b><br><input type="text" id="strServerName" name="strServerName" value="<%=Session("ServerName")%>" size="20">
  101. <br>
  102. <b>Catalog name:</b><br><input type="text" id="strInitialCatalog" name="strInitialCatalog" value="<%=Session("InitialCatalog")%>" size="20">
  103. </td><td align="center">
  104. <b>MDX Query:</b><br>
  105. <textarea rows="7" cols="70" id="textareaMDX" name="MDXQuery" wrap="soft">
  106. <%=Session("MDXQuery")%>
  107. </textarea>
  108. </td></tr>
  109. </table>
  110. <table>
  111. <tr><td>
  112. <input type="submit" value="Submit MDX Query" id="submit1" name="submit1">
  113. </td><td>
  114. <input type="reset" value="Reset" id="reset1" name="reset1">
  115. </td></tr>
  116. </table>
  117. </form>
  118. <p align="left">
  119. <font color="Black" size="-3">
  120. <%=strSource%>
  121. </font>
  122. </p>
  123. <%
  124. '************************************************************************************
  125. '*** Set Dimension Counts minus 1 for Both Axes to intDC0, intDC1
  126. '*** Set Position Counts minus 1 for Both Axes to intPC0, intPC1
  127. '************************************************************************************
  128. intDC0 = cst.Axes(0).DimensionCount-1
  129. intDC1 = cst.Axes(1).DimensionCount-1
  130.  
  131. intPC0 = cst.Axes(0).Positions.Count - 1
  132. intPC1 = cst.Axes(1).Positions.Count - 1
  133.         
  134. '************************************************************************************
  135. '*** Create HTML Table structure to hold MDX Query return Record set
  136. '************************************************************************************
  137.         Response.Write "<Table width=100% border=1>"
  138.         
  139. '************************************************************************************
  140. '*** Loop to create Column header for all Dimensions based
  141. '*** on Count of Dimensions for Axes(0)
  142. '************************************************************************************
  143.         For h=0 to intDC0
  144.             Response.Write "<TR>"
  145.             
  146. '************************************************************************************
  147. '*** Loop to create spaces in front of Column headers
  148. '*** to align with Row headers
  149. '************************************************************************************
  150.             For c=0 to intDC1
  151.                 Response.Write "<TD></TD>"
  152.             Next
  153.             
  154. '************************************************************************************
  155. '*** Check current dimension to see if equal to Last Dimension
  156. '*** If True: Write Table header titles normally to HTML output with out ColSpan value 
  157. '*** If False: Write Table header titles with ColSpan values to HTML output
  158. '************************************************************************************
  159.             If h = intDC0 then
  160.             
  161. '************************************************************************************
  162. '*** Iterate through Axes(0) Positions writing member captions to table header
  163. '************************************************************************************
  164.                 For i = 0 To intPC0
  165.                     Response.Write "<TH>"
  166.                     Response.Write "<FONT size=-2>"
  167.                     Response.Write cst.Axes(0).Positions(i).Members(h).Caption
  168.                     Response.Write "</FONT>"
  169.                     Response.Write "</TH>"
  170.                 Next
  171.             Else
  172.             
  173. '************************************************************************************
  174. '*** Iterate through Axes(0) Positions writing member captions to table header
  175. '*** taking into account for the span of columns for duplicate member captions
  176. '************************************************************************************
  177.                 CaptionCount = 1
  178.                 LastCaption = cst.Axes(0).Positions(0).Members(h).Caption
  179.                 Response.Write "<TH"
  180.                 For t=1 to intPC0
  181.                 
  182. '************************************************************************************
  183. '*** Check to see if LastCaption is equal to current members caption
  184. '*** If True: Add one to CaptionCount to increase Colspan value
  185. '*** If False: Write Table header titles with ColSpan values to HTML output
  186. '*** using current CaptionCount for Colspan and LastCaption for header string
  187. '************************************************************************************
  188.                     If LastCaption = cst.Axes(0).Positions(t).Members(h).Caption then
  189.                         CaptionCount = CaptionCount+1
  190.                         
  191. '************************************************************************************
  192. '*** Check if at last position
  193. '*** If True: Write HTML to finish table row using current
  194. '*** CaptionCount and LastCaption
  195. '************************************************************************************
  196.                         If  t = intPC0 then
  197.                             Response.Write " colspan=" & CaptionCount & "><FONT size=-2>" & LastCaption & "</FONT></TH>"
  198.                         End if
  199.                             
  200.                     Else
  201.                         Response.Write " colspan=" & CaptionCount & "><FONT size=-2>" & LastCaption & "</FONT></TH><TH"
  202.                         CaptionCount=1
  203.                         LastCaption=cst.Axes(0).Positions(t).Members(h).Caption
  204.                     End if
  205.                 Next
  206.             End if
  207.             Response.Write "</TR>"
  208.         Next
  209.         
  210. '************************************************************************************
  211. '*** Iterate through Axes(1) Positions first writing member captions 
  212. '*** to table row headers then writing cell set data to table structure
  213. '************************************************************************************
  214.         Dim aryRows()
  215.         Dim intArray,Marker
  216.         intArray=0
  217.         
  218. '************************************************************************************
  219. '*** Set value of Array for row header formatting
  220. '************************************************************************************
  221.         For a=1 To intDC1
  222.             intArray = intArray+(intPC1+1)
  223.         Next
  224.         intArray = intArray-1
  225.         ReDim aryRows(intArray)
  226.         Marker=0
  227.         
  228. '************************************************************************************
  229. '*** Use Array values for row header formatting to provide
  230. '*** spaces under beginning row header titles
  231. '************************************************************************************
  232.         For j = 0 To intPC1
  233.             Response.Write "<TR>"
  234.             For h=0 to intDC1
  235.                 If h=intDC1 then
  236.                     Response.Write "<TD><B>"
  237.                     Response.Write "<FONT size=-2>"
  238.                     Response.Write cst.Axes(1).Positions(j).Members(h).Caption
  239.                     Response.Write "</FONT>"
  240.                     Response.Write "</B></TD>"
  241.                 Else
  242.                     aryRows(Marker) = cst.Axes(1).Positions(j).Members(h).Caption
  243.                     If Marker < intDC1 then
  244.                         Response.Write "<TD><B>"
  245.                         Response.Write "<FONT size=-2>"
  246.                         Response.Write cst.Axes(1).Positions(j).Members(h).Caption
  247.                         Response.Write "</FONT>"
  248.                         Response.Write "</B></TD>"
  249.                         Marker = Marker + 1
  250.                     Else
  251.                         If aryRows(Marker) = aryRows(Marker - intDC1) then
  252.                             Response.Write "<TD> </TD>"
  253.                             Marker = Marker + 1
  254.                         Else
  255.                             Response.Write "<TD><B>"
  256.                             Response.Write "<FONT size=-2>"
  257.                             Response.Write cst.Axes(1).Positions(j).Members(h).Caption
  258.                             Response.Write "</FONT>"
  259.                             Response.Write "</B></TD>"
  260.                             Marker = Marker + 1
  261.                         End if
  262.                     End if
  263.                 End if
  264.             Next
  265.             
  266. '************************************************************************************
  267. '*** Alternates Cell background color
  268. '************************************************************************************
  269.             If (j+1) Mod 2 = 0 Then
  270.                 csw = "#cccccc"
  271.             Else
  272.                 csw = "#ccffff"
  273.             End If
  274.             For k = 0 To intPC0
  275.                 Response.Write "<TD align=right bgcolor="
  276.                 Response.Write csw
  277.                 Response.Write ">"
  278.                 Response.Write "<FONT size=-2>"
  279.                 
  280. '************************************************************************************
  281. '*** FormattedValue property pulls data
  282. '************************************************************************************
  283.                 Response.Write cst(k, j).FormattedValue
  284.                 Response.Write "</FONT>"
  285.                 Response.Write "</TD>"
  286.             Next
  287.             Response.Write "</TR>"
  288.         Next
  289.         Response.Write "</Table>"
  290.         
  291. %>
  292. </font>
  293. </body>
  294. </html>
  295.