在 LuckyTemplates 中使用 Power Query 進行組合分析

在 LuckyTemplates 中使用 Power Query 進行組合分析

我想深入研究一種叫做組合分析的東西。這可以定義為按照規定的規則選擇和排列集合的元素。這聽起來可能很深奧,但它實際上有一些非常實用的用例。您可以在本博客底部觀看本教程的完整視頻。

在本教程中,我將向您展示如何使用 LuckyTemplates 中的 Power Query 執行此操作。

目錄

組合分析案例

在這個組合分析示例中,任務是我們有一個包含六個倉庫的列表,我們需要生成每個唯一的三個倉庫。這聽起來像是一個非常簡單的問題,但這是語言真正重要的情況之一。

此處的正確答案是 216、120、56 或 20。因此,根據您定義該唯一集的方式和您規定的規則,如果您沒有正確獲得該集,您可能會偏離 10 倍。

在 LuckyTemplates 中使用 Power Query 進行組合分析

因此,這裡有兩個重要的維度。第一個是“順序重要嗎?” 那麼當我們談論三組三時,ABC 是否等同於 BCA?那麼順序重要嗎?如果順序很重要,我們正在談論排列

在旅行時間的情況下,順序可能很重要的排列的一個很好的例子是(我們正在談論倉庫環境)。很可能是,如果您訪問倉庫 A,然後是倉庫 B,然後是倉庫 C,由於交通流量與交通流量的旅行時間,您到達每個倉庫的時間可能會因順序而有很大差異你在其中拜訪他們。

另一方面是“順序無關緊要”,在這種情況下,我們談論的是組合,而不是排列。這裡常見的用例是距離。例如,當烏鴉飛翔時,從 A 到 B 再到 C 的距離與從 B 到 C 再到 A 的距離沒有任何不同。這些將在組合上下文中考慮。

組合被視為彼此重複。然而,在排列上下文中,它們將被認為是唯一的。

因此,如您所見,組合鎖實際上應該是排列鎖,因為在那種情況下,順序很重要,使其成為排列,而不是組合。

第二個重要的問題或維度是“一旦一個項目被挑選,它能被再次挑選嗎?” 比如我們第一個倉庫選A,是不是可以再選A,還是每次都要選唯一的元素?

我們在這裡使用的術語是“有替換”或“無替換”。所以,如果可以再次拾取一個項目,那就是替換,這意味著你可以拾取它。從某種意義上說,它會回到選擇箱並再次被挑選。如果答案是否定的,那就是沒有替代品。

因此,您可以在此解決方案中看到,替換排列的限制最少。這就是給我們 216 個獨特集合的那個。沒有替換的組合是最嚴格的,給我們 20 個。

在 LuckyTemplates 中使用 Power Query 進行組合分析

我們將使用這些公式來檢查我們的Power Query結果。所以我們會記住 216、120、56 和 20。現在讓我們進入 Power Query,看看這個組合分析是如何進行的。

組合分析:Power Query 中的排列

在 Power Query 中,我這裡有一個非常簡單的案例,其中包含六個命名倉庫。

在 LuckyTemplates 中使用 Power Query 進行組合分析

我開發了這個 Power Query M 函數,我用它來處理組合和排列。

在 LuckyTemplates 中使用 Power Query 進行組合分析

首先,我將開發第一個用例,它是帶有替換的排列,是這一系列中限制最少的。在 Power Query 中執行此操作的方法是獲取此Warehouses表並引用它(在 DAX 中,我們使用CROSSJOIN)。

在 LuckyTemplates 中使用 Power Query 進行組合分析

我將其稱為Per w Rep(帶替換的排列)。

在 LuckyTemplates 中使用 Power Query 進行組合分析

可以通過多種方式在 Power Query 中進行交叉聯接。我發現的最簡單的方法是先去Add column,然後去Custom column。在自定義列公式中,引用Warehouses表。

在 LuckyTemplates 中使用 Power Query 進行組合分析

當我們點擊確定時,我們會發現它生成了一個嵌套表格。

在 LuckyTemplates 中使用 Power Query 進行組合分析

然後,我們展開它並取消單擊Use original columns name as a prefix

在 LuckyTemplates 中使用 Power Query 進行組合分析

我們得到這個Location.1,它是兩者的所有可能組合。所以它需要前六個引用來對抗其他六個組合。後六個一直做同樣的事情,直到我們有 36 個不同的集合。

在 LuckyTemplates 中使用 Power Query 進行組合分析

我們可以通過再次執行此操作來完成第三個。所以我們去添加列,然後是自定義列,然後是倉庫。

