Azure 資料總管 (Kusto)

摘要

項目 說明
發行狀態 正式發行
產品 Excel
Power BI (語意模型)
Power BI (數據流)
網狀架構 (資料流 Gen2)
Power Apps (數據流)
Dynamics 365 Customer Insights
支援的驗證類型 組織帳戶
函式參考檔

注意

某些功能可能會存在於一個產品中,但由於部署排程和主機特定功能,而不存在其他功能。

必要條件

支援的功能

  • Import
  • DirectQuery (Power BI 語意模型)
  • 進階選項
    • 限制查詢結果記錄編號
    • 以位元組限制查詢結果數據大小
    • 停用結果集截斷
    • 其他 set 語句

從 Power Query Desktop 連線 至 Azure 數據總管

若要從 Power Query Desktop 連線到 Azure 數據總管:

  1. 在取得數據體驗中選取 [Azure 數據總管] [Kusto ]。 Power Query Desktop 中的數據體驗會因應用程式而異。 如需 Power Query Desktop 取得應用程式數據體驗的詳細資訊,請移至 取得數據的位置。

  2. Azure 資料總管 (Kusto)中,提供 Azure 數據總管叢集的名稱。 在此範例中,使用 https://help.kusto.windows.net 來存取範例說明叢集。 對於其他叢集,URL 的格式為 https://< ClusterName。<>Region.kusto.windows.net>

    您也可以選取裝載於所連線叢集上的資料庫,以及資料庫中的其中一個數據表,或類似的 StormEvents | take 1000查詢。

  3. 如果您想要使用任何進階選項,請選取 選項,然後輸入要與該選項搭配使用的資料。 詳細資訊:使用進階選項 連線

    注意

    您可能需要向下卷動以顯示所有進階選項和數據連線選取專案。

  4. 選取 [匯] 或 [DirectQuery 數據連線模式] (僅限 Power BI Desktop)。 詳細資訊: 使用匯入或直接查詢模式的時機

  5. 選取確定以繼續。

    Azure 資料總管 (Kusto) 對話框的螢幕快照,其中已輸入叢集的 URL。

  6. 如果您還沒有叢集的連線,請選取 [登入]。 使用組織帳戶登入,然後選取 [連線]。

    Azure 數據總管登入對話框的螢幕快照,其中已準備好登入組織帳戶。

  7. [導覽器] 中,選取您想要的資料庫資訊,然後選取 [載入] 以載入數據,或 [轉換數據] 以繼續在 Power Query 編輯器中轉換數據。 在此範例中,已選取 Samples 資料庫中的 StormEvents。

    [導覽器] 開啟並包含 Samples 資料庫中 StormEvents 數據的螢幕快照。

從 Power Query Online 連線 至 Azure 數據總管

若要從 Power Query Online 連線到 Azure 數據總管:

  1. 取得數據體驗中,選取 [Azure 數據總管] (Kusto) 選項。 不同的應用程式有不同的方式可取得Power Query Online取得資料體驗。 如需如何取得 Power Query Online 取得應用程式數據體驗的詳細資訊,請移至 取得數據的位置。

    [取得數據] 視窗的螢幕快照,其中強調 Azure 數據總管。

  2. 數據源 連線 中,提供 Azure 數據總管叢集的名稱。 在此範例中,使用 https://help.kusto.windows.net 來存取範例說明叢集。 對於其他叢集,URL 的格式為 https://< ClusterName。<>Region.kusto.windows.net>

    您也可以選取裝載於所連線叢集上的資料庫,以及資料庫中的其中一個數據表,或類似的 StormEvents | take 1000查詢。

    Azure 資料總管 [選擇數據源] 頁面的螢幕快照,其中已輸入叢集的 URL。

  3. 如果您想要使用任何進階選項,請選取 選項,然後輸入要與該選項搭配使用的資料。 詳細資訊:使用進階選項 連線

  4. 如有需要,請在數據網關中 選取內部部署數據閘道

  5. 如果您還沒有叢集的連線,請選取 [登入]。 使用組織帳戶登入。

  6. 成功登入之後,請選取 [ 下一步]。

  7. 在 [選擇數據] 頁面中,選取您想要的資料庫資訊,然後選取 [轉換數據] 或 [下一步],以繼續在 Power Query 編輯器中轉換數據。 在此範例中,已選取 Samples 資料庫中的 StormEvents。

    [選擇數據] 頁面的螢幕快照,其中包含來自Samples資料庫中 StormEvents 的數據。

