SSAS多维表值函数作为分区查询

SSAS多维表值函数作为分区查询,ssas,sql-server-2014,Ssas,Sql Server 2014,@格雷格洛韦能够回答我应该问的问题。我在这里添加了一个更简洁的问题,同时保留了原来冗长的文本 当一个表值函数与我的事实维度和引用维度位于不同的数据库中时,如何使用该函数作为分区的查询 概述:我正在构建一个SSAS多维多维多维数据集,该多维数据集是基于应用程序数据仓库中的单个事实表构建的,并且希望使用表值函数的结果集作为事实表的分区查询。我们正在使用SQL Server(和SSAS)2014 条件:对于每个环境(Dev、Tst、Prd),在同一台服务器上有两个独立的数据库,一个用于应用程序数据仓库

@格雷格洛韦能够回答我应该问的问题。我在这里添加了一个更简洁的问题,同时保留了原来冗长的文本

当一个表值函数与我的事实维度和引用维度位于不同的数据库中时,如何使用该函数作为分区的查询

概述:我正在构建一个SSAS多维多维多维数据集,该多维数据集是基于应用程序数据仓库中的单个事实表构建的,并且希望使用表值函数的结果集作为事实表的分区查询。我们正在使用SQL Server(和SSAS)2014

条件:对于每个环境(Dev、Tst、Prd),在同一台服务器上有两个独立的数据库,一个用于应用程序数据仓库
[DW\u App]
,另一个用于自定义对象
[DW\u custom]
。我无法在
[DW\u App]
中创建任何对象,但在
[DW\u Custom]
中有很大的自由度

背景信息:我还没有找到很多关于以这种方式使用TVF和分区的信息。我的想法是,如果/当我修改事实表时,它将为我提供一个更新SQL的单一位置,从而有助于简化未来的开发

因此,在测试我使用TVF作为分区查询的疯狂想法时,我遇到了一个难题。当我在FROM子句中显式声明数据库时,我可以使用我的TVF

从[DW_Custom].[dbo].[CubePartition](@StartDate,@EndDate)中选择*

但是,这是行不通的,因为多维数据集在生产之前将部署在多个环境中,并且它需要为每个环境指向不同的数据库。因此,我尝试添加一个新的数据源,将分区查询设置为指向新的数据源,然后删除数据库名称。即:

SELECT*FROM[dbo].[CubePartition](@StartDate,@EndDate)

我得到一个错误

SQL语法无效。关系数据库返回以下错误消息:无法完成延迟准备。无效的对象名称“dbo.CubePartition”

如果单击此错误以及后续有关多维数据集无法处理的警告(如果继续),则可以构建和部署多维数据集。但是我不能处理它,因为我得到一个错误,我的维度之一不存在。 查看生成的查询,很明显它正在查询我的维度和事实,而这些维度和事实并不存在于“[DW_Custom]”中,这很好地解释了该错误

所以我猜有两个问题:

  • 是否可以从SSAS分区查询内部查询另一个DB(在同一台服务器上)
  • 如果没有,我是否可以在查询中使用变量作为数据库名称,并根据项目配置(Dev、Tst、Prd)更新该变量

  • 另外一个问题:我找不到这么做的原因是因为我忽略了这一明显的坏主意吗?如果是,原因是什么?

    创建第二个指向DW_自定义数据库的SSAS数据源(或者在您部署到的特定环境中调用的任何数据源)如何?然后,当您从Dev部署到Prod时,只需更改该连接字符串。创建分区时,请指定DW_自定义数据源,然后指定不带数据库名称的查询:

    SELECT * FROM [dbo].[CubePartition](@StartDate, @EndDate)
    

    只要与简单的SELECT语句相比,该表值函数的查询计划是有效的,那么我看不出有什么问题。

    感谢您的快速响应。我已经尝试过了,但得到了一个错误:SQL语法无效:无法完成延迟准备。我刚刚接受了错误,并构建/部署了解决方案,这是可行的。但是,如果处理失败,我会收到一个错误,即事实数据表的对象名无效。我将用这些新信息更新我的问题。@Brandonmclure,我假设您使用的查询是从[dbo].[CubePartition]('1/1/2015','1/31/2015')(查询中没有参数)?@Brandonmclure,您是否有引用维度或在事实处理过程中需要联接的东西?在处理对话框中,产生错误的SQL查询是什么?你能告诉我为什么无效吗?让第二个数据源指向Initial Catalog=DW_Custom应该可以工作。它正在尝试查询一些维度,当然这些维度不在DW_Custom中。查询是SELECT*FROM[dbo].[CUBEPARTITION]('1/1/2015',1/31/2015')@brandonmclure,哪个维度?它们是参考尺寸还是需要连接的东西?您能否在DW_Custom中创建一个视图以使这些查询成功?