本篇文章引用並翻譯自 Zoe Douglas 的 ”Deep dive into DAX query view and writing DAX queries”,最初發表並公開於2023年11月30日 Microsoft Power BI Blog,以下翻譯僅供參考,如有歧義一律以原文為主。引用來源:https://powerbi.microsoft.com/zh-tw/blog/deep-dive-into-dax-query-view-and-writing-dax-queries/
在 2023 年 11 月版本中,我們在 Power BI Desktop 的公共預覽版中新增了新的第四個視圖,即 DAX 查詢檢視!
DAX 查詢檢視使您能夠在語義模型上編寫、編輯和查看數據分析表達式(Data Analysis Expressions,简称DAX)或 DAX 查詢的結果。最後,現在可以在使用語義模型時利用現有的DAX查詢語法,而無需離開Power BI Desktop。
由於此功能為公共預覽版,若要在Power BI Desktop 中查看DAX查詢檢視,需要確保至少使用2023年11月的版本,並已轉到“文件”>”選項和設置”>“選項**”>“預覽功能**”,然後單擊“DAX 查詢檢視”旁邊的複選框。
這種在 Power BI Desktop 中與語義模型交互的強大新方式提供了多種方法,可幫助你盡可能高效地處理 DAX 查詢。
- 通過「資料」窗格的快速查詢,可以輕鬆創建 DAX 查詢。預覽數據或顯示摘要統計資訊,以幫助你了解數據,而無需創建視覺物件或編寫 DAX 查詢。在 DAX 查詢檢視的「資料」 窗格中的表、列或度量值的上下文選單中尋找快速查詢。
- DirectQuery 模型作者可以使用 DAX 查詢檢視。 不再需要返回到 Power Query 來預覽數據。
- 新的度量值創作工作流程。最後,在編輯器中一次查看多個度量值,進行更改,運行查詢進行測試,最後更新模型。所有操作都可以在一個地方完成!
- 請參閱視覺物件的DAX查詢。視覺物件未顯示您預期的數據?現在,可以通過查看視覺對象用於獲取數據的DAX查詢來進一步調查。從「性能分析器」窗格訪問此功能。
- 創建您自己的 DAX 查詢。只需在 DAX 查詢檢視中編寫 DAX 查詢,然後點擊執行。您甚至可以為該 DAX 查詢定義和使用模型中不存在的度量值和變數。
顧名思義,DAX 查詢檢視允許您創建DAX查詢。這與用於創建度量值和計算列的 DAX 公式不同。DAX 查詢類似於 SQL 查詢,您可以使用它來查看模型中的數據。
DAX 查詢有兩個主要部分:
- EVALUATE ,這是必需的,用於指定要查看的數據。
- DEFINE ,這是可選的,可以指定要在 DAX 查詢中使用的度量值或命名的 DAX 公式。此度量值可以已經存在在模型中,也可以不在模型中。如果已存在,您可以進行僅適用於此 DAX 查詢的更改來試用它們。您還可以選擇使用這些度量值更新模型,我們將在本blog文章的後面部分更詳細地介紹這些度量值。
運行 DAX 查詢的結果是一個數據表。有關 DAX 查詢的詳細資訊,您可以在 aka.ms/dax-queries了解更多關於DAX查詢的訊息。
你們中的許多人可能已經通過使用出色的DAX Studio進而熟悉DAX查詢。DAX Studio 是一個社區驅動的免費外部工具,還可以運行 DAX 查詢。它不僅運行 DAX 查詢,還具有豐富的 DAX 創作/性能功能,安裝後可在 Power BI Desktop 中從“外部工具”功能區進行訪問。感謝 Darren Gosbell 和 Power BI 社區繼續宣導使用 DAX Studio 進行 DAX 查詢。
如果您不太確定從哪裡開始使用DAX查詢,那也沒關係!DAX 查詢檢視可以生成一些檢視,以便您查看 DAX 查詢、運行它並根據需要對其進行修改。讓我們看一個使用快速查詢的範例。
若要繼續操作,請從 https://learn.microsoft.com/power-bi/create-reports/sample-datasets#updated-samples 下載Store Sales PBIX。
當我第一次點擊DAX查詢檢視時,將顯示一個示例查詢,用於獲取模型中其中一個表的前100行。在 Store Sales的情況下,這是 Store 表。
點擊「運行」,表的前100行將顯示在下面的結果網格中。在 SQL 中,這與以下相同:
SELECT TOP 100 * FROM Store
這對於預覽所有列的數據非常有用,但很難更改要查看的列。因此,讓我們嘗試快速查詢。
在「數據」窗格中,右鍵單擊「存儲」表,然後從上下文功能表中選擇「快速查詢」 >「顯示前 100 行」。
將創建一個新的查詢選項卡,其中包含顯示相同數據的不同 DAX 查詢。這一次,所有列都被明確列出,有一個 TOPN 部分,該部分還指定了選擇前 100 行的列和該列中的順序,以及一個 ORDER BY 來指定結果的排序。
因此,現在我們可以看到 SELECTCOLUMNS 如何從模型中獲取數據。
在 SQL 中,這與以下查詢相同:
SELECT TOP 100
store.[LocationID],
store.[City Name],
store.[Territory],
store.[PostalCode],
store.[OpenDate],
store.[SellingAreaSize],
store.[DistrictName],
store.[Name],
store.[StoreNumberName],
store.[StoreNumber],
store.[City],
store.[Chain],
store.[DM],
store.[DM_Pic],
store.[DistrictID],
store.[Open Year],
store.[Store Type],
store.[Open Month No],
store.[Open Month]
FROM
store
ORDER BY
store.[LocationID] ASC
通過這個快速查詢,我們可以刪除或註釋掉我們不想在結果網格中看到的列,調整行數,按列更改順序等。 SELECTCOLUMNS 用於此查詢,因為如果您有多個具有相同值的行,它們都會顯示出來。將其更改為 SUMMARIZE 以消除重複的行。
讓我們看看每個位置的City、Store Name、Store Type和Selling Area Size,並按所有行的Selling Area Size查看訂單。為此,我會註釋掉或刪除不需要的列,將 TOPN 更改為僅引用表,並更改 ORDER BY 中使用的列。
現在,我看到了有關所有104家商店的有針對性的資訊。我甚至可以複製它並將結果粘貼到 Excel 中。
現在我很好奇可能的Selling Area Sizes值是多少。這看起來不是一個確切的數位,而是一種按規模對商店進行分組的方法。在「數據」窗格中,右鍵單擊「SellingAreaSize」列,然後從上下文功能表中選擇「快速查詢」 >「顯示數據預覽」。
現在我可以看到Selling Area Size有9個值。正如我所懷疑的那樣,這是一種按規模對商店進行分組的方法。
在 SQL 中,此 DAX 查詢與以下項相同:
SELECT DISTINCT Store.SellingAreaSize
FROM Store
我現在想知道我們每個Selling Area Size有多少家商店。在此數據中,有一個名為 [Store Count] 的度量值,因此讓我們使用快速查詢來查看該數字。通過在**「數據**」窗格中更改為「模型」,或者使用搜索欄(如果已知道名稱),可以更輕鬆地查找模型中的所有度量值。在「數據」窗格中,右鍵單擊「存儲計數(Store Count)」度量值,然後從上下文功能表中選擇「快速查詢」 >「評估」。
這將在新的查詢選項卡中再次創建DAX查詢。我們再次發現,這些數據中有104家商店。
在 SQL 中,沒有真正等同於語義模型中的度量的概念 – 您必須在每個 SQL 查詢中定義聚合,這與 DAX 查詢中的隱式度量值相同。但是,您可以使用此 SQL 查詢獲得相同的結果:
SELECT
COUNT(*) AS 'Store Count'
FROM Store
此快速查詢使用 SUMMARIZECOLUMNS,這意味著我們可以按列添加,例如Selling Area Size,以回答有關每種商店規模有多少商店的問題。
而且我發現大多數商店都相對較小。我不僅可以添加更多分組依據列,還可以添加更多度量值,從而進一步構建此查詢。讓我們添加 Sales。
DAX 查詢檢視還可以顯示 [TotalSales] 度量值的 DAX 公式。我可以將滑鼠懸停在它上面以疊加形式看到它:
但我可以看到它引用了模型中的其他度量。我在覆蓋層中看不到它們的 DAX 公式,但 DAX 查詢檢視可以利用 DAX 查詢中的 DEFINE 語法。我只需點擊幾下即可顯示此度量值的 DAX 公式和所有引用度量值的 DAX 公式。
- 點擊度量值名稱(measure name),將游標置於第5行的度量值名稱中。
- 左側出現一個燈泡。
- 點擊燈泡以查看可用的操作或使用 CTRL+。(句號)。
- 點擊使用”引用定義(Define with references)”
這將為此 DAX 查詢創建 EVALUATE 正上方的 DEFINE 區塊。如果查詢選項卡中已有 DEFINE,則這些選項將不可用。
您不僅可以查看 DAX 公式,甚至可以編輯其中的一個或多個公式。運行 DAX 查詢時,它們將使用查詢選項卡中的修改版本,而不是模型度量值 DAX 公式。這樣我就可以測試任何更改!在這裡,我將其中一項措施翻了一番。我甚至可以添加一個在模型中尚不存在的DAX查詢中使用的度量值,例如查看每個商店規模的每家商店的平均銷售額。
DAX 查詢檢視可以檢測到你已更改模型中存在的度量值中的 DAX 公式,因此將顯示一個可點擊的上標,稱為 CodeLens,如果按下該上標,它將使用新的 DAX 公式更新模型。對於模型中尚不存在的度量值,點擊CodeLens 會將此度量值添加到模型中。我不想保留乘以 2 的變化,但我確實想加上每家商店的平均銷售額。
度量值將添加到模型中,CodeLens 將消失。
我甚至可以刪除 DEFINE 塊並再次運行查詢。
商店的銷售區域規模越大,平均銷售額就越高。
度量值快速查詢和 CodeLens 一起在 DAX 查詢檢視中創建新的度量值創作工作流程。
度量值的快速查詢還可以選擇在表或模型中定義所有度量值!在「數據」窗格中,右鍵單擊任意度量值,然後從上下文功能表中選擇「快速查詢」 >「定義此模型中的所有度量值」。
現在,您有一個大型 DAX 查詢,該查詢定義了所有度量值,並創建了一個 EVALUATE 區塊,以便在模型級別查看所有度量值。
SQL 同樣沒有等效於語義模型中的度量值。這些都需要是 SQL 查詢中的聚合,但 DAX 公式可以引用其他度量值並執行上下文更改(查看去年或按特定篩選器查看),這在 SQL 中重現更具挑戰性。
將所有度量值放在一個查詢選項卡中後,我就可以執行諸如查找之類的操作。例如,我可以看到有多少度量使用“Selling Area Size”列。為此,我點擊「查找」功能區按鈕或使用 CTRL+F。我看到有兩個度量值正在使用該列:
現在,我對 DAX 查詢的工作方式有所瞭解,可以創建自己的查詢。首先,我添加了一個新的查詢選項卡。我可以使用 SUMMARIZECOLUMNS 查看不同項目類別的毛利率比較情況,然後定義我自己的度量來顯示同比差異,並按改進最大的類別對結果進行排序。
這太棒了!我可以使用 DAX 查詢快速完成此分析。此 DAX 查詢看起來不像快速查詢那麼漂亮,因為我手動鍵入它而沒有意格式。值得慶幸的是,我可以點擊設置查詢格式功能區按鈕,或右鍵按下並選擇「設置文件格式」,甚至可以使用SHIFT+ALT+F來設置我的DAX查詢的格式。
格式化不僅僅是讓它看起來更漂亮、更易於閱讀。我可以透過縮排的位置摺疊區塊。
視覺物件本身也不僅僅是漂亮的數據可視化。報表檢視視覺物件使用DAX查詢從模型中獲取數據。也可以在 DAX 查詢檢視中查看 DAX 查詢。在“報表”視圖中,轉到“優化”功能區,然後點擊“性能分析器”。現在,點擊下「開始錄製」,然後按下「刷新視覺物件」。最後,展開清單中的視覺物件標題,然後點擊使用DAX查詢檢視運行。這會將你移動到 DAX 查詢檢視,可在其中查看可視 DAX 查詢和結果。
因此,這裡有一個關於如何開始使用DAX查詢檢視的快速教程!以下資源可幫助您深入了解:
- 詳細瞭解 DAX 查詢檢視的所有功能及其限制:https://learn.microsoft.com/power-bi/transform-model/dax-query-view
- 瞭解有關 DAX 查詢的詳細資訊:aka.ms/dax-queries
- 提供有關 DAX 查詢檢視的反饋: https://forms.office.com/r/AeLsLNX8Qy
- 通過在 https://dax.do/ 上運行 DAX 查詢,使用另一個出色、免費的社區驅動的工具/網站繼續學習 DAX 查詢。