1

我在 PowerBI(2018 年 7 月版)中工作,我正在从 SQL Server 中提取数据。

我想创建一个条形图,列出每个名称的票数。如果一个工单有多个资源,则该工单计数适用于所有这些名称。

我的源表如下。

Ticket Number | Resources
1234            Name1, Name2, Name3, ... ,  Name N          
1238            Name2, Name3 
1240            Name4, Name5
4

1 回答 1

1

您需要拆分值,然后执行计数。如果您没有拆分功能,并且您的 SQL Server 版本中没有内置这样的功能,请检查此CLR 集成

否则,这里是纯 T-SQL 解决方案:

DECLARE @DataSource TABLE
(
    [TicketID] INT
   ,[Resources] VARCHAR(MAX)
);

INSERT INTO @DataSource ([TicketID], [Resources])
VALUES (1234, 'Name1, Name2, Name3,  NameN')
      ,(1238, 'Name2, Name3 ')
      ,(1240, 'Name4, Name5');

WITH DataSource ([TicketID], [Resources]) AS
(      
    SELECT [TicketID]
          ,CAST(N'<r><![CDATA[' + REPLACE([Resources], ',', ']]></r><r><![CDATA[') + ']]></r>' AS XML)
    FROM @DataSource         
), DataSourceNormalized ([Resource], [TicketID]) AS
(
    SELECT RTRIM(LTRIM(Tbl.Col.value('.', 'varchar(250)')))
          ,[TicketID]
    FROM DataSource
    CROSS APPLY [Resources].nodes('//r') Tbl(Col)
)
SELECT [Resource]
      ,COUNT([TicketID]) AS [Count]
FROM DataSourceNormalized
GROUP BY [Resource];

第一个 CTE 将值转换为 XML,以便能够拆分它们。第二个规范化数据:

在此处输入图像描述

然后,简单地进行聚合:

在此处输入图像描述

如果您处理大量数据,这可能会很慢。如果您正在寻找性能,您需要实现 CLR 拆分功能,甚至更好地规范化您的数据,以便做好准备COUNT

于 2018-08-08T05:31:35.023 回答