将Power BI桌面模型导入SSAS Tabular 2016

将Power BI模型导入SSAS表格

注意: 本文已于2017年6月更新,以支持Power BI Desktop和SSAS Tabular 2017的最新版本。

2020年7月更新:虽然此方法仍可用于Power BI Desktop 2017年6月版和SSAS 2017,但可能无法’不能与Power BI Desktop的更高版本(2020年7月)和SSAS 2019一起使用,因为Power BI Desktop中提供了新的DAX功能,但SSAS 2019中没有。因此,请使用此方法作为实验方法,避免自己承担风险!

您是否已在Power BI Desktop中创建了健壮的模型,并且正在寻找一种将其导入到SQL Server Analysis Services表格实例的方法?嗯,如果您可以将Power BI模型导入SSAS Tabular,那将是非常有益的,并且可以节省大量的开发时间和成本。好消息是,有了SQL Server 2016和用于Visual Studio 2015的SQL Server数据工具,这是可能的。在本文中,我将向您展示如何将Power BI Desktop模型导入SSAS Tabular2016。不幸的是,您无法在任何早期版本的SQL Server,SQL Server Management Studio或SSDT中执行此工作。

要求

  • SQL服务器 2016 Tabular: 您 can download SQL服务器 2016 Developer Edition for free. 查看此以获取更多信息
  • SQL服务器 Management Studio(SSMS)2016:从以下版本的SSMS 2016开始 这里
  • SQL服务器 Data Tools for Visual Studio 2015 (SSDT 2015): 您 can download it 这里
  • Power BI桌面:从以下位置下载Power BI Desktop 这里

这个怎么运作?

这个想法是为了

  1. 从SSMS 2016连接到Power BI Desktop模型
  2. 编写模型脚本
  3. 修改脚本
  4. 在SSAS Tabular 2016的本地实例上执行脚本
  5. 在SSDT 2016中打开新的SSAS表格数据库
  6. 修改模型
  7. 重新部署和处理模型

注意: 在将模型完全导入到SSAS Tabular中之前,请不要关闭Power BI Desktop。

假设条件

我假设

  • 您’熟悉上面列出的所有必需工具
  • 您’熟悉SQL Server Analysis Services表格模型以及任何相应的概念,安全设置等
  • 您’重新熟悉DAX和Power Query

创建一个新的Power BI Desktop示例模型

我的第一拳’d而是创建一个新的示例Power BI Desktop模型。如果您已有模型,请忽略此部分,然后转到下一部分。为了创建示例,我使用了新的SQL Server示例数据库,名为“全球进口商DW”。您可以从下载 这里 并将其还原到SQL Server 2016实例中。

  • 打开Power BI桌面
  • 从SQL Server获取数据

    Power BI桌面获取数据

  • 选择“Fact.Sales”, click “选择相关表” then click “Load”

    Power BI桌面获取数据

