我无法为这个问题找到更好的标题,但我会尝试描述它:
我正在尝试用两个输入.csv文件创建一个数据仓库,而且我在这个领域还不错。
我有一个带有account_number,account_balance和account_code列的输入文件。帐户有account_code。 用户希望通过account_code和code_group查看余额。
Account_code属于code_group,account_code和code_group之间的映射位于单独的文件中。有这种映射的规则,例如如果account_code的余额为正,则account_code属于一个code_group,如果为负,则属于另一个code_group。
我制作了一个事实表,我把account_balance和帐户维度表放在account_number中 和account_code。
但是,我不知道如何处理这个code_group。如果我想将其作为帐户维度的属性,我想我必须通过account_code预先计算余额,并根据余额的符号将相应的code_group放在维度表中。
但是,用户希望有可能更改account_code和code_group之间的映射,以便特定的account_code将属于另一个code_group,并且他希望通过新映射和旧映射查看报告。所以我认为我必须根据这个变化更新事实和维度表,我对如何处理这个问题感到有点困惑。
我应该将code_group属性放在帐户维度中,还是应该单独处理code_group?
感谢任何帮助。
修改 这是临时表:
account_number account_balance account_code
-------------- ---------------------- ------------
100676 345.87 1101
100829 200.15 1101
100312 154.01 3100
帐户代码属于一个code_group。这是示例映射:
account_code code_group
------------ ------------------------------------------
1101 10 (if balance of the account_code is >=0)
1101 20 (if balance of the account_code is <0)
3100 20
用户可以随时手动更改此映射,以便明天看起来像这样:
account_code code_group
------------ ------------------------------------------
1101 30
3100 20
此外,用户可以导入dwh中的新行,这将更改帐户组的余额,并且还可以更改代码组,因为更改了平衡。
这是必需报告的示例:
sum of account_balances account_code code_group
----------------------- ------------ -------------
546.02 1101 10
154.01 3100 20
这是事实表:
account_balance account_key
---------------------- -----------
345.87 1
200.15 2
154.01 3
这是dimaccount表:
account_number account_code account_key
-------------- ------------ -----------
100676 1101 1
100829 1101 2
100312 3100 3
我不知道在哪里放置account_code和code_group的条件映射。我应该将code_group放在其他维度或帐户维度中,还是应该将其放在一边,直到我必须计算报告?我现在更喜欢第三种选择,因为我认为这将是最简单的选择。因为如果我想将code_group放在帐户维度中,我首先必须计算所有的account_code余额,如果我这样做,明天就可以改变......
答案 0 :(得分:2)
我会尽量不要苛刻,但你的事实表并不好。实际上,有两种可能的情况:
这里有什么问题?
设计!事实表应代表业务流程。在您的情况下,事实表只是account_no和account_code的自定义摘要报告。如果我理解错误,请纠正我,但是当你更新事实表时,你实际上在需要的地方更改account_balance并在出现时插入新帐户。您应该通过change_code和date来监控余额变化的业务流程。
事实:
change_code account_code_key change_date changeAmount
--------------------------------------------------------------
123456 1 2014-01-01 +380.00
123457 1 2014-01-01 -220.00
123458 3 2014-01-03 -45.67
使用此设计,您可以获得所有帐户的历史摘要。如果客户想知道他去年12月1日的余额是多少。或者他从{start_date}到{end_date}花了多少钱(只有减号)。
此事实表需要两个维度表:时间和帐户维度。
帐户维度:
account_code_key account_number account_code actual_code_group
-----------------------------------------------------------------------
1 100676 1101 10 (sum of changes is positive)
当您没有定义日期字段时,很难理解用户是否想要查看新旧映射。
在dwh中,所有条件字段都留给前端。在您的情况下,在打印(计算)报告时。有办法使用SDC类型2预先计算它,但我永远不会建议你,因为以后计算它会容易得多。