【发布时间】:2016-10-21 08:41:51
【问题描述】:
【问题讨论】:
标签: sql-server ssas cube
【问题讨论】:
标签: sql-server ssas cube
源列和目标列的数据类型不同
我看不出这条消息有什么不清楚的地方。如果您有主键,则与该主键相关的任何外键都必须是相同的数据类型。
如果你考虑range and storage requirements of the data types:
Data type Range Storage
bigint -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 8 Bytes
int -2,147,483,648 to 2,147,483,647 4 Bytes
smallint -32,768 to 32,767 2 Bytes
tinyint 0 to 255 1 Byte
您可以看到,列可以容纳的值范围在数据类型之间有很大差异。为了保持主键和外键之间的关系,类型必须相同,以便它可以容纳的值范围匹配。
如果你有一个int 主键但有一个smallint 外键,那么外键列不可能保存大于 32,767 的值,而主键可以保存很多更大的价值。
所以解决这个问题的方法是在创建关系之前更新你想用作外键的列的数据类型来匹配主键。
【讨论】:
对我来说,这是事实表的问题。 对于引用 DWH 中的视图的事实表,我们有一个命名查询。 好!我在视图中将此列(维度键列)硬编码为 -1,并在多维数据集中的命名查询中添加。 这将数据类型设为 System.int32 而不是 System.Decimal,因此我遇到了这个问题。
我更改了视图(删除了硬编码值并直接从表中获取),从命名查询中删除了该列,然后再次添加它。这样就解决了。
【讨论】: