我的问题是,我可以在命名查询中使用“预处理器指令”吗? (像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'....
感谢任何可能的解决方案!
答案 0 :(得分:0)
您可以考虑的第一个建议是构建SQL视图并通过这些视图访问表。然后,在开发中处理模型之前,应该很容易改变视图。
如果这不能满足您的需求,那么以下内容与您的要求非常接近。首先,在数据源连接字符串上设置Application Name属性,如下所示:
然后将DSV中的命名查询更改为如下所示:
SELECT DateKey
FROM DimDate
where (app_name()='DEV' and DateKey >= 20060101)
or (app_name()='PROD' and DateKey >= 20040101)
正如您可能已经确定的那样,Visual Studio顶部的“配置”下拉菜单允许您在“开发”和“开发”之间切换。和"生产"。每个Visual Studio配置的连接字符串可能因我在博客上发表here而有所不同。因此,我建议在开发配置下的连接字符串中设置Application Name=DEV
,在生产配置下的连接字符串中设置Application Name=PROD
。
需要注意的是,我发现Visual Studio并不总是将配置保存到磁盘,因此每当您更改开发或生产配置的连接字符串时,我建议您在解决方案资源管理器中右键单击Roles文件夹并选择添加角色,然后立即删除它。这个简单的步骤足以使Visual Studio意识到项目文件需要保存到磁盘。