将文本文件中的多个查询粘贴到 Power BI Desktop

Paste multiple queries from text file into Power BI Desktop

我正在将 SSAS(SQL 服务器分析服务器)表格模型移植到 Power BI Desktop。我在 SSAS 导出(仅在文本文件中)中有大约 200 个查询需要移入 Power BI。我可以一次将一个查询粘贴到 Power BI 的高级编辑器中,但对于 200 个查询,这是一个难题。我正在寻找一种将所有查询一次性导入 Power BI Desktop 的方法。

对于 SSAS 专家,这是从 SSAS 迁移表的尝试 4。 尝试 1 是使用 ALM 工具包,但它不适用于 Power BI Desktop 模型中的表。 尝试 2 是 SSMS 中的 XLMA 脚本,但我什至无法将为 SSAS 模型生成的脚本获取到 SSAS 中的 运行。我收到如下错误:Query (56,129) The syntax for ')' is incorrect. 表格编辑器中的尝试 3 遇到与 SSMS 相同的问题。

所以对于尝试 4,我想我会尝试将多个查询粘贴到 Power Query window。如果我将查询从一个 Power BI 文件移动到另一个,我可以 select 多个查询并在 Power BI 文件之间复制和粘贴它们。如果我查看剪贴板,它看起来像这样:

Format:HTML Format Version: 1.0 StartHTML: 0 EndHTML: 0 StartFragment: 0 EndFragment: 0 
<?xml version="1.0" encoding="utf-8"?>
<Mashup xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://schemas.microsoft.com/DataMashup">
    <Client>PBIDesktop</Client>
    <Version>2.30.4246.1721</Version>
    <MinVersion>2.21.0.0</MinVersion>
    <Culture>en-US</Culture>
    <SafeCombine>true</SafeCombine>
    <Items>
        <Query Name="Server">
            <Formula><![CDATA["text"]]></Formula>
            <LoadToReport>false</LoadToReport>
            <IsParameterQuery>false</IsParameterQuery>
            <IsDirectQuery xsi:nil="true" />
        </Query>
    ...
    </Items>
</Mashup>

所以我的理论是我可以像这样格式化我的文本文件,将其以 HTML 格式填充到剪贴板,然后将其粘贴到 Power Query。到目前为止,我还不能将它作为 HTML 复制到剪贴板。它只复制为文本。它甚至不会作为文本粘贴到 Power Query 中。必须是 HTML.

知道如何将我的文本文件转换成这种格式吗?我一直在尝试 this Python code,但还没有成功。

另一个选项是我是否可以编辑剪贴板。您可以将数据固定在剪贴板历史记录中。如果我能弄清楚它的存储位置,也许我可以在那里添加我的查询?

更新:

我已经放弃了这种方法。 This article shows how the clipboard copies multiple formats at the same time. In my limited testing, I believe it is the "Microsoft Mashup Format," not the "HTML Format" that needs to be populated in order to paste into Power BI. This could also explain why the header in the HTML Format is not conformant and Microsoft doesn't care to fix it.

InsideClipboard tool 对于复制后检查剪贴板以查看 Microsoft 在做什么至关重要。 “Microsoft Mashup 格式”有一个二进制文件 header,它似乎与 2? 的测试一致?改变的字节长度。我的 Python 不够好,无法更改代码,所以我放弃了这种方法。我会将我当前的解决方案放在对此 post.

的回答中

一种更简单的方法是使用 VBA 宏从 Excel Power Query 中的文本文件创建查询,然后手动复制 Excel 查询以粘贴到 Power BI桌面。您可以从“查询和连接”窗格或 Power Query 编辑器中 select 一次 Excel 中的所有查询,并一次性复制它们。

下面是一些 VBA 代码,用于在新文件中创建查询。它要求带有宏的文件在名为“数据源”的 sheet 上有一个名为“Data_sources”的 table,至少有 4 列(数据源名称、数据源查询、服务器, 和数据库):

Sub CreateDataSourceQueries()
    Dim i As Integer
    Dim dswb As Workbook  'New Data Source Workbook
    Dim dst As ListObject 'Table with all data sources
    
    'Create new workbook
    Set dswb = Workbooks.Add
    dswb.ActiveSheet.name = "Data Source Queries"
    dswb.ActiveSheet.Range("A1").Value = "Data Source Queries"
    dswb.ActiveSheet.Range("A2").Value = "Server:"
    dswb.ActiveSheet.Range("A3").Value = "Database:"
    
    'Adding comment because code to set width isn't working
    dswb.ActiveSheet.Range("A5").Value = "To see queries, click: Data > Queries & Connections"
'    With Application.CommandBars("Queries and Connections")
'        .Visible = True
'        .Width = 400     'Doesn't seem to work, but maybe Microsoft will fix it?
'    End With
    
    'Create query in new book for each data source
    Set dst = ThisWorkbook.Sheets("Data sources").ListObjects("Data_sources")
    For i = 1 To dst.DataBodyRange.Rows.Count
        dswb.Queries.Add name:=dst.ListColumns("Data Source Name").DataBodyRange(i), _
                         Formula:=dst.ListColumns("Data Source Query").DataBodyRange(i)
    Next i
    
    'Add info on Server and Database being migrated
    dswb.ActiveSheet.Range("B2").Value = dst.ListColumns("Server Name").DataBodyRange(1)
    dswb.ActiveSheet.Range("B3").Value = dst.ListColumns("Database Name").DataBodyRange(1)
    
End Sub