SSIS / SSAS:处理年龄列

SGu*_*ard 3 null sql-server ssas ssis

我有一些列代表表格中的年龄,取值从 0 到 100,但也有 -1 表示“缺失值”。我不想将它们存储为字符串以便能够找到平均年龄等,但是 SSAS 默认将 0 变为 NULL,并且我也想将 -1 替换为 NULL,因此有经典的“重复属性键”错误。

是否有正确的方法/类型来处理年龄值?

Tom*_*m V 5

您在问题中混淆了两件事。由于您声明您有重复的属性键错误,您将年龄表用作维度,但由于您还想找到平均值,因此您将年龄表用作事实表。

当使用年龄作为维度时,您可能不希望轴上的每个年龄都在,因此通常所做的是将年龄划分为桶,并将桶存储为字符串,这样您就会得到这样的结果

+-------+--------+
|  Age  |  sales |
+-------+--------+
| <10   |      0 |
| 10-20 |    100 |
| 21-30 |    250 |
| 31-40 |    124 |
| 41-50 |   3598 |
| > 50  |    715 |
+-------+--------+
Run Code Online (Sandbox Code Playgroud)

您可以在维度中使用离散化存储桶,也可以在维度表中手动创建存储桶。

但是,如果您也想平均年龄,我想您想查看某些维度的平均值(例如订购产品 X 的人的平均年龄),因此您需要创建一个事实表,其中包含要报告的维度的键然后定义事实表和维度表之间的关系

在同一个表中混合两个概念(维度和事实)会随着时间的推移导致头痛,因此您应该在 ETL 过程中解决这个问题,或者在 SSAS 的 dmv 中使用命名查询。