Столбец таблицы синтаксического анализа для столбчатой ​​диаграммы - SQL Server в PowerBI

Я работаю в PowerBI (выпуск от июля 2018 г.) и беру данные с SQL Server.

Я хотел бы создать гистограмму, в которой указано количество билетов для каждого имени. Если для билета есть несколько ресурсов, этот счетчик билета применяется ко всем этим именам.

Моя исходная таблица выглядит следующим образом.

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

person Concerned_Citizen    schedule 08.08.2018    source источник


Ответы (1)


Вам нужно разделить значения, а затем выполнить подсчет. Если у вас нет функции разделения и ее нет в вашей версии SQL Server Edition, проверьте это Интеграция со средой 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.

person gotqn    schedule 08.08.2018