LuckyTemplates 中的 RANKX DAX 函數:全面概述

LuckyTemplates 中的 RANKX DAX 函數:全面概述

是最常用的 DAX 函數,用於在 LuckyTemplates 中對見解進行排名。這是一個簡單的功能,但可能會讓新手感到困惑。但是,這是一個非常強大的功能,可以為您的報告產生有價值的見解。

在本文中,您將了解 RANKX DAX 函數的來龍去脈。您將了解何時以及如何使用它,並且您將在我們探索一些場景和示例時看到此功能的用處。

目錄

DAX RANKX 函數定義和語法

RANKX LuckyTemplates DAX 函數返回表參數中每一行的數字列表中特定數字的排名。它可用於計算列和計算度量的計算。以下是 RANKX 公式語法。

RANKX(
     , , , ,
)

對於表參數,可以輸入LuckyTemplates中導入的標準表或通過DAX計算的表。RANKX 作為迭代函數,然後遍歷該表並對特定數字進行排名。這取決於表中值的數量。例如,如果表有 20 個值,那麼 RANKX 將有一個從 1 到 20 的排名結果。

理解 RANKX 函數的一個關鍵是它返回一個標量值。在表達式參數中,我們需要一個返回標量值的 DAX 表達式。該表達式循環遍歷表中的每一行,從而為您提供相應的排名值。

value 和 order 參數是可選的,而 ties 參數可幫助您在值中存在聯繫時確定排名。

RANKX 和 LuckyTemplates DAX 公式概念

有許多概念需要很好地理解,以確保創建您期望的排名結果。我將討論運行 DAX 計算時最重要的概念,即“上下文”。一旦弄清楚了這一點,您就可以真正理解如何有效地使用 RANKX 函數。

RANKX 是一個非常獨特的 DAX 函數,需要更深入地思考其邏輯以及在特定上下文(例如 LuckyTemplates 中的表格或圖表)中運行計算時它的實際工作方式。

DAX RANKX 函數中的每個不同參數都可以改變它計算結果的方式。您可以將多個參數輸入到此 DAX 函數中,以了解每個參數如何確定被認為很重要的基礎結果。

這就是為什麼了解 RANKX 如何在各種環境中工作的關鍵要素和概念至關重要。這將使您能夠確保您的計算是正確的,並且您的消費者正在查看真正有意義的見解。

基本 RANKX DAX 場景

首先,讓我們看一下簡單的 RANKX 計算。在此示例中,我們嘗試 根據我們銷售的所有不同產品的銷售額 (這也可以基於任何度量)來確定這些產品的排名。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

首先,我們需要在 RANKX 中創建一個表,以根據我們指定的度量來評估每個產品。ALL  函數可用於從 Products表中刪除任何過濾 並評估每個產品。 

LuckyTemplates 中的 RANKX DAX 函數:全面概述

但是,如果我們刪除過濾器(在本例中為 ALL 函數),只使用“Products”,它會顯示不同的結果。這就是為什麼我們需要使用 ALL 函數來獲得正確的結果。這就是解決簡單 RANKX 計算的方法。 

但如果它變得更複雜呢?如果您需要的排名結果不僅僅基於總銷售額怎麼辦?那麼,這就是我們需要了解此計算的當前上下文的地方。我們需要知道如何操縱上下文以獲得我們想要的結果。

複雜的 RANKX DAX 場景

讓我們嘗試將完全相似的公式(產品排名度量)引入右側的表格中。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

如您所見,它給了我們另一個錯誤的結果。這背後的原因是我們這裡還有一個 Customer Name 列。如果我們再次查看該公式,您會發現它並沒有 分解每個單獨的客戶。我們僅為每個特定客戶評估產品。

讓我們嘗試整理 Customer Name 列。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

即使我們對 Customer Name 列進行排序,Product Ranking 仍然會根據他們購買的產品的排名而變化。有很多相同的數字。一個例子是排名 17。在這種情況下,可能是因為 該特定客戶只購買了 17 件產品

LuckyTemplates 中的 RANKX DAX 函數:全面概述

在這種情況下,這可能就是您所需要的。但是,如果您需要比這更複雜的東西怎麼辦?如果您需要從 1 到Customer Name 和 Product 上下文的不定值的排名怎麼辦?

正如我所強調的,理解上下文以及我們如何操縱上下文 以獲得我們想要的結果是很重要的 。

在我們的示例中,我們有兩個維度,它們來自兩個完全不同的表。我們有 Customers 表中的 Customer Name  和 Products 表中的 Product Name 列。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

我們需要以某種方式從兩個表的RANKX 邏輯中刪除此虛擬表上的過濾器。 我們需要執行我們在第一個表(左側)中所做的操作,但我們需要在兩個特定表中的客戶名稱和產品名稱列中執行此操作。

然後最終,我們將通過客戶名稱和產品名稱的總銷售額獲得正確的排名。這是我們可以用於這種不同場景的公式。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

