Извлечь вес и кратность в SSRS-2012 - PullRequest
0 голосов
/ 16 июня 2020

Это мой запрос:

SELECT [Data] from usrrpt.Expansion EX WHERE EX.Order_PK = '231503796' AND EX.FieldName_PK like 'SHIPCOMMENT%' 

, и возвращаемые данные выглядят следующим образом:

Данные:

5 PLTS(STC: 20 CTNS)DIM:80X71X155CM@122KG

80X71X120CM@95KG X2, 80X71X120CM@96KG X4, 80X71X107CM@76KG

80X71X109CM@86KG X 7

Как мне получить сумму вес (122 + 95 * 2 + 96 * 4 + 76 + 86 * 7)?

1 Ответ

0 голосов
/ 16 июня 2020

Это было бы проще сделать в SQL, чем в SSRS. В SSRS это вполне возможно, но выражения будут запутанными. Обычно хорошей практикой является выполнение данных на сервере и только представление, сделанное в отчете, где это возможно.

Я сделал это так. .

  1. Вес всегда находится между первым '@' и следующим 'KG'
  2. Множитель всегда после веса и ему предшествует X
  3. Если после «KG» не найдено «X», то множитель будет 1

Первое, что я сделал, это воссоздал ваши данные, затем я написал подзапрос для извлечения значений веса и множителя как numeri c, а затем обернул это в другой запрос, который выполняет простые вычисления, чтобы продемонстрировать, что у нас есть полезные данные для работы.

DECLARE @t TABLE([Data] varchar(1000))

INSERT INTO @t VALUES 
('5 PLTS(STC: 20 CTNS)DIM:80X71X155CM@122KG'),
('80X71X120CM@95KG X2'),
('80X71X120CM@96KG X4'),
('80X71X107CM@76KG'),
('80X71X109CM@86KG X 7')

SELECT *, WeightKG * Multi as TotalWeight
FROM (
SELECT 
    *
    , WeightKG = CAST(SUBSTRING(
                            [Data] , 
                            CHARINDEX('@', [Data]) +1 ,  
                            CHARINDEX('KG', [Data], CHARINDEX('@', [Data])) - CHARINDEX('@', [Data]) - 1 
                            )
                        as Float)
    , Multi = CAST(
                        CASE CHARINDEX('X', [Data], CHARINDEX('KG', [Data]))
                            WHEN 0 THEN 1 
                            ELSE LTRIM(RTRIM(
                                            SUBSTRING(
                                                [Data] , 
                                                CHARINDEX('X', [Data], CHARINDEX('KG', [Data])) + 1, 
                                                LEN([Data]) - CHARINDEX('X', [Data], CHARINDEX('KG', [Data])) + 1
                                                )
                                            ))
                        END
                        AS Float)

 FROM @t
) x

Если вы запустите этот запрос, вы получите следующие результаты.

enter image description here

...