什麼是 Python 中的自我:真實世界的例子
什麼是 Python 中的自我:真實世界的例子
我想繼續探索 DAX 函數 COLUMNSTATISTICS() 的動態使用——2021 年 8 月添加到 LuckyTemplates 的一個幾乎完全沒有記錄的新 DAX 函數,它有一些非常獨特的方面,我認為熟悉這些方面會非常有趣. 您可以在本博客底部觀看本教程的完整視頻。
我做了很多實驗,並學到了一些非常有趣的新東西,這些東西是關於這個函數是如何工作的,以及你可以用它做什麼。在我關於這個功能的第一篇博客中,我談到了一些靜態用途。今天,我將以甚至 IntelliSense 尚未更新的方式討論該函數的一些非常驚人的動態用法。
目錄
DAX 函數 COLUMNSTATISTICS 的工作原理
對於數據模型中的每個表和字段,COLUMNSTATISTICS 都會生成一個包含六個附加字段的表,這些字段具有表名、列名、列的最小值和最大值、基數和最大長度。這似乎不是很多數據,但您可以用它做很多事情。
我目前使用的數據只是 LuckyTemplates External Tools 的練習數據集。它是一個相對簡單的數據模型,具有五個維度表、一個事實表和一個度量表。像這樣的模型並不難跟踪,但複雜的模型需要更複雜的數據集監控。
就查看基數而言,複雜數據集的元數據變得更加重要,基數是一個字段中唯一值的數量。它對模型的大小以及潛在的處理速度有很大影響。
此外,在構建模型時,不僅了解表的數量,而且了解這些表的日期範圍也會有所幫助。在構建 Dates 表時,您要確保覆蓋事實表中的全部數據。
因此,對於這個例子,讓我們嘗試向我正在處理的這個數據模型添加一個表。在 Power Query 中,我們將轉到New Source,然後是Blank Query。然後,我們將進入高級編輯器,我將粘貼一個名為List.Dates的函數。我們將使用它來創建一個基數為 10,000 的表,因此有 10,000 個唯一日期。
它將返回一個包含 10,000 個項目的列表,我們可以將其轉換為一個表,然後重命名該表。
我們可以將此處的字段更改為最新。如果我們單擊關閉並應用,我們將看到我們的智能敘述將動態更新,而無需刷新整個模型(就像我們過去所做的那樣)。
這是完全動態的原因是我們正在通過措施來完成這一切。有趣的是它顯示了很多錯誤,而且這個函數太新了以至於 IntelliSense 沒有正確地提取它,但它確實有效。
讓我們進入表格編輯器 3,我認為這是弄清楚複雜的 DAX 度量實際上在做什麼的最好方法。
請記住,DAX 查詢返回表而不是縮放器。所以,如果我們採取這個措施並將其複製到DAX 查詢中,它會顯示錯誤,因為這裡的結果仍然是一個縮放器。我們可以使用用度量的各個組件替換返回結果的調試方法。
在這種情況下,我們將用ColStats替換它,我們在頂部所做的只是將 COLUMNSTATISTICS DAX 函數放入一個變量中。這樣,我們就得到了我們所期望的,即標準的列統計表。
現在,我們只想查看 Table Name 列,我們想從中取出不同的值併計算這些值。這將是我們數據模型中的表數。
首先,我們將選擇 ColStats 表中的列,然後只返回該表名稱字段。通常,在 DAX 度量值或 DAX 查詢中,您希望返回一個字段名稱,其前面有表名稱。但在這種情況下,我們不知道合適的表名引用了什麼,因為它只是虛擬存在。它似乎不接受變量名作為表名。
所以在這種情況下,我們必須保留看起來像度量的東西,但它實際上是一個列引用,前面沒有表引用。即使它在命名法上令人困惑,它仍然有效。現在,如果我們用TabCol替換此 RETURN 語句,我們將得到我們期望的結果,即模型表字段。
然後對於結果,我們只是對不同的表列進行計數。因此,如果我們將其替換為DISTINCT(TabsCol),我們將得到七個表。
現在讓我們看一下最高基數表中的最高基數,看看我們是如何得到這些的。這實際上是一個重要的模式,您可以將其用於您正在尋找的許多不同的東西,不僅僅是最大數量,還有與該數字相關聯的最大屬性。
那麼讓我們來看看MaxCardinality。即使這是一個縮放器,我們也可以通過在它周圍加上括號將它變成一個單元格表。如果我們達到 5,我們就會看到基數值為 10,000。
所以現在的問題是,我們如何接受它並返回與該基數關聯的表。
為此,我們使用這種非常常見的模式。然後,我們將其複製到我們的 RETURN 語句中,它將為我們提供我們期望獲得的行,即 10,000 Dates 列。我們沒有得到一行(因為它是 TOPN),而是得到兩行,因為有平局。
ColStats 還為每個表創建了一個名為RowNumber的隱藏索引行中的索引,它是表中每一行的唯一標識符。因此,如果 RowNumber 是唯一標識符,那麼 MaxCardinality 總是會被反映出來。
因此,我們有兩行並不重要,因為我們正在查看的是表名稱的最大值。那個 max 只是為了返回一些值,否則這將只是一個裸列。但是我們需要圍繞它進行一些聚合,在這種情況下,我們使用。
然後,如果我們將MaxCardinality放在我們的 RETURN 語句中,並將其放在括號中以返回一個表而不是一個縮放器,它會返回 Test 的值。
當您想基本上計算出最大值或最小值,然後返回與該最小值或最大值關聯的屬性時,這個 TOPN DAX 模式是一個非常好的模式。
使用高級 DAX 優化 LuckyTemplates 公式
DAX 度量分析:分解長 DAX 度量
LuckyTemplates 中的 DAX 度量使用度量分支
結論
我已經為您提供了我們可以使用的一般方法和上下文,以便您以動態方式充分利用 DAX 函數 COLUMNSTATISTICS。能夠根據複雜模型動態跟踪這一點,我認為此功能具有巨大的價值。
我們對 COLUMNSTATISTICS 函數進行的試驗越多,以及它在 DAX 中動態處理元數據的能力,我認為我們會發現更多有趣的用途。因此,如果您已經發現此 DAX 函數的一些有趣用途,請在下面的評論中告訴我。
一切順利!
什麼是 Python 中的自我:真實世界的例子
您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。
在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。
本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。
在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。
我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。
了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。
本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。
如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。
什麼是 LuckyTemplates 網關?所有你必須知道的