2016-07-26 27 views
1

美好的一天。 在过去的8个小时内,我正在寻找Access 2007中的数据透视替代方案,因为我们的Citrix帐户(OWC10.dll)中没有提供参考dll。所以我尽我的全力去研究这个方法,但到目前为止我什么都没有,所以我认为它有一点帮助。使用VBA访问数据的其他方法

什么我这里是原始数据的样本..

enter image description here

这是最终的结果我找了,枢轴表,其中当然也可以在观看形式(最佳解决方案)或提取的excel文件。

enter image description here

enter image description here

所以基本上,我需要显示:

  • 多少,他们工作时间每天
  • 他们有多少工作的每一天。

我试着TRANSFORM Statement/Crosstab,我得到的错误是有太多的行使它成为一个列,因为我确实有20,000+行 - 30天/月*工作的人。 - DISTINCT他们,但我不知道如何?

我在我们的系统中没有.dll文件,所以正常的摆动是没有问题的。有谁知道可以给我这些显示结果的替代品吗?

+0

请添加你试过的TRANSFORM查询到你的问题。 ---你在数据中有多少个不同的日子(做一个查询'SELECT DISTINCT ProcessDate FROM yourTable'并滚动到底部)? – Andre

+0

对不起,我只有谷歌的代码,并把它放在一个模块中,然后像这样使用它'Print Transforms(“Table”,“column”)'我记得,它循环遍历这个列中的所有字段并添加它作为一个新的专栏。因为它太多了,它返回的错误 - 它来自微软网站,不能再次找到它。 我还没有真正研究交叉表,因为我仍在寻找替代品。但要回答你的问题,不同的日子取决于人们在那一天做了多少作品。例如,我目前的原始数据在6月份有25k行。 – AdorableVB

+0

除非SQL Server是一个选项,否则实际上除了交叉表查询或数据透视表(在Access 2010之后不推荐使用)之外别无其他。我建议你创建一个提供6月份所有行的查询,然后在其上运行交叉表查询向导。这些数据非常适合TRANSFORM。 – Andre

回答

0

对于其他与我一样麻烦的人。我使用了CrossTab。 使用查询向导非常容易理解。下面是编辑的SQL查询,以适应我的需要:

TRANSFORM format(Sum(MyCopy.[Duration]), "hh:mm:ss") AS SumOfDuration 
SELECT MyCopy.[UserID].[FullName], MyCopy.[TL], Sum(MyCopy.[Duration]) AS [Total Of Duration] 
FROM MyCopy 
Group BY MyCopy.[UserID], MyCopy.[FullName], MyCopy.[TL] 
PIVOT MyCopy.[Process Date]; 

注意:为报告目的,它非常容易提取此查询。我确实使用了format,这样它就不会看到小数点。显然,MS Access不会给出答案的实际数字,但相同的百分比。当sum of total duration通过24小时时它解决不同。所以我把它留在十进制格式中,以显示正确的数字。

0

你需要做的是编译你需要的数据查询,并将其推送到excel中,然后以编程方式在excel中建立一个数据透视表。

我几乎所有的东西都使用ADO - 所以我在这里得到的语法反映了这一点;如果你是DAO,你需要翻译它。

sql = _ 
    "SELECT Name, ProcessDate, HandlingTime " & _ 
    "FROM tbl ... WHERE ..." 

GenerateSimplePivot(excel_path&file_name_to_create, sql, 2) 


Private Sub GenerateSimplePivot(xname As String, auditData As String, _ pivotColumns As Long) 
    Dim ii  As Long 
    Dim XL  As Object 
    Dim WB  As Object 
    Dim WS1  As Object 
    Dim WS2  As Object 
    Dim rst  As ADODB.Recordset 

    'create/assign xl objects 
    Set XL = CreateObject("Excel.Application") 
    XL.Visible = False 
    XL.DisplayAlerts = False 
    Set WB = XL.Workbooks.Add 
    Set WS1 = WB.Worksheets(1) 

    Set rst = New ADODB.Recordset 
    rst.Open auditData, CurrentProject.Connection, adOpenKeyset, adLockReadOnly 

    For ii = 0 To rst.Fields.Count - 1 
     WS1.Cells(1, ii + 1) = rst.Fields(ii).Name 
    Next 

    WS1.Range("A2").CopyFromRecordset rst 
    WS1.Columns.Autofit 
    WS1.Name = "AuditData" 

    For ii = 0 To rst.Fields.Count - 1 
     'add column formatting logic here, if required 
    Next 
    rst.Close 

    If WB.Worksheets.Count < 2 Then 
     Set WS2 = WB.Worksheets.Add(, WB.Worksheets(WB.Worksheets.Count)) 
    Else 
     Set WS2 = WB.Worksheets(2) 
    End If 

    WS2.Name = "PivotTable" 

    DoCmd.SetWarnings False 

    Dim PTcache  As Object 
    Dim pt   As Object 

    WS1.Activate 

    Set PTcache = WB.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=WS1.Range("A1").CurrentRegion.Address) 
    Set pt = PTcache.CreatePivotTable(TableDestination:=WS2.Range("a6"), TableName:="PivotTable ") 

    WS2.Activate 

    With pt 
     For ii = (pivotColumns - 3) To 2 Step -1 
      .PivotFields(ii).Orientation = xlPageField 
     Next 
     On Error Resume Next 
     .PivotFields(1).Orientation = xlPageField 
     Err.Clear 
     ON Error GoTo [error handler label] 
     .PivotFields(pivotColumns - 2).Orientation = xlRowField 
     .PivotFields(pivotColumns - 1).Orientation = xlColumnField 
     .PivotFields(pivotColumns).Orientation = xlDataField 
    End With 

    WB.SaveAs FileName:=xname 
    WB.Close 
    Set WS1 = Nothing 
    Set WS2 = Nothing 
    Set PTcache = Nothing 
    Set pt = Nothing 
    Set WB = Nothing 
    XL.Quit 

    DoCmd.SetWarnings True 
    Set rst = Nothing 
    Set WS1 = Nothing 
    Set WS2 = Nothing 
    Set PTcache = Nothing 
    Set pt = Nothing 
    Set WB = Nothing 
    Set XL = Nothing 
End Sub 

这是你之后?

+0

我相信这就是数据显示应该是这样的,但我已经有使用交叉表查询的问题的解决方案 - 通过我可以获取计算所需的值,然后仅导出该查询以用于报告目的。抱歉,我没有发布答案,因为我无法访问我办公室中的任何网站。但我会看看这个,而不是导出xtab查询。谢谢 – AdorableVB