【问题标题】:Grouping SSRS column values that are similar对相似的 SSRS 列值进行分组
【发布时间】:2012-02-08 21:16:09
【问题描述】:

这是一个很难表达的问题,但我会尽力而为:

基本上我的数据库有错误的值,我想编写我的 SSRS 来解决它们,而不是进入并清理数据库。

为简单起见,我的记录包含 2 个值:owneridcase_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 作为查询。我有我需要的所有记录,我只需要弄清楚如何解析坏记录。

【问题讨论】:

  • 所以你的数据有两列,OwnerID 和 case_type。你的价值观是什么?出现次数还是第三列的总和?
  • 对于我的示例,case_type 有 3 个值和 2 个所有者。基本上有 5 条记录,其中所有者是 bob,case_type 是 Inbound Phone。同样,有 7 条记录的所有者是 bob,case_type 是 Inbound Phone Call。我想指示报告将这些#s 合并并给我 11。

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 嗯,我应该更清楚一点,我的字段没有命名为“入站电话”。我的字段名为 case_type,其中的值是“电子邮件”、“呼入电话”和“呼入电话”。所以当我设置我的矩阵时,它只有 1 行和 1 列。行是 [ownerid],列是 [case_type]。我能够弄清楚如何过滤列值,以便不出现“入站电话”。但是,当我想查看更正后的数据时,我无法走得很远: =IIf(Fields!case_type.Value = "Inbound Phone Call",0,Count(Fields!case_type.Value)) 我要输入什么0的地方?
  • 据我所知,我想要组合的唯一两个值是呼入电话和呼入电话。有人搞砸了记录,现在我需要写一份可以处理它们的报告。
  • 我只是尝试将 Switch 表达式粘贴到列标题中,它所做的只是将文本“Inbound Phone”替换为“Inbound Phone Call”。我仍然有 3 个列,除了现在我有 2 个名为“Inbound Phone Call”的列。我需要能够合并这 2 个中的数据,并且只显示 1 个结果列。
  • 我讨厌看到嘴里的礼物马,但你能帮我理解为什么这样有效吗?
  • 很高兴添加更多为什么。教一个人钓鱼等等。我已经编辑了答案。让我知道你是否想要更多。 (您可能会考虑删除其中一些 cmets,以便为未来的访问者保留问题的干净状态。)
【解决方案2】:

在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>

【讨论】:

  • 你是说我可以改变一个单元格并给它自己的提取?我怎么做?我以为只有 DataSet 可以使用 fetch。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 2023-01-04
相关资源
最近更新 更多