具有超过 100 万条记录的文件中具有强大查询结果的 Unpivot 文件

Unpivot file with power query results in file with more than 1 million records

在逆透视过程完成之前是否有机会拆分文件?我曾尝试做相反的事情,即拆分文件然后取消透视它,但由于我必须处理 20 多个文件并且我无法编写功能宏,因此需要太多时间做这项工作。 我必须实现它,因为我必须将文件加载到另一个没有反旋转功能的软件中,而且我无法直接访问他们的数据库以进行 运行 任何查询。

使用 VBA 有一个可能的解决方案。在这种方法中,您需要:

  1. 将 Power Query table 加载到 Power Pivot 工作簿数据模型中
  2. 使用 VBA
  3. 从工作簿数据模型中获取数据
  4. 将记录写入 CSV 文件

下面是一步一步的操作方法。

为了校对,我使用以下代码在 Power Query 中创建了一个包含 300 万行的虚拟 table,并将其命名为 "MyData"。

// MyData: A table of 3 million rows

let RowCount = 3000000
in Table.FirstN(
    Table.FromColumns({
        List.Generate(() => 1, each true, each _ + 1),
        List.Generate(() => Number.Random() * 1000, each true, each Number.Random() * 1000)
    }, type table [ID = Int64.Type, RandomNumber = number]),
    RowCount
)

我通过选择关闭并加载到,然后选择仅创建连接,将此table加载到工作簿数据模型中并检查将此数据添加到数据模型

然后,使用下面的 VBA 代码,我能够连接到数据模型,获取记录,并将其转储到 CSV 文件中。

Const OutFile As String = "C:/path/to/MyData.csv"

Dim Wb As Workbook
Set Wb = Application.ActiveWorkbook

Wb.Model.Initialize

'Connection to the Data Model
Dim Conn As Object 'ADODB.Connection
Set Conn = Wb.Model.DataModelConnection.ModelConnection.ADOConnection

Dim Recordset As Object 'ADODB.Recordset
Set Recordset = CreateObject("ADODB.Recordset")

Dim Query As String
Query = "EVALUATE MyData" 'DAX query to return the entire table

Recordset.Open Query, Conn

Dim FileNum: FileNum = FreeFile()
Open OutFile For Output As #FileNum

Do While Not Recordset.EOF
    Write #FileNum, Recordset("MyData[ID]"), Recordset("MyData[RandomNumber]")
    Recordset.MoveNext
Loop

Close #FileNum