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

时间:2015-12-30 22:14:43

标签: ssas sql-server-2014

  

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

     

当函数与我的事实和引用的维度分开的数据库中时,如何使用表值函数作为分区的查询?

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

条件:对于每个环境(Dev,Tst,Prd),同一服务器上有2个独立的数据库,一个用于应用程序数据仓库[DW_App],另一个用于自定义对象[DW_Custom]。我无法在[DW_App]中创建任何对象,但在[DW_Custom]

中有很多自由

背景信息:我无法通过这种方式找到有关使用TVF和分区的更多信息。我的想法是,如果/当我修改事实表时,通过给我一个更新SQL的地方,它将有助于简化未来的开发。

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

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

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

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

我收到错误

  

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

如果我点击此错误并且后续警告关于多维数据集无法处理,如果我继续,我可以构建和部署多维数据集。但是我无法处理它,因为我得到一个错误,我的某个维度不存在。 查看生成的查询,很明显它正在查询我的维度和事实,这在“[DW_Custom]”中不存在,这解释了错误完全正确。

所以我猜两个问题:

  1. 是否可以从SSAS分区查询内部查询另一个数据库(在同一服务器上)?
  2. 如果没有,有什么方法可以在查询中使用变量作为数据库名称,并根据项目配置(Dev,Tst,Prd)更新该变量
  3. 奖金问题:我是不是因为这样做而找不到太多的原因,因为我忽略了一个明显不好的想法,如果是这样,为什么呢?

1 个答案:

答案 0 :(得分:1)

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

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

只要该表值函数的查询计划与普通的SELECT语句相比是有效的,那么我就没有看到它的问题。