【问题标题】:How do I create a named query to join multiple data sources in SSAS 2005?如何在 SSAS 2005 中创建命名查询以连接多个数据源?
【发布时间】:2010-02-15 22:00:24
【问题描述】:

在 SQL Server 2005 在线书籍部分“在数据源视图中定义命名查询(分析服务)”中,它指出:

命名查询还可用于将来自一个或多个数据源的多个数据库表连接到一个数据源视图表中。

有谁知道我在哪里可以找到有关如何做到这一点的示例或教程?

编辑:提供一些额外的背景...

我正在为 SQL Server 2005 的 SQL Server 商业智能开发工作室处理一个分析服务项目。我为位于不同服务器上的每个数据库定义了一个数据源。我正在尝试创建一个命名查询,它将是来自每个数据源的表的联合。问题是命名查询要求我为查询选择单个数据源。查询是针对这个数据源执行的,它对我的​​项目中的数据源一无所知。但是,根据 SQL Server 2005 在线书籍,根据我上面的引用,我想要完成的工作应该是可能的。

【问题讨论】:

    标签: sql-server ssas business-intelligence


    【解决方案1】:

    MSDN 有 this 链接描述命名查询和 this 链接引导您完成创建一个的过程。

    编辑:我认为要使用多个数据源,您需要在创建查询时完全限定您的表以命中其他数据源,如下所示:

    SELECT user_id, first_name, 'DB1' as DB FROM users
    UNION
    SELECT user_id, first_name, 'DB2' as DB FROM Database2Name.dbo.users
    

    得到类似的结果

    user_id    first_name    DB
    1          Bob           DB1
    2          Joe           DB1
    11         Greg          DB2
    12         Mark          DB2
    

    【讨论】:

    • 这些链接都没有解释如何在命名查询中使用多个数据源。
    • 这个答案中的 SELECT 语句是我过去在多维数据集中所做的。当涉及的对象是表时,您可以跨多个数据源进行查询有一个限制,它不适用于视图/同义词等,因为您只会收到一条错误消息,指出“找不到对象 xxx”,其中 xxx 是您的视图/同义词.
    【解决方案2】:

    如果“多个数据源”是指多个数据库,那么如果您完全限定数据库名称,则可以这样做。

    例如,如果我有两个数据库,我可以这样做:

    SELECT * FROM DatabaseA.dbo.SomeTable 
    JOIN DatabaseB.dbo.OtherTable
    ON DatabaseA.dbo.SomeTable.Id = DatabaseB.dbo.OtherTable.Id
    

    确保不要忘记dbo 位(所有者),否则将无法使用。

    我知道的唯一另一种“多数据源”是distributed queries,它允许您对 sql server 的多个远程实例执行查询:

    sp_addlinkedserver 'server\instance'
    
    SELECT * FROM [server\instance].DatabaseA.dbo.SomeTable 
    JOIN DatabaseB.dbo.OtherTable
    ON [server\instance].DatabaseA.dbo.SomeTable.Id = DatabaseB.dbo.OtherTable.Id
    

    【讨论】:

    • 我指的是商业智能分析服务项目中的数据源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多