如何从PowerQuery模型中将合并数据导出为.dat文件?
从PowerQuery数据模型导出3500万行数据为.dat文件的可行方法
针对你已合并到数据模型的大规模数据集,以下是几种高效的导出方案:
方案1:PowerQuery编辑器直接导出(备选,大数据量需谨慎)
- 打开PowerQuery编辑器,通过「获取数据」>「从数据模型」选择合并后的表,加载到编辑器中
- 若数据量未超出Excel工作表行限制,可将数据加载到工作表后,通过「文件」>「另存为」选择「文本文件(*.txt)」,保存后手动将扩展名改为
.dat - 部分PowerQuery版本支持直接导出功能,可在编辑器中找到「导出」选项选择文本格式,再修改扩展名
方案2:VBA批量导出(推荐大数据量场景)
3500万行属于超大规模,手动导出易崩溃,VBA可通过分批写入避免内存溢出:
Sub ExportDataModelToDat() Dim conn As WorkbookConnection Dim rs As Object Dim fso As Object Dim ts As Object Dim strPath As String Dim strDelimiter As String Dim i As Integer ' 自定义导出参数 strPath = "C:\Your\Target\Path\CombinedData.dat" ' 修改为你的导出路径 strDelimiter = "|" ' .dat常用分隔符,可替换为vbTab或其他字符 Set conn = ThisWorkbook.Connections("YourTableConnectionName") ' 替换为数据模型中表的连接名 ' 初始化ADODB记录集 Set rs = CreateObject("ADODB.Recordset") rs.Open conn.OLEDBConnection.CommandText, conn.OLEDBConnection.Connection ' 初始化文件写入对象 Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.CreateTextFile(strPath, True, True) ' 启用UTF-8编码 ' 写入表头 For i = 0 To rs.Fields.Count - 1 ts.Write rs.Fields(i).Name If i < rs.Fields.Count - 1 Then ts.Write strDelimiter Next i ts.WriteLine ' 分批写入数据,每10000行刷新一次 Do While Not rs.EOF For i = 0 To rs.Fields.Count - 1 ts.Write rs.Fields(i).Value If i < rs.Fields.Count - 1 Then ts.Write strDelimiter Next i ts.WriteLine rs.MoveNext ' 每10000行关闭再打开文件,释放内存 If rs.AbsolutePosition Mod 10000 = 0 Then ts.Close Set ts = fso.OpenTextFile(strPath, 8, True, True) ' 8=追加模式 End If Loop ' 清理资源 ts.Close rs.Close Set ts = Nothing: Set fso = Nothing: Set rs = Nothing: Set conn = Nothing MsgBox "导出完成,文件路径:" & strPath, vbInformation End Sub
操作步骤:
- 按
Alt+F11打开VBA编辑器,插入新模块 - 替换代码中的路径、分隔符和连接名(连接名可在Excel「数据」选项卡>「连接」中查看)
- 运行宏,等待导出完成(建议使用64位Excel,确保有足够内存)
方案3:DAX Studio导出(专业数据模型工具)
- 安装DAX Studio后,打开并连接到你的Excel文件数据模型
- 编写DAX查询:
EVALUATE YourTableName(替换为你的合并表名) - 点击界面上的「导出」按钮,选择「文本文件」,设置文件扩展名为
.dat,指定分隔符和编码 - 执行导出,DAX Studio针对数据模型优化,处理大规模数据更稳定
注意事项
- 3500万行数据导出后文件体积巨大,确保目标磁盘有足够存储空间
- 优先使用64位版本的Excel/DAX Studio,避免32位程序的内存限制
- 若导出时出现内存错误,可通过DAX查询拆分数据(如按日期范围),分批导出后再合并文件
内容的提问来源于stack exchange,提问作者Adnan Tamimi
相关产品推荐
相关产品推荐

