解析条形图的 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
.
做好准备
我在 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
.