在命名查询中使用“预处理程序指令”?

时间:2018-01-25 05:45:16

标签: ssas

我的问题是,我可以在命名查询中使用“预处理器指令”吗? (像C#)

例如,我希望我写一个命名查询(在SSAS的数据源中)就像下面这样:

select * my table
#if DEBUG
where Date >= '2018-01-01'
#endif 
#else
where Date >= '2015-01-01'
#endif

如果配置模式设置为“开发”,则获取数据为'2018-01-01','2018-01-02'....如果配置模式设置为“发布”,则获取为'' 2015-01-01','2015-01-02'....

感谢任何可能的解决方案!

1 个答案:

答案 0 :(得分:0)

您可以考虑的第一个建议是构建SQL视图并通过这些视图访问表。然后,在开发中处理模型之前,应该很容易改变视图。

如果这不能满足您的需求,那么以下内容与您的要求非常接近。首先,在数据源连接字符串上设置Application Name属性,如下所示:

Application Name connection string property

然后将DSV中的命名查询更改为如下所示:

SELECT DateKey
FROM DimDate
where (app_name()='DEV' and DateKey >= 20060101)
or (app_name()='PROD' and DateKey >= 20040101)

app_name() in the named query

正如您可能已经确定的那样,Visual Studio顶部的“配置”下拉菜单允许您在“开发”和“开发”之间切换。和"生产"。每个Visual Studio配置的连接字符串可能因我在博客上发表here而有所不同。因此,我建议在开发配置下的连接字符串中设置Application Name=DEV,在生产配置下的连接字符串中设置Application Name=PROD

需要注意的是,我发现Visual Studio并不总是将配置保存到磁盘,因此每当您更改开发或生产配置的连接字符串时,我建议您在解决方案资源管理器中右键单击Roles文件夹并选择添加角色,然后立即删除它。这个简单的步骤足以使Visual Studio意识到项目文件需要保存到磁盘。