函數允許我們將兩列連接在一起,或者它也可以是兩個表。但是,在這種情況下,我們將只連接列。

我們正在 從 Customers 和 Products 表中刪除所有過濾器 。然後,我們將遍歷此虛擬表中的每一行,並評估或識別此特定客戶名稱和產品名稱子集的特定排名。

高級 RANKX DAX 示例

正如您在前面的示例中看到的那樣,當您將 RANKX 函數用於報告頁面上的一系列不同上下文時,它會為您提供有價值的見解。但是,它也可能是 LuckyTemplates 中使用起來最令人困惑的函數之一。它可以給你不同的結果,這些結果似乎是正確的,但實際上是錯誤的。如果您不小心,您最終將不得不返工整個報告。

您需要對上下文有深入的了解,然後學習如何在該上下文中使用 RANKX。

我將深入探討 RANKX 有時會有多複雜。我將通過一個示例來工作,以便您了解使用此函數的許多細微差別。

在下面的可視化中,我們有縣排名、州排名和州地區排名。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

如果您想在一個矩陣中查看所有計算上下文,那麼管理計算上下文可能會很困難。讓我們看一下表格。您可以看到它包含有關州、州和縣的信息。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

對於此示例,您需要計算縣的排名。如果表中只有 County、County Ranking 和 Total Sales,就會得到正確的排名結果:

LuckyTemplates 中的 RANKX DAX 函數:全面概述

但是,一旦您開始對錶中的其他上下文進行分層,排名結果就會開始為位於不同州和州地區的每個縣累積。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

因此,您需要確定和更改計算的上下文,以確保無論在報告頁面上選擇什麼,您都能獲得每個縣的正確總體排名。每當您選擇像科羅拉多這樣的州時,公式也會更新。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

您還可以使用 State Regions 進行選擇。如果您選擇東北,它會顯示正確的排名。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

在此示例中,兩個公式用於獲取縣排名。這將幫助您了解使用不同的DAX 函數和 RANKX生成的結果的差異:

公式 #1:使用 ALL 和 ALLSELECTED 的 RANKX

ALL 函數是該縣排名公式的關鍵部分:

LuckyTemplates 中的 RANKX DAX 函數:全面概述

它在 RANKX 公式中操縱上下文。然後它遍歷 Regions 表並創建排名結果。在這種情況下,無論初始上下文如何,ALL 函數實際上都在處理每個縣。

當您開始對切片器上下文進行分層時,這個問題就變得複雜了。通過使用,排名將根據切片器中的選擇自動更新。您還需要利用在結果上放置額外的上下文或更改計算的上下文。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

上下文根據 CALCULATE 函數中的過濾器進行調整。這樣,排名將根據來自州和州區域切片器的上下文進行調整。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

公式 #2:具有 ALL 和 VALUES 的 RANKX

現在讓我們看看 County (Updated) 列。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

您要確保此列將繼續顯示總體排名,而不管在切片器中選擇了什麼。每個縣都應該有一個唯一的編號。

這是使用的公式:

LuckyTemplates 中的 RANKX DAX 函數:全面概述

對於這個例子,沒有辦法破譯一個獨特的縣,所以創建了另一個列。全縣列包括縣、州和地區。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

這使您可以很好地區分縣。這樣,您現在可以使用數據中縣的虛擬表。在執行此操作之前,您需要從 Regions 表中刪除 ALL 上下文。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

因此,此時來自區域表的任何上下文都不存在。使用函數,您可以添加回 Full County 列的上下文。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

一種選擇是使用 ALL 函數引用每一列,但更好的選擇是從 Regions 中刪除所有上下文,只取回 Full County。一旦在 CALCULATE 中處理了上下文,RANKX 函數就從那裡開始工作。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

RANKX 遍歷每一行的每個縣及其總銷售額,然後對它們進行排名。這就是您如何在 County (Updated) 行下獲取 1 到 X 的值。因此,過濾器和切片器無關緊要,也不會影響排名,因為公式已設置為忽略它們。

其他實用的 RANKX Measure LuckyTemplates 示例

現在您已經了解了 RANKX 和 LuckyTemplates DAX 概念的基礎知識,讓我們探索更多關於如何使用 RANKX 的示例。首先,通過一個示例,其中 RANKX 用於查找最高值和最低值。下一個示例展示了 RANKX 作為對結果進行細分或分組的一種方式。

使用 RANKX 查找最高值和最低值

RANKX 的一個常見用法是當您想要找出最高或最低值時。例如,如果你想找到你的頂級客戶或你的底部產品,你可以將 RANKX 與其他 DAX 函數一起使用。

在第一個示例中,我將向您展示如何將 RANKX 與 CALCULATE 和函數結合起來,以查看我們的頂級客戶是誰,不僅針對靜態時間段,而且針對整個時間段。然後,我們將在前 10 大客戶的銷售矩陣中展示它。

