Это было бы проще сделать в SQL, чем в SSRS. В SSRS это вполне возможно, но выражения будут запутанными. Обычно хорошей практикой является выполнение данных на сервере и только представление, сделанное в отчете, где это возможно.
Я сделал это так. .
- Вес всегда находится между первым '@' и следующим 'KG'
- Множитель всегда после веса и ему предшествует X
- Если после «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
Если вы запустите этот запрос, вы получите следующие результаты.