在 LuckyTemplates 中使用 Power Query 進行組合分析

我們將 216 行作為替換排列。

在 LuckyTemplates 中使用 Power Query 進行組合分析

你可以從這裡看到,3 列,216 行。

在 LuckyTemplates 中使用 Power Query 進行組合分析

下一個用例是無替換排列。我們在這裡想到的基本上是所有具有重複元素的東西。因此,在此表中,我們將從第 1 行到第 8 行進行查看。

在 LuckyTemplates 中使用 Power Query 進行組合分析

為此,我們將看一下這個函數fxSortAndIsDistinct

在 LuckyTemplates 中使用 Power Query 進行組合分析

在高級編輯器中,您可以看到這基本上要求一個表,然後執行SortLocs。但是這裡對於“有替換”或“無替換”的重要部分是這是一個IsDistinct函數。這樣做基本上只是獲取一個元素列表並確定真或假,無論它是不同的還是在項目列表中是否有任何重複項。

在 LuckyTemplates 中使用 Power Query 進行組合分析

所以我們到這裡,選擇Perm w Rep,然後點擊Invoke

在 LuckyTemplates 中使用 Power Query 進行組合分析

這將為我們提供這兩個新列,SortLocsIsDistinct。現在,請記住前八條記錄有重複項,第九條記錄是我們第一次看到不同的. 這就是為什麼這裡的第九行是第一個顯示為真的。

在 LuckyTemplates 中使用 Power Query 進行組合分析

如果我們回想一下我們在階乘計算中得到的數字,如果我們去掉非不同的記錄,我們預計會有 120 條記錄。所以,讓我們嘗試在這裡過濾並取出 FALSE。

在 LuckyTemplates 中使用 Power Query 進行組合分析

當我們這樣做時,我們得到的正是我們期望的 120 行。現在讓我們將其重命名為Perm wo Rep(無替換排列)。

在 LuckyTemplates 中使用 Power Query 進行組合分析

組合分析:Power Query 中的組合

現在我們將使用replacement 進行組合。為此,我們只需再次執行該過程並重複該步驟(調用函數)。所以我們有重複項沒關係,但我們不想要具有相同元素但順序不同的集合。

在 LuckyTemplates 中使用 Power Query 進行組合分析

在這種情況下,當我們談論組合時。如果您還記得 ABC 等於 BCA 等於 CAB,那麼這些都被認為是彼此重複的。我們確定的方式是通過排序函數 ( fxSortAndIsDistinct )。

如果我們返回到高級編輯器中的函數,我們將看到第二列我們已經獲取了該列表並按字母順序對其進行了排序。然後,我們從該列表中提取以逗號分隔的值。現在我們已將每個集合按字母順序排序。我們對順序進行了規範化,以便於查找重複項。

在 LuckyTemplates 中使用 Power Query 進行組合分析

現在,如果我們回到這個被調用的函數,請記住我們在這裡尋找 56 條記錄。所以我們採用這種位置 ( SortLocs ) 並刪除重複項

在 LuckyTemplates 中使用 Power Query 進行組合分析

這樣,我們得到 56 行。

在 LuckyTemplates 中使用 Power Query 進行組合分析

因此,這是我們的第三個用例。讓我們將其重命名為CC w Rep(與替換的組合)。

在 LuckyTemplates 中使用 Power Query 進行組合分析

讓我們再次採用帶有替換 (Perm w Rep) 表的排列並執行相同的模式(調用)來結束這一過程。然後,我們將刪除重複項(SortLocs 列),因為這是一個組合,順序無關緊要。它沒有替換,所以我們也只需要不同的列表。因此,我們在 IsDistinct 列中單擊 FALSE。

在 LuckyTemplates 中使用 Power Query 進行組合分析

有了這個,我們得到了 20 條記錄。現在我們有了所有四個用例。

在 LuckyTemplates 中使用 Power Query 進行組合分析


LuckyTemplates 中的日期表列排序
LuckyTemplates 中的 M 代碼入門指南
將日期表函數轉換為 LuckyTemplates 中的表查詢

結論

所以現在我們有了所有四個用例。在開發組合分析方面,您可以真正看到這有多麼強大,可以讓您控制替換和不同的元素。

這甚至適用於一些更複雜的情況,您有部分替換,或者可能為第一次選擇重複元素,但不是第二次。您仍然可以在Power Query中很好地處理它。

我希望你覺得這很有用。查看下面的鏈接以獲取更多內容。您還可以在下面觀看本教程的完整視頻。

一切順利!


什麼是 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 網關?所有你必須知道的