Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: ✅Microsoft Fabric✅
Zwraca wartość stałej skalarnej obliczonego wyrażenia.
Ta funkcja jest przydatna w przypadku zapytań wymagających obliczeń etapowych. Na przykład oblicz łączną liczbę zdarzeń, a następnie użyj wyniku, aby filtrować grupy, które przekraczają określony procent wszystkich zdarzeń.
Wszystkie dwie instrukcje są oddzielone średnikiem.
Składnia
toscalar(
wyrażenie)
Dowiedz się więcej na temat konwencji składni.
Parametry
| Nazwisko | Typ | Wymagania | opis |
|---|---|---|---|
| wyrażenie | string |
✔️ | Wartość, która ma być konwertowana na wartość skalarną. |
Zwraca
Wartość stałej skalarnej obliczonego wyrażenia. Jeśli wynik jest tabelaryczny, pierwsza kolumna i pierwszy wiersz są pobierane do konwersji.
Napiwek
Instrukcję let można użyć do czytelności zapytania w przypadku korzystania z polecenia toscalar().
Ograniczenia
toscalar() Nie można zastosować w scenariuszu, który stosuje funkcję w każdym wierszu. Dzieje się tak, ponieważ funkcja może być obliczana tylko przez stałą liczbę razy podczas wykonywania zapytania.
Zazwyczaj po osiągnięciu tego ograniczenia zwracany jest następujący błąd: can't use '<column name>' as it is defined outside its row-context scope.
W poniższym przykładzie zapytanie kończy się niepowodzeniem z powodu błędu:
'toscalar': can't use 'x' as it is defined outside its row-context scope.
let _dataset1 = datatable(x:long)[1,2,3,4,5];
let _dataset2 = datatable(x:long, y:long) [ 1, 2, 3, 4, 5, 6];
let tg = (x_: long)
{
toscalar(_dataset2| where x == x_ | project y);
};
_dataset1
| extend y = tg(x)
Ten błąd można wyeliminować przy użyciu join operatora , jak w poniższym przykładzie:
let _dataset1 = datatable(x: long)[1, 2, 3, 4, 5];
let _dataset2 = datatable(x: long, y: long) [1, 2, 3, 4, 5, 6];
_dataset1
| join (_dataset2) on x
| project x, y
Wyjście
| x | t |
|---|---|
| 1 | 2 |
| 3 | 4 |
| 5 | 6 |
Dodatkowe wzorce ograniczania ryzyka dla rzeczywistych scenariuszy
W wielu praktycznych scenariuszach możesz chcieć obliczyć wartość skalarną na wiersz przy użyciu wyrażenia, które wykonuje własną agregację, na przykład:
| extend result = toscalar(T | where Key == key | summarize max(Value))
Ten wzorzec kończy się niepowodzeniem, ponieważ toscalar() nie można go ocenić raz w wierszu.
Użyj jednego z poniższych obsługiwanych wzorców ograniczania ryzyka.
- Wstępne agregowanie danych raz, a następnie sprzężenie zagregowanych wyników z powrotem do głównej tabeli w celu zwiększenia wydajności.
let summary =
T
| summarize maxValue = max(Value) by Key;
Dataset1
| join kind=leftouter summary on Key
| project Key, maxValue
- Użyj
arg_max()polecenia , aby pobrać wiersz z najwyższą wartością. Jest to przydatne, gdy potrzebujesz zarówno maksymalnej wartości, jak i skojarzonych kolumn.
let summary =
T
| summarize arg_max(Timestamp, *) by Key;
Dataset1
| lookup summary on Key
- Użyj elementu dla
lookupmapowań klucz/wartość, aby uniknąć naruszeń kontekstu wiersza i zapewnić wydajne wyszukiwanie tabeli wymiarów.
let lookupTable =
T | summarize maxValue = max(Value) by Key;
Dataset1
| lookup lookupTable on Key
- Używanie funkcji okna lub
make-seriesagregacji okien czasowych
Dataset1
| make-series maxValue = max(Value)
on Timestamp
from ago(1h) to now()
step 1m
by Key
Przykłady
W przykładach w tej sekcji pokazano, jak używać składni, aby ułatwić rozpoczęcie pracy.
Ustawianie zakresu na potrzeby oceny
Oceń Startwartości , Endi Step jako stałe skalarne i użyj wyniku do range oceny.
let Start = toscalar(print x=1);
let End = toscalar(range x from 1 to 9 step 1 | count);
let Step = toscalar(2);
range z from Start to End step Step | extend start=Start, end=End, step=Step
Wyjście
| z | start | end | krok |
|---|---|---|---|
| 1 | 1 | 9 | 2 |
| 3 | 1 | 9 | 2 |
| 5 | 1 | 9 | 2 |
| 7 | 1 | 9 | 2 |
| 9 | 1 | 9 | 2 |
Generowanie stałego i dynamicznego identyfikatora GUID
W poniższym przykładzie pokazano, jak można użyć toscalar() do generowania stałych guid, obliczanych dokładnie raz i wartości dynamicznych dla guid.
let g1 = toscalar(new_guid());
let g2 = new_guid();
range x from 1 to 2 step 1
| extend x=g1, y=g2
Wyjście
| x | t |
|---|---|
| e6a15e72-756d-4c93-93d3-fe85c18d19a3 | c2937642-0d30-4b98-a157-a6706e217620 |
| e6a15e72-756d-4c93-93d3-fe85c18d19a3 | c6a48cb3-9f98-4670-bf5b-589d0e0dcaf5 |