注意: 实际上,在一个实际项目中,我们的Power BI Desktop模型中总是有很多DAX公式,计算的度量和计算的列等。我们在Power Query中也进行了一些转换,例如添加了条件列,拆分列等…因此,我添加了一些简单的计算量度,即使用DAX的计算列。在接下来的步骤中,我还将Power Query中的一列分为两列。

  • 将以下措施添加到“Fast Sales” table:
    • 总利润=总和(‘Fact Sale'[Profit])
    • 总数量=总和(‘事实销售” [[数量])
    • 总营业税税额=总和(‘事实销售”([不含税总额])
    • 总营业税公司=总和(‘事实销售'(含税总额))
  • 添加一个计算列,如下所示:
    • 销售额=‘事实销售'[数量] *’事实销售'[单价]

    Power BI桌面表

  • 打开“Query Editor”
  • 请点击“Dimension 雇员”
  • 分裂“Employee”区分员工姓和名的列

    Power BI桌面查询编辑器

    Power BI桌面 分裂Column

    Power BI桌面 分裂Column

  • 关& Apply
  • 将模型另存为PBIX

将Power BI桌面模型导入SSAS Tabular 2016

到目前为止,我们创建了一个非常简单的模型。现在我们’将使用SSMS 2016将其导入SSAS Tabular。

  • 从SSMS 2016连接到Power BI Desktop模型。’不知道该怎么做 看一下这个.

    SSMS连接到Power BI桌面

  • 编写数据库脚本

    SSMS中的脚本Power BI桌面模型

  • 如您所见,数据库名称是一个随机的GUID,您不会’想要使用GUID名称创建SSAS表格数据库。因此,用有意义的字符串替换数据库名称和ID

    SSMS中的脚本Power BI桌面模型

    SSMS中的脚本Power BI桌面模型

  • 复制脚本
  • 连接到SSAS表格实例
  • 打开一个新的XMLA查询
  • 粘贴脚本(生成的脚本不再是XMLA,实际上是JSON)
  • 执行脚本

将Power BI桌面模型导入SSAS表格

瞧!

我们已成功将Power BI Desktop模型导入SSAS Tabular 2016,但是尚未完成。如果您处理数据库失败,那么我们需要解决问题。您可能已经猜到,我们需要更改的第一件事是数据源。当然,您可以从SSMS 2016修改数据源,但是请记住,我们也在“ Dimension 雇员”表中进行了一些更改。这些Power Query更改会导致数据库处理失败。要解决此类问题,最好的方法是将SSAS表格模型导入SSDT 2015,修复问题,部署和处理数据库。

重要更新(2017年6月):

更新1:

复制并粘贴脚本后,请格外注意“ CompatibilityLevel”行。这一点很重要,因为Power BI Desktop的更高版本支持CompatibilityLevel14。因此,如果要在SSAS Tabular 2017实例中运行脚本,则无需更改CompatibilityLevel。但是,如果您在SSAS Tabular 2016实例中运行脚本,则需要将CompatibilityLevel更改为SSAS 2016支持的12。如果您不将CompatibilityLevel更改为12,则在SSAS Tabular 2016中运行生成的脚本那么您将收到以下错误消息:

“ JSON DDL请求失败,并出现以下错误:无法执行JSON脚本。返回错误:1400不是此元素的有效值。”

返回错误:1400不是此元素的有效值

将CompatibilityLevel更改为12后,脚本应成功运行。

图片

更新2:

如果您使用以下脚本编写数据库脚本 SSMS 2017 并尝试在SSAS Tabular 2016实例上运行它,则可能会收到以下错误消息:

JSON DDL请求失败,出现以下错误:无法识别的JSON属性:isPrivate。检查路径‘model.tables [0] .isPrivate’,

错误:无法识别的JSON属性:isPrivate。

如您所见,错误消息抱怨“ isPrivate” JSON属性。显然,“ isPrivate”是一个新的JSON属性,旧版本的SSAS Tabular模型不支持该属性。

因此,您需要在脚本中搜索“ isPrivate”并标记该行,然后运行脚本,希望您不会收到任何其他错误消息。

在SSMS 2017中生成脚本的另一个发现是,如果在Power BI Desktop选项的“时间智能”设置下启用了“自动日期/时间”,它将为具有日期或日期/的模型中的每个字段自动创建隐藏的日期维度。时间数据类型。因此,当选择了日期或日期列/时间数据类型,功率BI会自动选择从自动生成隐藏日期维度的相关日期列。在Power BI Desktop中选择日期列时,它会变得更加有趣,它会自动创建日期层次结构。使用称为“变量”的功能可以实现这一点。此功能在SSAS Tabular 2017中也可用。至于在SSMS 2017中生成Power BI Desktop模型的脚本时,它会为``Variation''功能生成JSON代码。此功能在SSAS Tabular 2016中不可用,因此在SSAS Tabular 2016实例中运行脚本时,会出现以下错误消息:

JSON DDL请求失败,出现以下错误:无法识别的JSON属性:变体。检查路径‘model.tables [0] .columns [1] .variations’

错误:无法识别的JSON属性:变体。

要解决此问题,您需要从脚本中删除所有“变量”块,这可能是一个耗时的过程。

如果在SSAS Tabular 2017实例中运行相同的脚本,则不会收到上述任何错误消息。

结论:

如果要将Power BI Desktop模型导入SSAS Tabular 2016,则建议您使用SSMS 2016生成脚本,然后在SSAS Tabular 2016中运行。但是,如果要将模型导入SSAS Tabular 2017,请使用SSMS 2017没问题。

将SSAS表格模型导入SSDT 2015

  • 打开SSDT 2015
  • 创建一个新项目
  • 选择“Import from Server (Tabular)
  • 输入项目名称,然后单击“确定”。将SSAS表格模型导入SSDT
  • 在“表格模型设计器”中输入SSAS表格服务器名称
  • 测试连接,然后单击确定将SSAS表格模型导入SSDT
  • 选择您最近从Power BI Desktop导入的数据库,然后单击“确定”。将SSAS表格模型导入SSDT

模型中有什么

到目前为止,我们已经成功地从SSAS Tabular服务器导入了模型。在接下来的步骤中,我们将解决所有问题,将模型重新部署到服务器并处理数据库。但是,让我们看看从Power BI Desktop导入的模型中我们有什么。您还记得我们在“事实销售”表中创建了一些计算得出的指标和计算出的列。让我们看看将模型导入SSAS Tabular服务器之后,这些计算对象发生了什么。在“事实销售”表中,您会立即注意到所有计算出的度量均已存在。滚动到右侧,您将看到计算列也已成功导入。真的很酷,不是吗? 微笑

将SSAS表格模型导入SSDT

将SSAS表格模型导入SSDT

让我们看看在“ Dimension 雇员”中进行的Power Query更改发生了什么。打开“维度员工”。我们将“员工”列分为两列,“名”和“姓”。

分裂Column

好的,SSAS表格模型中同时存在“名字”和“姓氏”。

将SSAS表格模型导入SSDT

让我们在“ Dimension 雇员”表中查看幕后发生的情况。从“表格”菜单中单击“表格属性”。

SSAS表格表属性

不管我们收到的错误消息如何,只要查看一下SQL语句,您就可以快速发现问题。我们尚未修改数据源,因此在“表属性”中获取错误消息很简单。

SSAS表格表属性

这是一个“ SELECT * FROM”查询,因此我们将从源表中获取所有列,并且源表中不包含“名字”和“姓氏”。因此,我们在Power Query中所做的一切都是无用的,因为我们需要重做所有这些。

切换到“示意图”视图以查看模型图。

SSAS表格模型图

如您所见,原始Power BI Desktop模型中也没有很多隐藏表。但是,它们来自哪里?单击这些表,然后查看公式。

SSAS表格中的计算表

好吧!我们创建了多个日期维度来支持自动日期层次结构, Power BI桌面 11月更新。我们有太多隐藏的日期表的原因是Power BI Desktop为模型中的每个日期列创建了一个计算的日期表。查看模型图,以查看每个日期维与一列日期/时间数据类型之间存在一对多关系。例如,选择“ Dimension City”表并查看链接到它的两个隐藏表。

SSAS表格中的关系

让我们前进并解决所有问题。

解决问题

  • 从“模型”菜单中单击“现有连接”

SSAS表格形式的现有连接

  • 选择a connection from the list

SSAS表格形式的现有连接

  • 请点击“Edit” and modify the connection to point to you source database in SQL服务器. In my sample it is “全球进口商DW”
  • 不要忘记设置“模拟”
  • 保存连接

SSAS表格形式的现有连接

  • 对所有其他连接重复相同的过程

SSAS表格形式的现有连接

  • 选择a table then open “Table Properties”

SSAS表格编辑表属性

  • 请点击“Validate”
  • 您可能会收到一条错误消息,指示SQL语句有问题。查看SQL语句,解决问题,然后单击“确定”

SSAS表格编辑表属性

  • 在我的示例中,问题是表名。如您在上面的屏幕截图中所见,SQL语句正在查询[全球进口商DW]数据库中不存在的[Dimension City]。这就是我最初在Power BI Desktop中命名表的方式。用正确的查询替换查询可解决此问题。

SSAS表格编辑表属性

您需要对所有表重复相同的过程。如前所述,您使用Power Query在模型中所做的所有更改在SSAS Tabular中都是无用的。因此,这是我必须编写的SQL语句,以对“ 雇员”表执行相同的操作,以将“ 雇员”列拆分为“ First Name”和“ Last Name”。对于不同的情况这将是不同的。

SSAS表格编辑表属性

SSAS表格数据视图

解决所有问题后,我们可以处理数据库。

SSAS表格处理已满

您 can now deploy the fixed model to SSAS Tabular server.

结论

尽管可以将Power BI Desktop导入SSAS Tabular 2016,但是任何Microsoft BI工具都未正式支持它。因此,应考虑将Power BI Desktop模型导入SSAS Tabular作为从头开发SSAS Tabular 2016模型的替代方法。总而言之,这实际上取决于您的情况。该方法可能不适合您的情况的原因是:

  • Power BI桌面的更新比SSAS Tabular 2016更加定期,因此在某些情况下,您可能会遇到Power BI和SSAS Tabular 2016之间的DAX版本不兼容
  • 如前所述,Power Query转换不会导入到SSAS Tabular 2016模型中。因此,如果您在模型中进行了复杂的Power Query转换(例如几个用户定义的函数,查询参数等),那么最终将需要从头开始开发新的SSAS表格模型。

另一方面,如果您的项目预算太紧,或者您没有为项目分配足够的资源,并且Power BI Desktop模型中没有很多复杂的转换,则可以使用此方法将模型导入SSAS Tabular 2016将为您节省大量时间和预算。

25 thoughts on “将Power BI桌面模型导入SSAS Tabular 2016

    1. 非常好的帖子!
      我有一个通过使用实时连接方法连接到Power BI Service创建的初始Power BI Desktop报告。
      有什么办法可以将其推向SSAS吗?

      1. 嗨,Kranthi,

        欢迎来到BIInsight.com。
        在Power BI Service中的数据集之上创建报表时,’将Power BI数据集视为您的语义模型。就像当您实时连接到SSAS表格模型的实例时一样。从这个意义上说’仅当数据模型保留在Power BI Service的数据集中时,才可以将Power BI Desktop用作报表创作工具。
        所以说你很有意义 ’d想要将Power BI Service中的数据集导入到SSAS Tabular。从这种意义上讲,您需要从Power BI Service下载数据集,并使用本文中介绍的方法将模型导入SSAS Tabular。

        希望能有所帮助,
        干杯

          1. 嗨,Kranthi,

            欢迎来到BIInsight.com。
            如果您的工作区有高级功能支持,那么一种简单的方法是通过XMLA端点使用SSMS连接到数据集,那么其余部分将与您非常相似’我已经在此博文中学习到了,编写模型脚本并进行休息…
            如果没有高级功能支持,则一种方法是下载报告(如果您有足够的权利这样做),请在Power BI Desktop中打开PBIX文件,然后其余步骤与本博客文章中介绍的过程相同。

            希望能有所帮助。
            干杯。

  1. 好吧,即使在2019年仍然是一个非常不错的帖子!
    我仍然在这里有一个问题:在本节中“将Power BI桌面模型导入SSAS Tabular 2016”接着是您对该段落的更新:

    你能告诉我说的是什么意思吗“Variations” blocks? I’我真的迷路了!我必须解决这个问题…

    1. 好吧,我通过评论被吸引了-唐’不要在回复中使用XML注释,哈哈。

      这是我所指的缺失部分:

      “ JSON DDL请求失败,并出现以下错误:无法识别的JSON属性:变体。检查路径“ model.tables [0]。列[1] .variations””

      要解决此问题,您需要从脚本中删除所有“变量”块,这可能是一个耗时的过程。

    2. 嗨,您好,

      欢迎来到BIInsight.com。
      很高兴看到您发现这篇文章很有帮助。
      关于“Veriations”,如文章中所述,在Power BI Desktop中使用“自动DateTime”选项时,它将自动创建隐藏的日期表。
      因此,您的模型最终会有一些隐藏的日期表来支持​​Power BI中的时间智能。
      这些隐藏日期维的数量取决于具有Date或DateTime数据类型的列数。
      Power BI为每个Date或DateTime列生成一个单独的表。
      怎么办“Variation”是,它是一项功能,使您可以在“日期”列顶部创建日期层次结构。
      该功能原本是’在SSAS Tabular 2016中可用,因此您会收到该讨厌的错误。
      看一下“Hierarchy & column reuse” section of 本文.

      希望我没有’会让你更加困惑。 --
      干杯。

  2. 我设法将PBI多维数据集连接到本地SSMS,但是脚本在名称列之后没有id列。兼容性级别1465之后只是兼容性列。它会影响迁移的数据库吗?

  3. 当我尝试打开新的XMLA查询时,即使您确实连接到它,它也会要求我再次连接到SSAS。当我过去并尝试执行查询时,它给了我错误 “在解析过程中发生以下语法错误:无效的令牌,行178,偏移量13,]。”在脚本的那一行上只有[],仅此而已。任何人都知道导致问题的原因是连接还是脚本,或者两者都有?

  4. 你好

    非常感谢。
    我设法生成了脚本,但是当我在SSAS Tabular的本地实例中执行此脚本时,出现以下错误消息:
    发生以下系统错误:不支持该请求。
    用户请求中每个结束会话标头取消了会话。

    知道我做错了什么吗?

    谢谢,
    萨米

  5. 你好
    我的powerbi项目链接到mysql localhost DB。
    我导入了powerbi脚本;现在我’ve更改到数据库的链接
    请问我该怎么办?

  6. 做得好!
    但是我’ve 2 problems:
    1)在.pbix中,我在本地主机服务器上使用了mysql表
    2)我可以’开发到我的本地主机ssas
    I’我在www上搜索,但一无所获…(I’m a newbie)

  7. 嗨Soheil Bakhshi
    我已经按照您的步骤进行了操作。
    打开PBIX文件。
    生成了创建脚本
    连接到我的本地SSAS表格实例
    修改数据库名称& CompatibilityLevel

    尝试在“ SSAS”选项卡中创建数据库时,出现以下消息:
    执行查询…
    仅在Power BI Premium服务中支持使用基于M的数据源格式的Power BI数据集。
    运行完成

    您可以协助我在本地SSAS上创建此选项卡模型吗?

    1. 嗨,达里尔,

      欢迎来到BIInsight.com。
      这是一篇旧文章,正如在第一段中提到的那样,此方法适用于Power BI Desktop 2017年6月和SSAS Tabular 2017。
      但是我可以想象,我们需要采取一些额外的步骤来完成或失败。
      毕竟,Power BI Desktop中有大量新的DAX功能和Power Query功能,而SSAS 2019中不提供。
      I’将在此帖子的顶部添加一条通知行,以使访问者意识到此方法可能不再起作用。

      感谢您引起我的注意。
      干杯。

  8. 你好
    我们能够从SSMS 2017连接到Power BI Desktop模型,但是’无法生成脚本–收到错误消息“你调用的对象是空的。 (Microsoft.AnalysisServices.AppLocal.Tabular)”.

    值得注意的是,在连接PBI模型之后,我们看不到任何连接。

    你能帮我吗?

    提前致谢。

      1. 你好

        PBI版本2020年7月。
        启用了增强型元数据。
        SSAS表格模型版本15
        SSMS是版本17.9.1

        谢谢,

        伊梅尔达

        1. 嗨Imelda,

          请注意,Microsoft不支持我在此博文中解释的方法。
          达克斯和M中有许多新功能,即使在SSAS 2019中也不支持。
          话虽如此,让’s try the upgrading your SSMS to the latest version which is currently at 18.6。您可以从下载 这里.
          您必须将兼容性级别更改为1500,然后找到并删除remove“defaultPowerBIDataSourceVersion”: “powerBI_V3” line and “sourceQueryCulture”: “en-NZ” from the scripts.
          请让我们知道您的进度。

          干杯。

          1. 你好,Soheil,写得很好,解释得很好。我还在最新版本15.0.34.22上使用SSAS 2019。按照您的步骤编辑脚本,然后执行良好。一个问题是数据连接不存在。了解此方法不受支持。如果SSAS 2019也与PBI台式机1520具有相同的兼容性级别,那将很好。

有什么想法吗?在这里与我们分享:

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.