对类似的SSRS列值进行分组

时间:2012-02-08 21:16:10

标签: reporting-services ssrs-2008 dynamics-crm dynamics-crm-2011

这是一个难以表达的问题,但我会尽我所能:

基本上我的数据库有错误的值,我想编写我的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 个答案:

答案 0 :(得分:2)

SSRS会在认为遇到新组时创建新列。您开始使用的报告使用了一个字段。因此SSRS认为[Case_type]字段中的每个不同值都是一个新组,并且需要一个新列。

因此,更改组属性(右键单击列上方的灰色区域,然后选择“列组” - >“组属性...”将组表达式编辑为下面的公式)

下面的公式应该替换简单字段。在创建新组之前,SSRS将通过此公式运行每个[case_type],如果是“入站电话”,它将被替换为“入站电话”。 SSRS现在将看到这与现有组匹配,并将这些值分组到同一列中。

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

可以插入其他替换件来处理其他情况。如果你需要通过相似性来组合它们,那么事情会变得更加复杂。

答案 1 :(得分:0)

在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>
相关问题