⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 08.txt

📁 仍然是SQL语言学习版 可以致用的一些文章
💻 TXT
字号:
8-1

(2)编写数据透视表和数据来源连接的程序代码。

Sub PivotVideoCube()
    
dim strConnect
    strConnect = "Data Source=Local;Provider=MSOLAP;Initial Catalog=图书销售系统DSS"
    Document.PivotTable1.ConnectionString = strConnect

    Document.PivotTable1.DataMember = "图书销售分析"
    Document.PivotTable1.DisplayFieldList = True
   
    Set view = Document.PivotTable1.ActiveView
    view.ColumnAxis.DisplayEmptyMembers = 1
    view.RowAxis.DisplayEmptyMembers = 1

End Sub
(3)设置OWC开启时的外观。
Sub FormatPivotList()
    Set view = Document.PivotTable1.ActiveView
    Document.PivotTable1.BackColor = "CornSilk"
    view.FilterAxis.Label.BackColor = "CornSilk"
    view.RowAxis.Label.BackColor = "CornSilk"
    view.ColumnAxis.Label.BackColor = "CornSilk"
    view.DataAxis.Label.BackColor = "CornSilk"
    view.FilterAxis.Label.Font.Color = "#B5A689"
    view.RowAxis.Label.Font.Color = "#B5A689"
    view.ColumnAxis.Label.Font.Color = "#B5A689"
    view.DataAxis.Label.Font.Color = "#B5A689"
 
    view.Label.BackColor = "#485EB4"
    view.Label.Caption = "图书销售分析"
    view.Label.Font.Size = 16
    view.Label.ForeColor = "White"
    view.TotalFont.Bold = 0
    view.TotalBackColor = "CornSilk"
    view.MemberForeColor = "Black"
    view.FieldLabelForeColor = "Black"
    For Each fieldset In view.Fieldsets
        For Each field in fieldset.fields
            field.SubtotalBackColor = "Wheat"
 	    Next
    Next
    For Each total in view.Totals
        total.HAlignment = 3

        total.CaptionHAlignment = 3
        Select Case total.Caption
               Case "Price", "Total Amount"
		    total.NumberFormat = "$#,###"
	       Case "Quantity"
		    total.NumberFormat = "#,###"
        End Select
    Next
End Sub
(4)设置数据透视表的高度及宽度。
Sub ConfigurePivotList()
    Document.PivotTable1.MaxWidth = 20000
    Document.PivotTable1.MaxHeight = 20000
End Sub

(5)设置图表的数据来源。

Sub ConfigureChart

    set document.webchart.datasource = document.PivotTable1
    document.webchart.ScreenUpdating = 0
    document.webchart.haschartspacelegend = true
    document.webchart.charts.add
    set ch = document.webchart.charts(0)
	
    ch.setdata 0, 0, -2
    ch.setdata 1, 0, -1
    ch.setdata 2, 0, 0

End Sub
(6)设定图表的外观。
Sub FormatChart

    Document.WebChart.Interior.Color = "Wheat"
    Document.WebChart.Charts(0).Interior.Color = "Wheat"
    Document.WebChart.Charts(0).PlotArea.Interior.Color = "CornSilk"
    Document.WebChart.Border.Color = "#B5A689"

End Sub

(7)将数据透视表显示在网页上。
Sub ShowPivotList

    btnSeriesByColumn.disabled = true
    btnSeriesByRow.disabled = true
    btnShowPivotList.disabled = true
    btnClear.disabled = false
    btnShowWebChart.disabled = false
    Document.WebChart.Style.Display = "none"
    Document.WebChart.ScreenUpdating = 0
    Document.PivotTable1.Style.Display = ""
End Sub
(8)将图表显示在网页上
Sub ShowWebChart
    btnSeriesByColumn.disabled = false
    btnSeriesByRow.disabled = false
    btnShowPivotList.disabled = false
    btnClear.disabled = true
    btnShowWebChart.disabled = true
    Document.PivotTable1.Style.Display = "none"
    Document.WebChart.ScreenUpdating = 1
    Document.WebChart.Style.Display = ""
End Sub
(9)在图表上按行来分析。
sub SeriesByRows 
set ch = document.webchart.charts(0) 
ch.setdata 0, 0, -2 
ch.setdata 1, 0, -1 
ch.setdata 2, 0, 0 
end sub

(10)在图表上按列来分析。
sub SeriesByColumns 
set ch = document.webchart.charts(0) 
ch.setdata 0, 0, -1 
ch.setdata 1, 0, -2 
ch.setdata 2, 0, 0 
end sub
(11)清除数据透视表中的所有内容将其还原。
Sub ClearCube 
Document.PivotTable1.ActiveView.AutoLayout
End Sub
(12)在网页中加入5个按钮,分别调用相应的子程序。
<p align="center">

	<input TYPE="button" id="btnClear" ONCLICK="ClearCube()" VALUE="清除">
	<input TYPE="button" id="btnSeriesByColumn" ONCLICK="SeriesByColumns()" VALUE="按列分析">
	<input TYPE="button" id="btnSeriesByRow" ONCLICK="SeriesByRows()" VALUE="按行分析">
	<input TYPE="button" id="btnShowPivotList" ONCLICK="ShowPivotList()" VALUE="显示数据透视列表">
	<input TYPE="button" id="btnShowWebChart" ONCLICK="ShowWebChart()" VALUE="显示图表">
</p>
(13)最后控制所有程序的执行顺序,这段代码应该放置在数据透视表的上方。
<script for="window" event="onload" language="VBScript">
	PivotVideoCube
	ConfigurePivotList
	FormatPivotList
	ConfigureChart
	FormatChart
	ShowPivotList
</script> <script language="VBScript">

8-2

(1)用下面的代码可以返回一个随机产生的临时文件:
<%
Set FileO = server.CreateObject("Scripting.FileSystemObject") 
TempName = FileO.GetTempName & ".gif"
%>
(2)连接到数据源及执行MDX查询。
<%
Dim sMDX

Dim conMD 
Dim CellSet 
Dim Columns 
set conMD = Server.CreateObject ("ADODB.Connection") 
set CellSet = Server.CreateObject ("ADOMD.Cellset")
' 连接到数据来源,这里读者应该能自行写出连接字串了,如果还不清楚,可以返回本书前面的章节复习一下。

If len(Request("Columns")) = 0 then 
    OnColumns="图书类别" 
Else 
    OnColumns = Request("Columns") 
End if 
If len(Request("Rows")) = 0 then 
    OnRows="书店所在地" 
Else
    OnRows = Request("Rows") 
End if 
If len(Request("Measures")) = 0 then 
    OnMeasures="销售额" 
Else 
    OnMeasures = Request("Measures") 
End if 
sMDX = "SELECT [" + OnColumns + "].CHILDREN ON COLUMNS, " sMDX = sMDX + "[" + OnRows + "].CHILDREN ON ROWS " 
sMDX = sMDX + "FROM " + Session("CubeName") 
sMDX = sMDX + " WHERE (MEASURES.[" + OnMeasures + "]," 
if Request("性别") = "男" then
    sMDX = sMDX + "[性别].[男])" 
ELSEIF Request("性别") = "女" then 
    sMDX = sMDX + "[性别].[女])" 
ELSE 
    sMDX = sMDX + "[性别].[All 性别])" 
END IF 

' 依照用户所选的dimension及measure执行MDX语法到数据来源查询
' 图书销售分析的内容
CellSet.Open sMDX, conMD 

' X坐标有多少字段
columns= CellSet.Axes(0).Positions.Count 
' Y坐标有多少字段

Rows= CellSet.Axes(1).Positions.Count
%>
(3)将查询的结果显示在网页上。
' 显示X坐标标题
<%= CellSet.Axes(0).Positions(column).Members.Item(0).Caption%>

' 显示Y坐标标题
<%= CellSet.Axes(1).Positions(row).Members.Item(0).Caption%>
(4)显示图表
<%
set chartspace1 = createobject("owc.chart") 
set c = chartspace1.constants 
chartspace1.border.color = c.chcolornone 