使用進階選項 連線

Power Query Desktop 和 Power Query Online 都提供一組進階選項,您可以視需要新增至查詢。

下表列出您可以在Power Query Desktop和Power Query Online 中設定的所有進階選項。

進階選項 描述
限制查詢結果記錄編號 要傳回結果的記錄數目上限。
以位元組限制查詢結果數據大小 要傳回結果的數據大小上限,以位元組為單位。
停用結果集截斷 使用 notruncation 要求選項啟用或停用結果截斷。
其他 Set 語句 設定查詢持續時間的查詢選項。 查詢選項可控制查詢的執行方式,並傳回結果。 多個 Set 語句可以以分號分隔。

如需 Power Query UI 中未提供之其他進階選項的資訊,請移至 在 M 查詢中設定 Azure 數據總管連接器選項。

使用匯入或直接查詢模式的時機

在匯入模式中,數據會移至 Power BI。 在 DirectQuery 模式中,會直接從叢集查詢數據。

在下列情況下使用匯入模式:

  • 您的數據集很小。
  • 您不需要近乎實時的數據。
  • 您的數據已經匯總,或是在 Kusto 中執行匯總。

在下列情況下使用 DirectQuery 模式:

  • 您的數據集非常大。
  • 您需要近乎實時的數據。

若要深入瞭解如何使用 DirectQuery,請移至 關於在 Power BI 中使用 DirectQuery。

使用 Azure Data Explorer 連接器來查詢資料的秘訣

下列各節包含搭配Power Query使用 Kusto 查詢語言的秘訣和訣竅。

Power BI 中的複雜查詢

複雜查詢比 Power Query 更容易以 Kusto 表示。 它們應該實作為 Kusto 函式,並在 Power BI 中叫用。 當您在 Kusto 查詢中使用 DirectQuery 搭配 let 語句時,需要這個方法。 因為 Power BI 會聯結兩個查詢,而 let 語句無法與運算元搭配 join 使用,因此可能會發生語法錯誤。 因此,將聯結的每個部分儲存為 Kusto 函式,並允許 Power BI 將這兩個函式聯結在一起。

如何仿真相對日期時間運算符

Power Query 不包含 相對 日期時間運算子,例如 ago()。 若要模擬 ago(),請使用 DateTime.FixedLocalNow#duration Power Query M 函式的組合。

而不是使用此運算子的 ago() 查詢:

    StormEvents | where StartTime > (now()-5d)
    StormEvents | where StartTime > ago(5d)

使用下列對等查詢:

let
    Source = AzureDataExplorer.Contents("help", "Samples", "StormEvents", []),
    #"Filtered Rows" = Table.SelectRows(Source, each [StartTime] > (DateTime.FixedLocalNow()-#duration(5,0,0,0)))
in
    #"Filtered Rows"

在 M 查詢中設定 Azure 數據總管連接器選項

您可以從 M 查詢語言的 Power Query 進階編輯器設定 Azure 數據總管連接器的選項。 使用這些選項,您可以控制傳送至 Azure 數據總管叢集的已產生查詢。

let
    Source = AzureDataExplorer.Contents("help", "Samples", "StormEvents", [<options>])
in
    Source

您可以在 M 查詢中使用下列任何選項:

