使用参照表来过滤数据

时间:2016-10-11 17:50:50

标签: sql business-intelligence

我正在开展一个项目,我希望让最终用户能够创建动态的"过滤器"通过填写参考表来申请事实表。

假设我有这个事实表:

+------+-------+-------+-------+
| Key  | AttrA | AttrB | AttrC |
+------+-------+-------+-------+
| Key1 | Text1 | Text2 | Text3 |
| Key2 | Txt1  | Txt2  | Txt3  |
| Key3 | Text1 | Text2 | Text3 |
+------+-------+-------+-------+

过滤器的效果可以是:

  • 属性='文字'

  • 属性类似于'%Text%'

  • 属性<> '文本'

  • 属性不像'%Text%'

此外,"否定"过滤器(<>而不是)可以累积。

我可以创建哪种参考表,以及如何在sql语句中应用这些条件?

我想到了一个像:

这样的参考表
+---------+-------+-------+-------+-------+-------+-------+
| Filter  | TypeA | AttrA | TypeB | AttrB | TypeC | AttrC |
+---------+-------+-------+-------+-------+-------+-------+
| Filter1 | =     | Text1 |       |       |       |       |
| Filter2 |       |       | <>    | Text2 |       |       |
| Filter2 |       |       | <>    | Text3 |       |       |
+---------+-------+-------+-------+-------+-------+-------+

我需要将Filter值与Fact表行相关联。 所以我可以这样做:

Select Key, Filter from FactTable Fa
Inner Join FilterTable Fi on Fi.TypeA = '=' and Fi.TypeB = '=' and Fi.TypeC         = '=' and Fa.AttrA = Fi.AttrA and Fa.AttrB = Fi.AttrB and Fa.AttrC = Fi.AttrC 

Select Key, Filter from FactTable Fa
Inner Join FilterTable Fi on Fi.TypeA = '=' and Fi.TypeB = '=' and Fi.TypeC = '<>' and Fa.AttrA = Fi.AttrA and Fa.AttrB = Fi.AttrB and Fa.AttrC <> Fi.AttrC 

但是我需要为每个属性管理每个案例(我有超过3个属性),这意味着4 ^ NbColumns请求,我不知道如何处理累积的负面条件。

任何人都知道如何做这样的事情? 如果需要,我有一个我可以使用的SSIS(如果包或C#脚本可以帮助)。

提前致谢。

0 个答案:

没有答案