我有两张桌子。第一个多次引用第二个。 一些演示数据:
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
我必须为Table1创建一个维度。字段fk1,fk2和fk3应使用nameColumn属性,并显示表2中的值。
我尝试在Data SourcE View中创建此命名查询,但如果我尝试将其放入多维数据集,则部署会在没有正确错误的情况下中断。
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?
答案 0 :(得分:1)
即使在技术上可以在Analysis Services的维度中使用NULL
值,这通常也是一个坏主意,因为Analysis Services和关系数据库对它们的处理方式有不同的想法:Analysis Services会对它们进行处理作为空字符串或数字零,而对于关系数据库,通常 - 除了e。 G。旧版本的Oracle,将空字符串视为null
- 这些是不同的。因此,当Analysis Services发出包含DISTINCT
或GROUP BY
的SQL语句时,可能会出现多个行,其中Analysis Services只需要一行等等。
最佳做法是避免属性列中的null
以及星型模式中的外键列。在度量列中,null
很好。因此,您应该将您的陈述更改为
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
或您选择使用null
而不是-1
或<unknown>
替换的任何内容。