解析条形图的 Table 列 - PowerBI 中的 SQL 服务器

Parse Table Column for Bar Chart - SQL Server in PowerBI

我在 PowerBI(2018 年 7 月版)工作,我正在拉 来自 SQL 服务器的数据。

我想创建一个列出票数的条形图 对于每个名称。如果一张票有多个资源,那 票数适用于所有这些名字。

我的来源table如下所示。

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

您需要拆分数值,然后进行计数。如果您没有拆分功能并且您的 SQL 服务器版中没有内置拆分功能,请检查此 CLR integration.

否则这里是纯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.

做好准备