Используйте ссылочную таблицу для фильтрации данных

#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. Структура ссылочной таблицы может быть изменена.