在 ssas 的数据源视图中指定关系时出错
Error in specify relationship in data source view of ssas
当我尝试通过数据源视图设置两个对象之间的关系时出现此错误消息:-
底层数据库table保存不同数据类型的列(假设,一个是int而另一个是smallint
或bigint
)。解决这个问题的方法是什么?
The source column and the destination column have different data types
我看不出这条消息有什么不清楚的地方。如果您有主键,则与该主键相关的任何外键都必须是相同的数据类型。
如果你考虑 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 的值,而主键会能够持有更大的价值。
所以解决这个问题的方法是在创建关系之前更新要用作外键的列的数据类型以匹配主键。
对我来说,这是事实table的问题。
对于引用 DWH 中的视图的事实 table,我们有一个命名查询。
出色地!我在视图中将此列(维度键列)硬编码为 -1,并在多维数据集中添加了命名查询。
这将数据类型作为 System.int32 而不是 System.Decimal,因此我遇到了这个问题。
我更改了视图(删除了硬编码值并直接从 table 中获取),从命名查询中删除了列,然后再次添加。这样就解决了。
当我尝试通过数据源视图设置两个对象之间的关系时出现此错误消息:-
底层数据库table保存不同数据类型的列(假设,一个是int而另一个是smallint
或bigint
)。解决这个问题的方法是什么?
The source column and the destination column have different data types
我看不出这条消息有什么不清楚的地方。如果您有主键,则与该主键相关的任何外键都必须是相同的数据类型。
如果你考虑 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 的值,而主键会能够持有更大的价值。
所以解决这个问题的方法是在创建关系之前更新要用作外键的列的数据类型以匹配主键。
对我来说,这是事实table的问题。 对于引用 DWH 中的视图的事实 table,我们有一个命名查询。 出色地!我在视图中将此列(维度键列)硬编码为 -1,并在多维数据集中添加了命名查询。 这将数据类型作为 System.int32 而不是 System.Decimal,因此我遇到了这个问题。
我更改了视图(删除了硬编码值并直接从 table 中获取),从命名查询中删除了列,然后再次添加。这样就解决了。