' 新增一个图表
chartspace1.charts.add 
' 图表的类型
IF Barchecked = "checked" Then  
    chartspace1.charts(0).type = c.chcharttypecolumnclustered 
ELSE 
    chartspace1.charts(0).type = c.chcharttypepie 
End if 
row=0 
column=0 
Do While Column < Columns 
 chartspace1.charts(0).seriescollection.add   
    chartspace1.charts(0).seriescollection(Column).caption =    
    CellSet.Axes(0).Positions(column).Members.Item(0).Caption 
    chartspace1.charts(0).seriescollection(Column).setdata c.chdimcategories, 
    c.chdataliteral, rgCategories
    Do While Row < Rows 
        rgValues(Row)= CellSetItem(column,row) Row=Row+1 
    Loop 
chartspace1.charts(0).seriescollection(Column).setdata c.chdimvalues, c.chdataliteral,rgValues 
Column=Column+1 Row=0 
Loop 
' 是否要出现长条图说明,true表示要出现
chartspace1.charts(0).haslegend = true 
chartspace1.exportpicture Session("ChartPath") + tempname, "gif", 640, 420 cellset.Close 
conMD.Close
%>

8-3

接,以传递下面几个参数:
ColumnASP:
ColumnExtASP:
RowASP:
RowExtASP:
MeasureASP:
ColumnDrillDownASP:将X坐标展开
RowDrillDownASP:将Y坐标展开
ColumnLevelsDrillDownASP:
RowLevelsDrillDownASP:
(3)用户单击展开所要执行的MDX语句。
' 如果按下X轴的细项展开后,令ColumnDrillDown的值为Yes
If len(Request("ColumnDrillDownASP")) = 0 then
ColumnDrillDown="No"
Else 
    ColumnDrillDown=Request("ColumnDrillDownASP")
End if

' 如果按下Y轴的细项展开后,令RowDrillDown的值为Yes
If len(Request("RowDrillDownASP")) = 0 then
RowDrillDown="No"
Else
RowDrillDown=Request("RowDrillDownASP")
End if

' **************************************************************
' 按照所选取的坐标轴的细目展开,指定其所要执行的MDX语句
' **************************************************************

sMDX=null

' X或Y轴都没有按细目展开时所执行的MDX语法
If ((ColumnDrillDown = "No") and (RowDrillDown = "No")) then 
sMDX = "SELECT {[" + OnColumns + "].CHILDREN, [All " + OnColumns 
+ "]} ON COLUMNS, " 
sMDX = sMDX + "{[" + OnRows + "].CHILDREN, [All " + OnRows + "]} 
ON ROWS " sMDX = sMDX + "FROM " + Session("CubeName") 
sMDX = sMDX + " WHERE (MEASURES.[" + OnMeasures + "]," 

' X及Y轴都细目展开时所执行的MDX语法
elseif ((ColumnDrillDown = "Yes") and (RowDrillDown = "Yes")) then 
OnColumns=request("ColumnASP") 
OnRows=request("RowASP") 
OnColumnsExt=request("ColumnExtASP") 
OnRowsExt=request("RowExtASP") 
OnMeasures=request("MeasureASP") 
sMDX = "SELECT {[" + OnColumns + "].[" + OnColumnsExt + 
"].CHILDREN, [All " + OnColumns +"]} ON COLUMNS, "
sMDX = sMDX + "{[" + OnRows + "].[" + OnRowsExt + "].CHILDREN, 
[All " + OnRows +"]} ON ROWS " 
sMDX = sMDX + "FROM " + Session("CubeName") 
sMDX = sMDX + " WHERE (MEASURES.[" + OnMeasures + "]," 

' X轴细目展开,Y轴都没有细目展开时所执行的MDX语法
elseif ((ColumnDrillDown = "Yes") and (RowDrillDown = "No")) then 
OnColumns=request("ColumnASP") 
OnRows=request("RowASP") 
OnColumnsExt=request("ColumnExtASP") 
OnRowsExt=request("RowExtASP")
OnMeasures=request("MeasureASP") 
sMDX = "SELECT {[" + OnColumns + "].[" + OnColumnsExt + 
"].CHILDREN, [All " + OnColumns +"]} ON COLUMNS, " 
sMDX = sMDX + "{[" + OnRows + "].CHILDREN, [All " + OnRows + "]} 
ON ROWS " 
sMDX = sMDX + "FROM " + Session("CubeName") 
sMDX = sMDX + " WHERE (MEASURES.[" + OnMeasures + "]," 

' Y轴细目展开,X轴都没有细目展开时所执行的MDX语法
else 
OnColumns=request("ColumnASP") 
OnRows=request("RowASP") 
OnColumnsExt=request("ColumnExtASP") 
OnRowsExt=request("RowExtASP") 

OnMeasures=request("MeasureASP") 
sMDX = "SELECT {[" + OnColumns + "].CHILDREN, [All " + OnColumns 
+ "]} ON COLUMNS, " 
sMDX = sMDX + "{[" + OnRows + "].[" + OnRowsExt + "].CHILDREN, 
[All " + OnRows + "]} ON ROWS " 
sMDX = sMDX + "FROM " + Session("CubeName") 
sMDX = sMDX + " WHERE (MEASURES.[" + OnMeasures + "]," 
end if 

' MDX语法的条件
if Request("性别") = "男" then 
sMDX = sMDX + "[性别].[男])" 
ELSEIF Request("性别") = "女" then 
sMDX = sMDX + "[性别].[女])" 
ELSEIF Request("性别") = "NA" then 
sMDX = sMDX + "[性别].[NA])" 
ELSE 
sMDX = sMDX + "[性别].[All 性别])" 
END IF
(4)连接到多维数据集数据源并计算出每一轴线总共有多少Position。
' 连接到Cube数据来源,执行MDX语法查询
conMD.Open Session("MDConnectionString")
CellSet.Open sMDX, conMD  
set Cat.ActiveConnection = conMD 

' X轴的Position数目
columns= CellSet.Axes(0).Positions.Count 

' Y轴的Position数目
Rows= CellSet.Axes(1).Positions.Count
(5)多维数据集的层次数目。
If ColumnDrillDown <> "Yes" and RowDrillDown <> "Yes" then 
  for i = 0 to Cat.CubeDefs.Item(0).Dimensions.Count -1 
    if Cat.CubeDefs.Item(0).Dimensions.Item(i).Name = OnColumns then
       ColumnLevelsDrillDown=Cat.CubeDefs.Item(0).Dimensions.Item(i).
                                                  Hierarchies.Item(0).Levels.Count 
    end if 
    if Cat.CubeDefs.Item(0).Dimensions.Item(i).Name = OnRows then 
       RowLevelsDrillDown=Cat.CubeDefs.Item(0).Dimensions.Item(i).
                                            Hierarchies.Item(0).Levels.Count 
    end if 
  next 

else 
  ColumnLevelsDrillDown=request("ColumnLevelsDrillDownASP")   
  RowLevelsDrillDown=request("RowLevelsDrillDownASP") 
end if
(6)指定cellset中各项目的值。
Column=0 
Row=0 
Do While Column < Columns 
  Do While Row < Rows 
      if isnull(cellset.Item(Column,row)) then 
         CellsetItem(Column,Row)=0 
      elseif OnMeasures <> "百分比" then   
         CellsetItem(Column,Row)=formatnumber(CellSet.Item(Column,row),0)  
      else 
         CellsetItem(Column,Row)=CellSet.Item(Column,row) 
      end if 
      Row=Row+1 
  LOOP 
  Column=Column+1 
  Row=0 
LOOP
(7)以下程序绘出表格,由于程序太长,我们以重点解释。
' 将X及Y轴各member的名称列出
CellSet.Axes(0).Positions(column).Members.Item(0).Caption
CellSet.Axes(1).Positions(row).Members.Item(0).Caption

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -