我正在开展一个项目,我希望让最终用户能够创建动态的"过滤器"通过填写参考表来申请事实表。
假设我有这个事实表:
+------+-------+-------+-------+
| 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#脚本可以帮助)。
提前致谢。