當我們將Quarter & Year 和 Total Sales 度量放入矩陣時,我們得到了所有結果。這很好,但很難看到任何洞察力和發現趨勢。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

我們希望了解趨勢並確定我們在此期間的前 10 大客戶。例如,我們是否有一位客戶在一段時間內是我們的頂級客戶之一,但後來完全消失了?這些是我們正在尋找的洞察力。

我們可以使用一個公式來做到這一點。這是我使用 CALCULATE 函數創建的度量,用於計算前 10 名客戶的總銷售額。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

我們必須使用排名邏輯 來創建一個排名邏輯指標,如果該客戶位於前 10 名,則返回此 Total Sales 值。除了在 LuckyTemplates 中使用 RANKX 之外,我們還將使用 FILTER 函數,然後使用 VALUES,這將為每個客戶創建一個內部表。

然後我們需要考慮這裡要寫什麼邏輯,比如“如果當前排名小於或等於10等於總銷售額如果不是,則等於空白。” 像這樣的過濾語句真正酷的地方在於你可以在裡面寫這種類型的邏輯。

因此,我們將使用 RANKX 函數和所有客戶名稱,因為我們將在任何特定上下文中對每個客戶進行排名。ALL 取消了對客戶名稱的任何篩選,以便我們可以完成此排名。

然後我們將按總銷售額排名並按降序排列,然後我們將小於或等於 10。是,我們希望它等於總銷售額,否則,留空。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

最後,我們將用 Total Sales 代替 Top 10 Clients。我們可以看到每個時間段的前 10 個客戶,並實施條件格式以使其在視覺上更好。我們還可以使用條件格式來獲得更有說服力的見解。

LuckyTemplates 中的 RANKX DAX 函數:全面概述

如果你多次向客戶銷售,你會希望縮短時間;但如果你每年只向客戶銷售 2 或 3 次,那麼你將需要從更長期的時間框架來分析事情。

還有另一個 DAX 函數,稱為 TOPN,它也用於排名見解。仍然存在很大差異。請記住,TOPN 是一個表函數,而 RANKX 返回一個標量值。關鍵是要了解您將這些功能置於其中的上下文。

使用 LuckyTemplates RANKX 組合動態分組

使用 RANKX 的另一種好方法是對結果進行分段或分組,而不是在沒有任何上下文的情況下單獨顯示結果。

在此示例中,我不只是顯示一般銷售結果,而是想查看客戶是否在排名靠前的結果中,然後查看它是否隨時間變化。我想了解我們的銷售額中有多少來自我們的前 5 大客戶,前 5 到 20 大客戶,然後是其他客戶。

要查看是否有趨勢發生,我們需要創建動態組並隨著時間的推移對其進行評估。這很難做到,尤其是當您使用 Excel 工作時。但是如果你真的很了解DAX,你完全可以寫出一個公式,你寫的時間不會很長,然後它就變成了一個你可以反複使用的模式。

這是我為此場景創建的度量:

LuckyTemplates 中的 RANKX DAX 函數:全面概述

我們從 CALCULATE 函數開始,因為沒有 CALCULATE 什麼都不會發生。然後,我們添加總銷售額,因為這是我們要總結的。

接下來,我們需要過濾一個客戶名稱表,該表將遍歷每個客戶,評估他們的排名,然後查看他們的排名是高於還是低於我們剛剛創建的 MIN 和 MAX。

下一步是再次使用函數和 FILTER 函數。然後選擇 Customer Groups,這是我創建的表。

然後,我們將使用 RANKX 遍歷此表。我們在頂部計算 Total Sales,但 Customer Groups 表實際上是排名。我們需要獲得每個客戶的排名,然後查看他們是否屬於客戶組表中的任何組。

然後我們將按總銷售額對它們進行排名,然後選擇 DESC 將它們排名為 1 表示最高,200 表示最低。然後,我們將為排名最高的客戶以大於最後,我們將使用 RANKX 與我們上面使用的類似邏輯,但隨後小於或等於。

您可以在如此多的適用場景中反複使用此RANKX 使您能夠創建動態排名表,為您提供令人難以置信的排名見解。

結論

RANKX 是一個簡單的函數,但並不容易使用。關鍵是要關注它的細微差別,以便能夠更好地理解其功能。DAX 計算中的 RANKX 函數有很多方法,尤其是當與不同的函數結合使用時。您會驚訝於此功能在 LuckyTemplates 中的靈活程度。

我在本博客中向您展示的示例絕對是展示 RANKX 的最佳方式,尤其是當涉及到它在計算任何排名類型分析方面的多功能性時。它可以用於許多不同的場景。

這裡的關鍵要點是,您確實需要了解放置 RANKX 函數的上下文。

我希望您發現此內容有幫助並在您自己的工作環境中加以利用。

乾杯!


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

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

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

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

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

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

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

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

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

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

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

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

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

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

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的