使用 DAX Studio 為 LuckyTemplates 優化 DAX – 公式引擎

當您為 LuckyTemplates 優化數據模型和 DAX 時,記住有兩個引擎在幕後運行 —公式引擎存儲引擎會有所幫助。

這兩個引擎協同工作,將需要的結果返回給用戶。它們以表格或刻度值的形式提供結果集。

目錄

公式引擎的作用

在本文中,我們將重點關注公式引擎。

公式引擎是管理查詢的整個架構的頂級引擎。

無論您在執行查詢或創建計算列或計算表時做什麼,公式引擎都會啟動。

公式引擎不僅可以理解 DAX 中收到的查詢,還可以理解 MDX 中收到的查詢。例如,當您使用 Excel 時,您會根據數據透視表創建數據透視表模型,而數據透視表實際上使用 MDX 語言。

這就是公式引擎發揮作用的地方。因為它同時理解 DAX 和 MDX,所以你可以使用另一個 LuckyTemplates 模型。從此數據模型發送的查詢將使用 DAX,而來自數據透視模型的查詢將使用 MDX。

公式引擎如何工作

了解源自 MDX 源或 DAX 源的查詢只是影響公式引擎性能的因素之一。它還會通過其他步驟來幫助您處理查詢。

首先,它必須生成存儲引擎理解的查詢計劃。作為較低級別的引擎,存儲引擎實際上並不知道執行查詢的是 Excel 中的數據透視表還是 LuckyTemplates 中的視覺對象。

在創建查詢計劃時,公式引擎首先構建邏輯查詢計劃,然後創建物理查詢計劃。邏輯和物理查詢計劃應該看起來很像。

完成物理查詢計劃後,用戶或客戶端工具獲取結果集。從那裡,客戶端工具指示它將如何使用結果或數據集向用戶顯示最終結果。

公式引擎的主要限制

當您使用 DAX Studio 為 LuckyTemplates 優化 DAX 時,公式引擎發揮著巨大的作用。但是,它也有一些限制。

首先,無論您的系統中有多少個 CPU 內核可用,公式引擎始終使用單個內核來管理您的整個操作

當我打開任務管理器時,您會看到我的 CPU 有六個內核。

使用 DAX Studio 為 LuckyTemplates 優化 DAX – 公式引擎

儘管如此,公式引擎仍會選擇這六個內核中的一個來使用,而讓存儲引擎使用其餘的內核。

其次,公式引擎無法直接訪問您的數據庫。由於此限制,您必須將數據存儲在內部存儲器中,或者您可以存儲在數據庫中並在該數據庫上創建 DirectQuery。

它還依賴存儲引擎以數據緩存的形式獲取數據。然後公式引擎迭代該數據緩存以繼續,然後才能將結果提供給最終用戶。

公式引擎如何幫助優化 LuckyTemplates 的 DAX

有時,當您嘗試為 LuckyTemplates 優化數據模型或 DAX 時,您會注意到存儲引擎在執行查詢時速度變慢。在這種情況下,您可以在完成整個計算過程中使用公式引擎來優化流程。

請注意,如果公式引擎最終自行構建整個表,則在此過程中創建的結果集將不會用於客戶端工具將生成的後續查詢(如果它們與先前執行的查詢相似)。但是如果存儲引擎提供數據緩存,那麼特定的數據緩存可以保存在內存中,以便它可以優化來自客戶端工具的請求。

那將如何運作?

假設我們編寫了一個完全由存儲引擎執行的查詢,但某些方面由公式引擎計算。在這種情況下,存儲引擎會將數據緩存發送回公式引擎,並且該數據緩存(如果是簡單緩存)可以保存在內存中。

現在,如果幾秒鐘後出現類似的查詢,公式引擎或存儲引擎將使用該特定數據緩存,而不是再次掃描整個數據模型,這樣可以減少查詢時間並改善用戶體驗改善。

減少公式引擎的負載

同樣,公式引擎理解 DAX 和 MDX 代碼。

因此,如果您使用和其他任務,公式引擎會知道您在 DAX 語言中使用的所有函數,並且能夠自行解決所有問題。但是,這可能會影響查詢的性能,尤其是因為公式引擎試圖使用單個內核來完成所有工作。

這就是為什麼我們還需要注意減少公式引擎的負載並增加存儲引擎的負載。