選項 範例 描述
MaxRows [MaxRows=300000] truncationmaxrecords set 語句新增至您的查詢。 覆寫查詢可以傳回給呼叫端的默認記錄數目上限(截斷)。
MaxSize [MaxSize=4194304] truncationmaxsize set 語句新增至您的查詢。 覆寫允許查詢傳回給呼叫端的預設數據大小上限(截斷)。
NoTruncate [NoTruncate=true] notruncation set 語句新增至您的查詢。 啟用隱藏傳回給呼叫端的查詢結果截斷。
AdditionalSetStatements [AdditionalSetStatements="set query_datascope=hotcache"] 將提供的 set 語句新增至您的查詢。 這些語句可用來設定查詢持續時間的查詢選項。 查詢選項可控制查詢的執行方式,並傳回結果。
CaseInsensitive [CaseInsensitive=true] 讓連接器產生不區分大小寫的查詢—查詢會在比較值時使用 =~ 運算元,而不是 == 運算符。
ForceUseContains [ForceUseContains=true] 讓連接器在處理文字欄位時產生使用 contains 而非預設值 has 的查詢。 雖然 has 效能更高,但它不會處理子字串。 如需兩個運算符之間差異的詳細資訊,請移至 字串運算元
Timeout [Timeout=#duration(0,10,0,0)] 將查詢的用戶端和伺服器逾時設定為提供的持續時間。
ClientRequestIdPrefix [ClientRequestIdPrefix="MyReport"] 設定連接器所傳送之所有查詢的 ClientRequestId 前置詞。 這可讓查詢在叢集中識別為來自特定報表和/或數據源。

注意

您可以將多個選項結合在一起,以達到所需的行為: [NoTruncate=true, CaseInsensitive=true]

達到 Kusto 查詢限制

Kusto 查詢預設會傳回最多 500,000 個數據列或 64 MB,如查詢限制中所述。 您可以使用 Azure 資料總管 (Kusto) 連線視窗中的 [進階] 選項來覆寫這些預設值

進階選項。

這些選項會發出 具有查詢的 set 語句 ,以變更預設查詢限制:

  • 限制查詢結果記錄編號 會產生 set truncationmaxrecords
  • 限制以位元組 為單位的查詢結果數據大小會產生 set truncationmaxsize
  • 停用結果集截斷 會產生 set notruncation

區分大小寫

根據預設,連接器會產生查詢,以在比較字串值時使用區分 == 大小寫的運算符。 如果數據不區分大小寫,則這不是所需的行為。 若要變更產生的查詢,請使用 CaseInsensitive 連接器選項:

let
    Source = AzureDataExplorer.Contents("help", "Samples", "StormEvents", [CaseInsensitive=true]),
    #"Filtered Rows" = Table.SelectRows(Source, each [State] == "aLaBama")
in
    #"Filtered Rows"

使用查詢參數

您可以使用 查詢參數 動態修改查詢。

在查詢步驟中使用查詢參數

您可以在支援查詢的任何查詢步驟中使用查詢參數。 例如,根據參數的值來篩選結果。 在此範例中,選取 Power Query 編輯器中數據行右側的State下拉功能表,選取 [文字篩選>等於],然後在 [保留數據列的位置] 下選取 [ALABAMA]。

使用參數篩選結果。

提供參數給 Azure 數據總管函式

Kusto 函式是維護複雜 Kusto 查詢語言 (KQL) 查詢的絕佳方式。 我們建議使用函式,而不是在Power Query中內嵌 KQL。 使用函式的主要優點是邏輯會在容易建立和測試的環境中維護一次。

函式也可以接收參數,因此為Power BI使用者新增許多彈性。 Power BI 有許多方式可以分割數據。 但所有篩選和交叉分析篩選器都會在原始 KQL 之後新增,而且在許多情況下,您會想要在查詢的早期階段使用篩選。 使用函式和動態參數是自定義最終查詢非常有效的方法。

建立函式

您可以在任何可存取的 Azure 數據總管叢集中建立下列函式,包括免費叢集。 此函式會從說明叢集傳回數據表 SalesTable ,並篩選出大於或小於報表使用者所提供的數字的銷售交易。

.create-or-alter  function LargeOrSmallSales(Cutoff:long,Op:string=">")
{
    cluster("help").database("ContosoSales").SalesTable
    | where  (Op==">" and SalesAmount >= Cutoff) or (Op=="<"  and SalesAmount <= Cutoff)
}

建立函式之後,您可以使用下列項目進行測試:

LargeOrSmallSales(2000,">")
| summarize Sales=tolong(sum(SalesAmount)) by Country

您也可以使用:

LargeOrSmallSales(20,"<")
| summarize Sales=tolong(sum(SalesAmount)) by Country
在 Power BI 中使用 函式
  1. 連線 至您建立函式的叢集。

  2. 在 Power Query 導覽器中,從物件清單中選取函式。 連接器會分析參數,並將其呈現在導覽器右側的數據上方。

    螢幕快照,顯示於導覽器中數據上方的 [關閉] 和 [Op] 參數。

  3. 將值新增至參數,然後選取 [ 套用]。

  4. 預覽出現之後,選取 [ 轉換數據]。

  5. 在 Power Query 編輯器中建立兩個參數,一個用於截止值,另一個用於運算符。

  6. 返回查詢, LargeOrSmallSales 並將值取代為公式列中的查詢參數。

    使用 LargeOrSmallSales 函式的螢幕快照,強調公式列中的Cutoff_Param和Op_Param參數。

  7. 從編輯器中,建立兩個靜態數據表(Enter Data),以提供兩個參數的選項。 針對截止,您可以建立具有 10、50、100、200、500、1000、2000、2000 等值的數據表。 Op針對,具有兩個 Text 值<>的數據表。

  8. 數據表中的兩個數據行必須使用系結至參數選取範圍,系結至查詢參數

    將 Op 系結至 Op_Param 參數的螢幕快照。

最終報表會包含兩個靜態數據表的交叉分析篩選器,以及摘要銷售的任何視覺效果。

Power BI 中的螢幕快照,其中包含數據表旁顯示的 [剪下] 和 [Op] 值選取專案。

基表會先篩選,然後匯總。

在線上詳細數據中使用查詢參數

使用查詢參數來篩選查詢中的資訊,並將查詢效能優化。

進階編輯器

  1. 尋找下列查詢區段:

    Source = AzureDataExplorer.Contents(“<Cluster>”, “<Database>”, “<Query>”, [])

    例如:

    Source = AzureDataExplorer.Contents("Help", "Samples", "StormEvents | where State == 'ALABAMA' | take 100", [])
    
  2. 將查詢參數插入 Kusto 查詢語言 (KQL) 查詢。

    如果您直接在連線對話框中貼上 KQL 查詢,查詢將會是 Power Query 中來源步驟的一部分。 您可以使用進階編輯器或在公式列中編輯來源語句時,將參數內嵌為查詢的一部分。 查詢範例可以是 StormEvents | where State == ' " & State & " ' | take 100State 是參數,而且在運行時間查詢會是:

    StormEvents | where State == 'ALABAMA' | take 100

  3. 如果您的查詢包含引號,請正確編碼。 例如,KQL 中的下列查詢:

    "StormEvents | where State == "ALABAMA" | take 100"
    

    會出現在 進階編輯器,如下所示,加上兩個引號:

     "StormEvents | where State == ""ALABAMA"" | take 100"
    

    如果您使用 參數,例如 State,它應該取代為下列查詢,其中包含三個引號:

    "StormEvents | where State == """ & State & """ | take 100"
    

針對 Azure 數據總管功能使用 Value.NativeQuery

若要使用 Power Query 不支援的 Azure 數據總管功能,請使用 Power Query M 中的 Value.NativeQuery 方法。這個方法會在產生的查詢內插入 Kusto 查詢語言 片段,也可以用來讓您更充分掌控執行的查詢。

下列範例示範如何在 Azure 數據總管中使用 函 percentiles 式:

let
    StormEvents = AzureDataExplorer.Contents(DefaultCluster, DefaultDatabase){[Name = DefaultTable]}[Data],
    Percentiles = Value.NativeQuery(StormEvents, "| summarize percentiles(DamageProperty, 50, 90, 95) by State")
in
    Percentiles

請勿使用Power BI資料重新整理排程器向 Kusto 發出控制命令

Power BI 包含可定期對數據源發出查詢的數據重新整理排程器。 此機制不應該用來將控制命令排程至 Kusto,因為 Power BI 假設所有查詢都是唯讀的。