如何使用T-SQL完成此操作:
根据要求,这是我之前回答的另一种方法,展示了如何使用Excel按用户进行操作。这个答案展示了如何使用T-SQL来实现相同的共享/集中操作。对于Cubes、MDX或者SSAS方面的操作,我不太清楚,也许Benoit或者其他熟悉这方面知识的人可以提供等效的解决方案...
1. 添加SalaryRanges SQL表和视图
使用以下命令创建一个名为"SalaryRangeData"的新表:
Create Table SalaryRangeData(MinVal INT Primary Key)
使用以下命令将计算列包装在视图中以添加:
CREATE VIEW SalaryRanges As
WITH
cteSequence As
(
Select MinVal,
ROW_NUMBER() OVER(Order By MinVal ASC) As Sequence
From SalaryRangeData
)
SELECT
D.Sequence,
D.MinVal,
COALESCE(N.MinVal - 1, 2147483645) As MaxVal,
CAST(D.MinVal As Varchar(32))
+ COALESCE(' - ' + CAST(N.MinVal - 1 As Varchar(32)), '+')
As RangeVals
FROM cteSequence As D
LEFT JOIN cteSequence As N ON N.Sequence = D.Sequence + 1
在SSMS中,右键单击表格并选择“编辑前200行”。然后,在MinVal单元格中输入以下值:0、501、1001和2001(对于SQL Server来说,顺序无关紧要,它会为我们创建)。关闭表格行编辑器,执行SELECT * FROM SalaryRanges以查看所有行和范围信息。
2. 添加AgeRanges SQL表和视图
执行与上述步骤1完全相同的步骤,只是将所有出现的“Salary”替换为“Age”。这将创建表“AgeRangeData”和视图“AgeRanges”。
在AgeRangeData的[MinVal]列中输入以下值:0、15、20、30和40。
3. 向数据添加范围
用以下CASE表达式替换您的SELECT语句以检索数据和范围:
SELECT [CustId]
,[CustName]
,[Age]
,[Salary]
,[SalaryRange] = (
Select RangeVals From SalaryRanges
Where [Salary] Between MinVal And MaxVal)
,[AgeRange] = (
Select RangeVals From AgeRanges
Where [Age] Between MinVal And MaxVal)
FROM [Customers]
4. 其他一切,与现在一样
从这里开始,只需按照您目前的方式进行操作。所有范围应该像当前一样显示在您的数据透视表中。
5. 测试神奇之处
再次进入SSMS中的SalaryRangeData表行编辑器,删除现有行,然后插入以下值:0、101、201、301、... 2001(对于T-SQL解决方案,顺序无关紧要)。返回到您的数据透视表并刷新数据。就像Excel解决方案一样,数据透视表的范围应该会自动更改。
添加
如何将其添加到立方体中:
1. 创建一个视图
CREATE VIEW CustomerView As
SELECT [CustId]
,[CustName]
,[Age]
,[Salary]
,[SalaryRange] = (
Select RangeVals From SalaryRanges
Where [Salary] Between MinVal And MaxVal)
,[AgeRange] = (
Select RangeVals From AgeRanges
Where [Age] Between MinVal And MaxVal)
FROM [Customers]
1. 在 Visual Studio 中创建一个 BI 项目,并添加 CustomerView
连接到数据库,并将 CustomerView 视图添加到 Data Source Views 中作为事实表

2. 创建一个立方体并定义度量和维度
我们只需要顾客ID作为顾客数量的度量,并将相同的事实表作为维度。


3. 给维度添加属性

4. 从Excel连接到Cube


5. 在Excel中查看立方体的数据

6. 如果需要更改范围,只需重新处理维度和立方体中的数据。
如果您需要更改范围,请更改SalaryRangeData和AgeRangeData中的数据,然后只需重新处理维度和立方体。