Поделиться через


Инструкция CASE (многомерные выражения)

Позволяет возвращать указанные значения из нескольких сравнений согласно условию. Существуют два типа инструкции CASE.

  • Простая инструкция CASE, сравнивающая выражение с набором простых выражений и возвращающая определенные значения.

  • Инструкция CASE для поиска, вычисляющая набор выражений логического типа и возвращающая определенные значения.

Синтаксис

Simple Case Statement
CASE [input_expression]
WHEN when_expression THEN when_true_result_expression
[...n]
[ELSE else_result_expression]
END

Search Case Statement
CASE 
WHEN Boolean_expression THEN when_true_result_expression
[...n]
[ELSE else_result_expression]
END

Аргументы

  • input_expression
    Многомерное выражение, результатом вычисления которого является скалярное значение.

  • when_expression
    Скалярное значение, над которым вычисляется выражение input_expression, если результатом выражения является TRUE, возвращается скалярное значение else_result_expression.

  • when_true_result_expression
    Скалярное значение, которое возвращается, если результатом предложения WHEN является TRUE.

  • else_result_expression
    Скалярное значение, возвращаемое в том случае, если при вычислении ни одно из предложений WHEN не вернуло TRUE.

  • Boolean_expression
    Многомерное выражение, результатом вычисления которого является скалярное значение.

Замечания

Если нет предложения ELSE, а все предложения WHEN дали значение false, тогда результатом будет пустая ячейка.

Простое выражение CASE

MDX вычисляет простое выражение CASE, разрешая выражение input_expression до скалярной величины. Затем она сравнивается со скалярным значением выражения when_expression. Если скалярные значения совпадают, инструкция CASE возвращает значение when_true_expression. Если скалярные значения не совпадают, вычисляется следующее предложение WHEN. Если все предложения WHEN возвращают значение false, то возвращается значение else_result_expression из предложения ELSE (если оно задано).

В следующем примере значение меры Reseller Order Count сравнивается в нескольких предложениях WHEN и возвращается результат, зависящий от значения меры Reseller Order Count в каждом году. Для значений меры Reseller Order Count, не совпадающих со скалярным значением, заданным в выражении when_expression в предложении WHEN, возвращается скалярное значение else_result_expression.

WITH MEMBER [Measures].x AS 
CASE [Measures].[Reseller Order Count]
   WHEN 0 THEN 'NONE'
   WHEN 1 THEN 'SMALL'
   WHEN 2 THEN 'SMALL'
   WHEN 3 THEN 'MEDIUM'
   WHEN 4 THEN 'MEDIUM'
   WHEN 5 THEN 'LARGE'
   WHEN 6 THEN 'LARGE'
      ELSE 'VERY LARGE'
END
SELECT Calendar.[Calendar Year] on 0
, NON EMPTY [Geography].[Postal Code].Members ON 1
FROM [Adventure Works]
WHERE [Measures].x

Выражение CASE для поиска

Для более сложных вычислений можно использовать выражение CASE для поиска. Оно позволяет узнать, принадлежит ли значение входного выражения диапазону значений. Многомерное выражение вычисляет предложения WHEN, чтобы они появились в инструкции CASE.

В следующем примере мера Reseller Order Count вычисляется над указанным выражением Boolean_expression в каждом предложении WHEN. Возвращается результат, зависящий от значения меры Reseller Order Count в каждом году. Поскольку предложения WHEN вычисляются в том порядке, в котором они перечислены, всем значениям больше 6 можно легко присвоить значение «VERY LARGE», не указывая все значения явно. Для значений меры Reseller Order Count, которые не указаны в предложении WHEN, возвращается скалярное значение else_result_expression.

WITH MEMBER [Measures].x AS 
CASE 
   WHEN [Measures].[Reseller Order Count] > 6 THEN 'VERY LARGE'
   WHEN [Measures].[Reseller Order Count] > 4 THEN 'LARGE'
   WHEN [Measures].[Reseller Order Count] > 2 THEN 'MEDIUM'
   WHEN [Measures].[Reseller Order Count] > 0 THEN 'SMALL'
   ELSE "NONE"
END
SELECT Calendar.[Calendar Year] on 0,
NON EMPTY [Geography].[Postal Code].Members on 1
FROM [Adventure Works]
WHERE [Measures].x