Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ocenia różne wyrażenia rozgałęzień w zależności od tego, czy warunek boole'a jest prawdziwy czy fałszywy.
Syntax
IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>])
Arguments
Funkcja IIf przyjmuje trzy argumenty: iif (warunk, potem gałąź><, else gałąź>). <><
Logical_Expression
Warunek ten oblicza jako prawdziwy (1) lub fałszywy (0). Musi to być poprawne wyrażenie logiczne z wyrażeń wielowymiarowych (MDX).
Expression1 Hint [Eager|Strict|Leniwy]]
Używa się, gdy wyrażenie logiczne jest wyrażone jako prawdziwe. Wyrażenie1 musi być ważnym wyrażeniem Wielowymiarowych Wyrażeń (MDX).
Expression2 Hint [Eager|Strict|Leniwy]]
Używa się, gdy wyrażenie logiczne wychodzi na fałsz. Wyrażenie2 musi być ważnym wyrażeniem wielowymiarowych (MDX).
Remarks
Warunek określony przez wyrażenie logiczne jest wyliczony jako nieprawda , gdy wartość tego wyrażenia wynosi zero. Każda inna wartość jest wyliczona jako prawdziwa.
Gdy warunek jest prawdziwy, funkcja IIf zwraca pierwsze wyrażenie. W przeciwnym razie funkcja zwraca drugie wyrażenie.
Określone wyrażenia mogą zwracać wartości lub obiekty MDX. Ponadto określone wyrażenia nie muszą się pokrywać pod względem typu.
Funkcja IIf nie jest zalecana do tworzenia zestawu członków na podstawie kryteriów wyszukiwania. Zamiast tego użyj funkcji Filtr , aby ocenić każdego członka w określonym zbiorze względem wyrażenia logicznego i zwrócić podzbiór członków.
Uwaga / Notatka
Jeśli którykolwiek z wyrażeń wyjdzie na NULL, zbiór wyników będzie NULL, gdy spełniony jest ten warunek.
Hint to opcjonalny modyfikator, który określa, jak i kiedy wyrażenie jest oceniane. Pozwala on nadpisać domyślny plan zapytań poprzez określenie, jak wyrażenie jest oceniane.
EAGER ocenia wyrażenie względem oryginalnej podprzestrzeni IIF.
STRICT ocenia wyrażenie tylko w ograniczonej podprzestrzeni utworzonej przez wyrażenie warunku logicznego.
LAZY ocenia ekspresję w trybie komórka po komórce.
Podczas gdy EAGER i STRICT dotyczą tylko gałęzi then-else IIF, LAZY dotyczy wszystkich wyrażeń MDX. Każdą ekspresję MDX można śledzić za pomocą HINT LAZY, który oceni tę ekspresję w trybie komórka po komórce.
EAGER i STRICT są wzajemnie wyłączne w tej podpowiedzi; mogą być używane w tym samym IIF(,,) na różnych wyrażeniach.
Więcej informacji można znaleźć w IIF Function Query Hints in SQL Server Analysis Services 2008 oraz Execution Plans and Plan Hints for MDX IIF Function and CASE Statement.
Examples
Poniższe zapytanie pokazuje proste użycie IIF wewnątrz obliczonej miary do zwracania jednej z dwóch różnych wartości ciągów znaków, gdy wartość Internet Sales Amount jest większa lub mniejsza niż 10000 USD:
WITH MEMBER MEASURES.IIFDEMO AS
IIF([Measures].[Internet Sales Amount]>10000
, "Sales Are High", "Sales Are Low")
SELECT {[Measures].[Internet Sales Amount],MEASURES.IIFDEMO} ON 0,
[Date].[Date].[Date].MEMBERS ON 1
FROM [Adventure Works]
Bardzo powszechnym zastosowaniem IIF jest obsługa błędów "dzielenia przez zero" w ramach obliczonych miar, jak w następującym przykładzie:
WITH
//Returns 1.#INF when the previous period contains no value
//but the current period does
MEMBER MEASURES.[Previous Period Growth With Errors] AS
([Measures].[Internet Sales Amount]-([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER))
/
([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER)
,FORMAT_STRING='PERCENT'
//Traps division by zero and returns null when the previous period contains
//no value but the current period does
MEMBER MEASURES.[Previous Period Growth] AS
IIF(([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER)=0,
NULL,
([Measures].[Internet Sales Amount]-([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER))
/
([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER)
),FORMAT_STRING='PERCENT'
SELECT {[Measures].[Internet Sales Amount],MEASURES.[Previous Period Growth With Errors], MEASURES.[Previous Period Growth]} ON 0,
DESCENDANTS(
[Date].[Calendar].[Calendar Year].&[2004],
[Date].[Calendar].[Date])
ON 1
FROM [Adventure Works]
WHERE([Product].[Product Categories].[Subcategory].&[26])
Poniżej znajduje się przykład IIF zwracającego jeden z dwóch zbiorów wewnątrz funkcji Generuj, tworząc zespolony zbiór krotek na wierszach:
SELECT {[Measures].[Internet Sales Amount]} ON 0,
//If Internet Sales Amount is zero or null
//returns the current year and the All Customers member
//else returns the current year broken down by Country
GENERATE(
[Date].[Calendar Year].[Calendar Year].MEMBERS
, IIF([Measures].[Internet Sales Amount]=0,
{([Date].[Calendar Year].CURRENTMEMBER, [Customer].[Country].[All Customers])}
, {{[Date].[Calendar Year].CURRENTMEMBER} * [Customer].[Country].[Country].MEMBERS}
))
ON 1
FROM [Adventure Works]
WHERE([Product].[Product Categories].[Subcategory].&[26])
Na koniec, ten przykład pokazuje, jak korzystać z Plan Hints:
WITH MEMBER MEASURES.X AS
IIF(
[Measures].[Internet Sales Amount]=0
, NULL
, (1/[Measures].[Internet Sales Amount]) HINT EAGER)
SELECT {[Measures].x} ON 0,
[Customer].[Customer Geography].[Country].MEMBERS ON 1
FROM [Adventure Works]