每当我决定构建一个多维数据集时,我都会遇到一个问题,但是我还没有找到克服它的方法。
问题是如何允许用户自动定义一系列事物,而无需在维度中对其进行硬编码。我将在一个示例中解释我的问题。
我有一个名为客户的表:
这是表中的数据:
我想以数据透视样式显示数据,并在如下所示的定义范围内将薪金和年龄分组:
我编写了此脚本并定义了范围:
SELECT [CustId]
,[CustName]
,[Age]
,[Salary]
,[SalaryRange] = case
when cast(salary as float) <= 500 then
'0 - 500'
when cast(salary as float) between 501 and 1000 then
'501 - 1000'
when cast(salary as float) between 1001 and 2000 then
'1001 - 2000'
when cast(salary as float) > 2000 then
'2001+'
end,
[AgeRange] = case
when cast(age as float) < 15 then
'below 15'
when cast(age as float) between 15 and 19 then
'15 - 19'
when cast(age as float) between 20 and 29 then
'20 - 29'
when cast(age as float) between 30 and 39 then
'30 - 39'
when cast(age as float) >= 40 then
'40+'
end
FROM [Customers]
GO
我的范围是硬编码和定义的。当我将数据复制到Excel并在数据透视表中查看数据时,它显示如下:
我的问题是我想通过将“ 客户”表转换为事实表并创建2维表SalaryDim和AgeDim来创建多维数据集。
该SalaryDim表有两列(SalaryKey,SalaryRange)和AgeDim表类似于(ageKey,AgeRange)。我的客户事实表具有:
Customer
[CustId]
[CustName]
[AgeKey] --> foreign Key to AgeDim
[Salarykey] --> foreign Key to SalaryDim
我仍然必须在这些尺寸内定义范围。每次将Excel数据透视表连接到多维数据集时,我只能看到这些硬编码的定义范围。
我的问题是如何直接从数据透视表动态定义范围,而无需创建AgeDim和SalaryDim之类的范围尺寸。我不想只停留在维度中定义的范围内。
定义的范围是“ 0-25”,“ 26-30”,“ 31-50”。我可能想将其更改为“ 0-20”,“ 21-31”,“ 32-42”等,并且用户每次都要求不同的范围。
每次更改时,都必须更改尺寸。我如何改善这个过程?
最好在多维数据集中实施一个解决方案,以便连接到多维数据集的任何BI客户端工具都可以定义范围,但是我不介意是否只有使用Excel的好方法。