日期:2014-05-16 浏览次数:20456 次
检查 PowerPivot 内存占用,适用 Excel 2013。
Option Explicit Sub GetMemoryUsage() Dim wbTarget As Workbook Dim ws As Worksheet Dim rs As Object Dim lRows As Long Dim lRow As Long Dim sReportName As String Dim sQuery As String sReportName = "Memory_Usage" 'Suppress alerts and screen updates With Application .ScreenUpdating = False .DisplayAlerts = False End With 'Bind to active workbook Set wbTarget = ActiveWorkbook 'Check if a worksheet already exists Err.Clear On Error Resume Next Set ws = wbTarget.Worksheets(sReportName) If Err.Number = 0 Then 'Worksheet found If MsgBox("A memory usage sheet workbook is already detected, " & _ "do you want to remove the existing one and continue?", vbYesNo) = vbYes Then ws.Delete Else GoTo ExitPoint End If End If On Error GoTo ErrHandler 'Make sure the model is loaded wbTarget.Model.Initialize 'Send query to the model sQuery = "SELECT dimension_name, attribute_name, DataType,(dictionary_size/1024) AS dictionary_size " & _ "FROM $system.DISCOVER_STORAGE_TABLE_COLUMNS " & _ "WHERE dictionary_size > 0" Set rs = CreateObject("ADODB.Recordset") rs.Open sQuery, wbTarget.Model.DataModelConnection.ModelConnection.ADOConnection lRow = rs.RecordCount If lRow > 0 Then 'Add report worksheet Set ws = wbTarget.Worksheets.Add With ws .Name = sReportName .Range("A1").FormulaR1C1 = "Table" .Range("B1").FormulaR1C1 = "Column" .Range("C1").FormulaR1C1 = "DataType" .Range("D1").FormulaR1C1 = "MemorySize (KB)" lRows = 2 rs.MoveFirst Do While Not rs.EOF 'Add the data to the rows .Range("A" & lRows).FormulaR1C1 = rs("dimension_name") .Range("B" & lRows).FormulaR1C1 = rs("attribute_name") .Range("C" & lRows).FormulaR1C1 = rs("DataType") .Range("D" & lRows).FormulaR1C1 = rs("dictionary_size") lRows = lRows + 1 rs.movenext Loop 'Format the Memory Size field .Columns("D:D").NumberFormat = "#,##0.00" 'Create table .ListObjects.Add(xlSrcRange, .Range("$A$1:$D$" & lRow + 1), , xlYes).Name = "MemorySizeTable" End With 'Create PivotTable wbTarget.PivotCaches.Create(SourceType:=xlDatabase, _ SourceData:="MemorySizeTable", _ Version:=xlPivotTableVersion15).CreatePivotTable _ TableDestination:="Memory_Usage!R2C7", _ TableName:="MemoryTable", _ DefaultVersion:=xlPivotTableVersion15 'Modify the PivotTable With ws With .PivotTables("MemoryTable") With .PivotFields("Table") .Orientation = xlRowField .Position = 1 .AutoSort xlDescending, "Sum of MemorySize (KB)" End With With .PivotFields("Column") .Orientation = xlRowField .Position = 2 .AutoSort xlDescending, "Sum of MemorySize (KB)" End With .AddDataField .PivotFields("MemorySize (KB)"), "Sum of MemorySize (KB)", xlSum .PivotFields("Table").AutoSort xlDescending