Группировка значений столбцов SSRS, которые похожи - PullRequest
0 голосов
/ 09 февраля 2012

Это сложный вопрос, но я сделаю все возможное:

По сути, в моей базе данных есть ошибочные значения, и я хочу написать SSRS для их учета, а не входить и очищать БД.

Для простоты мои записи состоят из 2 значений: ownerid и case_type . В настоящее время у нас есть case_types, которые лексикографически похожи, но концептуально идентичны. Я хочу создать отчет для записей, чтобы учесть эти несоответствия данных. Итак ...

В идеале я хотел бы включить простой отчет колл-центра, например:

Owner | Email | Inbound Phone | Inbound Phone Call
bob   |  3    |     5         |     7
jon   |  1    |     2         |     3

Где каждый владелец ответил на x количество электронных писем, y номер «входящего телефона» и z количество «входящих телефонных звонков». (Я не создавал эти данные и сейчас им занимаюсь).

в

Owner | Email | Inbound Phone Call
bob   |  3    |     12
jon   |  1    |     5

По сути, объединение количества записей «входящий телефон» и «входящий телефонный звонок» в один столбец.

PS Эти данные взяты из CRM 2011, и мне нужно использовать Fetch в качестве запроса. У меня есть все записи, которые мне нужны, мне просто нужно разобраться, как разобрать плохие.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

SSRS создает новый столбец всякий раз, когда ему кажется, что он встречает новую группу.В отчете, с которого вы начали, использовалось поле для этого.Поэтому SSRS считал, что каждое отдельное значение в поле [Case_type] является новой группой, и ему нужен новый столбец.

Поэтому измените свойства группы (щелкните правой кнопкой мыши на серой области над столбцом и выберите «Группа столбцов -> Группа»).Свойства ... Отредактируйте выражение группы в приведенной ниже формуле)

Приведенная ниже формула должна заменить простое поле.Перед созданием новой группы SSRS будет выполнять каждый [case_type] по этой формуле, и если это «Входящий телефон», он будет заменен на «Входящий телефонный звонок».Теперь SSRS увидит, что это соответствует существующей группе, и сгруппирует эти значения в тот же столбец.

=Switch(
  Fields!Case_Type.Value = "Inbound Phone", "Inbound Phone Call",
  1 = 1, Fields!Case_Type.Value)

В эту строку можно вставить другие замены для обработки дополнительных случаев.Если вам нужно, чтобы они были объединены сходством, то все может стать более сложным.

0 голосов
/ 09 февраля 2012

В запросе SQL для достижения результата выглядит как

SELECT t1.[owner_id]
  ,(    select  sum([case_value]) 
        from    [dbo].[Table_1] t2 
        where   t2.case_type in ('email') 
                and t2.owner_id = t1.owner_id) as 'Email'

  ,(    select  sum([case_value]) 
        from    [dbo].[Table_1] t3 
        where   t3.case_type in ('inbound phone', 'inbound phone call') 
                and t3.owner_id = t1.owner_id) as 'Phone'
  FROM [dbo].[Table_1] t1
  GROUP BY t1.owner_id

Я не думаю, что можно написать такой сложный запрос, используя Fetch XML.Только вы можете написать Fetch XML для каждой из ячеек в вашей таблице результатов, и это будет выглядеть как

<fetch distinct='false' mapping='logical' aggregate='true'> 
<entity name='your_entity_name'>
<attribute name='value_column' alias='value_column_sum' aggregate='sum' />
<filter type='and'>
    <condition attribute='case_type' operator='eq' value='desired_value_1' />
    <condition attribute='case_type' operator='eq' value='desired_value_2' />
</filter>
</entity> 
</fetch>
...