Ssas 如何实现针对同一表的多个nameColumns?

Ssas 如何实现针对同一表的多个nameColumns?,ssas,Ssas,我有两张桌子。第一个引用第二个多次。 一些演示数据: id fk1 fk2 fk3 ------------------------------- 4009 9419 2282 9005 4057 9419 2112 NULL 5480 NULL 4279 NULL 5989 NULL 1677 NULL 第二个表包含表1中外键的名称 id name ------------------

我有两张桌子。第一个引用第二个多次。 一些演示数据:

id      fk1     fk2     fk3
-------------------------------
4009    9419    2282    9005
4057    9419    2112    NULL
5480    NULL    4279    NULL
5989    NULL    1677    NULL
第二个表包含表1中外键的名称

id      name
--------------------------------
1677    Bank Account No1
2112    Loyalty Account
2282    Sales Account
4279    Employee Account
9005    Warehouse No1
9419    Sales
我必须为表1创建一个维度。字段fk1、fk2和fk3应使用nameColumn属性,并显示表2中的值

我尝试在数据源视图中创建这个命名查询,但是如果我尝试将其放入多维数据集中,部署就会中断,而不会出现适当的错误

SELECT [Table1].[id]
    ,fk1
    ,fk2
    ,fk3 
    ,T2_fk1.name as fk1name
    ,T2_fk2.name as fk1name
    ,T2_fk3.name as fk1name
FROM [dbo].[Table1]
left join Table2 as T2_fk1
    on Table2.id = [Table1].fk1
left join Table2 as T2_fk2
    on Table2.id = [Table1].fk2
left join Table2 as T2_fk3
    on Table2.id = [Table1].fk3

如何实现针对同一个表的多个nameColumns?

即使在技术上可以在Analysis Services的维度中使用
NULL
值,这样做通常是个坏主意,因为AnalysisServices和关系数据库对如何处理它们有不同的想法:AnalysisServices将它们视为空字符串或数字零,而对于关系数据库,通常情况下——e除外。GOracle的旧版本,将空字符串视为
null
——这些是不同的。因此,当Analysis Services发出包含
DISTINCT
GROUP BY
的SQL语句时,可能会出现不止一行Analysis Services只需要一行的情况,以此类推

最佳做法是避免属性列中出现
null
s,以及星型架构中的外键列。在度量列中,
null
s可以。因此,您应该将您的声明更改为

SELECT [Table1].[id]
    ,coalesce(fk1, -1) as fk1
    ,coalesce(fk2, -1) as fk2
    ,coalesce(fk3, -1) as fk3
    ,coalesce(T2_fk1.name, '<unknown>') as fk1name
    ,coalesce(T2_fk2.name, '<unknown>') as fk1name
    ,coalesce(T2_fk3.name, '<unknown>') as fk1name
FROM [dbo].[Table1]
left join Table2 as T2_fk1
    on Table2.id = [Table1].fk1
left join Table2 as T2_fk2
    on Table2.id = [Table1].fk2
left join Table2 as T2_fk3
    on Table2.id = [Table1].fk3
选择[Table1]。[id]
,合并(fk1,-1)为fk1
,合并(fk2,-1)为fk2
,合并(fk3,-1)为fk3
,合并(T2_fk1.name.),作为fk1name
,合并(T2_fk2.name“”)为fk1name
,合并(T2_fk3.name.),作为fk1name
来自[dbo]。[表1]
将表2作为T2_fk1左连接
在Table2.id=[Table1].fk1上
将表2作为T2_fk2左连接
在Table2.id=[Table1].fk2上
将表2作为T2_fk3左连接
在Table2.id=[Table1].fk3上

或者无论您选择将
null
s替换为而不是
-1

的任何内容,我都会尝试避免属性列中的null值,即。E我会使用类似于
coalesce(T2_fk1.name,'')的东西作为fk1name
等。您确定“部署中断而无适当错误”的原因是这个特定的命名查询吗?您的第一条评论是正确的。部署中断,因为使用空值作为nameColumn的值。你可以回答,我会接受的。。。