的使用。

當您使用 CROSSJOIN 時,只有有限數量的數據將通過存儲引擎處理。至於剩下的計算,全部由公式引擎來完成。相比之下,使用 SUMMARIZE 意味著在存儲引擎中執行整個查詢。

當然,這也取決於 SUMMARIZE 的使用方式。

如果把SUMMARIZE作為最裡面的函數,那麼肯定會下推到存儲引擎。但在某些情況下,SUMMARIZE 與需要公式引擎才能工作的不同代碼結合使用。在這種情況下,公式引擎將介入並完成工作。

了解負載的去向可以幫助您優化查詢的性能,尤其是當您牢記處理引擎的容量和限制時。

有助於為 LuckyTemplates 優化 DAX 的工具

如果您最大限度地利用使之成為可能的工具,那麼優化 DAX 將變得更加容易。DAX Studio就是其中的一種工具。

讓我們以前面的示例為例,其中公式引擎在使用 SUMMARIZE 函數時承擔完成計算的全部負載。DAX Studio 可以幫助您以將 SUMMARIZE 推送到存儲引擎的方式重寫代碼,從而釋放公式引擎的負載。這可能會提高數據模型和查詢的性能。

當然,這應該可以無縫地用於簡單的查詢。還有更複雜的場景。

例如,您可以構建在數據模型本身內使用兩個存儲引擎的複合模型。一個可能用於 Vertipaq,而另一個用於 DirectQuery。在這種情況下,您的數據庫必須以某種方式進行優化,以便為特定的關係數據模型構建生成的查詢。

假設您的日期模型中有兩個表 — Products 表和 Sales 表。Products 表位於 Vertipaq 存儲中,而 Sales 表是一個更大的表,通過 DirectQuery 連接直接存儲在數據庫中。

我們還假設您將 Brand 列以及來自 DirectQuery 連接中的 Sales 表的 Total Sales 度量值拖到矩陣中。

在這種情況下,公式引擎將不得不在兩個引擎之間執行操作。

首先,它將從 Products 表中檢索 Product Key 和 Brand 列。然後,它將從 Sales 表中檢索 Net Price、Quantity 和 Product Key 列。一旦它擁有來自 Vertipaq 和 DirectQuery 的數據緩存,公式引擎將不得不獲取數據緩存並嘗試加入它們以向最終用戶提供結果。


DAX 查詢優化技術和課程
查詢性能和 DAX Studio 設置
DAX 優化:在哪裡可以找到隱藏的 DAX 陷阱

結論

當您使用 DAX 時,公式引擎確實發揮著巨大的作用。但是,在開始使用之前先了解它的工作原理至關重要。掌握如何使公式引擎和存儲引擎無縫協同工作是關鍵,尤其是當您希望 DAX 查詢性能更好時。

作為分析服務架構中的頂層引擎,公式引擎需要進行大量的操作。但是一旦您還了解了存儲引擎的來龍去脈,您就可以弄清楚哪些操作要推入存儲引擎,哪些要留在公式引擎中。

我們將在單獨的教程中更深入地研究存儲引擎。

一切順利,

Leave a Comment

在 Power Automate 中執行直到循環控制

在 Power Automate 中執行直到循環控制

了解有關 Do Until 循環控制如何在 Power Automate 流中工作的基礎過程,並熟悉所需的變量。

使用 Deneb 為 LuckyTemplates 製作自定義視覺對象

使用 Deneb 為 LuckyTemplates 製作自定義視覺對象

受限於 LuckyTemplates 中提供的標準視覺效果?學習使用 Deneb 和 Vega-Lite 為 LuckyTemplates 創建自定義視覺對象,提升您的數據可視化能力。

在 Power Automate Desktop 中將日期添加到文件名

在 Power Automate Desktop 中將日期添加到文件名

在此博客中,您將了解如何使用 Power Automate Desktop 自動將日期添加到文件名的開頭或結尾。

Power Query:如何快速添加註釋

Power Query:如何快速添加註釋

找出幾種不同的方法在 Power Query 中添加註釋,這對於不喜歡記筆記的人非常有幫助。

Power Apps – SharePoint 集成指南

Power Apps – SharePoint 集成指南

在此博客中,您將了解 MS Power Apps 界面的基礎知識並了解 Power Apps-SharePoint 集成的過程。

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。