#sql #business-intelligence
#sql #бизнес-аналитика
Вопрос:
Я работаю над проектом, для которого я хотел бы разрешить конечному пользователю создавать динамические «фильтры» для применения к таблице фактов путем заполнения ссылочной таблицы.
Допустим, у меня есть эта таблица фактов:
------ ------- ------- -------
| Key | AttrA | AttrB | AttrC |
------ ------- ------- -------
| Key1 | Text1 | Text2 | Text3 |
| Key2 | Txt1 | Txt2 | Txt3 |
| Key3 | Text1 | Text2 | Text3 |
------ ------- ------- -------
Эффекты фильтров могут быть:
-
Атрибут = ‘Текст’
-
Атрибут типа ‘%Text%’
-
Атрибут <> ‘Текст’
-
Атрибут не похож на ‘%Text%’
Кроме того, «отрицательные» фильтры (<> и not like ) могут быть кумулятивными.
Какую ссылочную таблицу я могу создать и как я могу применить эти условия в инструкции sql?
Я подумал о ссылочной таблице, например:
--------- ------- ------- ------- ------- ------- -------
| Filter | TypeA | AttrA | TypeB | AttrB | TypeC | AttrC |
--------- ------- ------- ------- ------- ------- -------
| Filter1 | = | Text1 | | | | |
| Filter2 | | | <> | Text2 | | |
| Filter2 | | | <> | Text3 | | |
--------- ------- ------- ------- ------- ------- -------
Мне нужно связать значение фильтра со строками таблицы фактов.
Итак, я могу сделать:
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, который я могу использовать (если может помочь package или C # script).
Заранее спасибо.
Комментарии:
1. Я бы попытался найти более простой способ достижения цели.
2. Есть какие-нибудь подсказки, как это сделать? У меня есть только SQL Server и SSIS. Структура ссылочной таблицы может быть изменена.