LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

在今天的教程中,我將展示如何在 LuckyTemplates 和 SSAS 或 SQL Server 分析服務中自動執行按一列對另一列進行排序的過程。您可以在本博客底部觀看本教程的完整視頻。

在此示例中,我們有包含多個列的 Dates 表。有些列是我們要隱藏的整數部分;有些列是字符串部分,我們將向最終用戶展示。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

因此,我們有 Calendar Year、Calendar Year Month 和 Month 列。我們要做的是按整數部分自動對這三列進行排序。我將按日曆年編號對日曆年進行排序,按日曆年月份編號對日曆年月份進行排序,以及按月份編號對月份進行排序。

但我們不會一一進行。我們將運行一個腳本,自動為這個特定的表排序。如果多個表有多個列,則可以在這些表集上使用該腳本。

我們將使用表格編輯器編寫該 C# 代碼,但目前,表格編輯器沒有適用於 C# 語言的 IntelliSense。為方便起見,我們將使用Visual Studio (VS),其中我們有適用於 C# 語言的 IntelliSense,您也可以使用 VS 代碼。

目錄

使用 C# 在 LuckyTemplates 和 SSAS 中對列進行排序

首先,我們需要在 Visual Studio 中創建一個新項目,這將是C# 語言的控制台應用程序(.Net Framework) 。讓我們選擇單擊下一步。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

然後,我們可以為項目提供任何名稱。我將調用此SortBy,然後單擊“創建”。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

現在,您可以看到我們有了代碼。代碼運行後,我們只需將其複制並粘貼到表格編輯器中。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

但是,為了讓代碼在 Visual Studio 中運行,我們需要設置對庫的引用。為此,我們只需單擊“引用”並在瀏覽器選項中選擇“管理 NuGet 包”選項。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

在瀏覽選項裡面,我們需要寫分析服務。然後,在可用的選項中,我們需要選擇第二個並單擊安裝。它將開始安裝,並且需要幾秒鐘才能完成安裝。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

接下來,我們需要在代碼中寫入,Using Microsoft.AnalysisServices.Tabular,然後寫入一個分號。我們要創建一個服務器對象,所以我們可以簡單地編寫Server,服務器對象的名稱將是Server本身,我們將編寫New Server

所以基本上,我們在內存中創建一個新對象。為了將該服務器連接到 LuckyTemplates 文件,我們將使用服務器對象的方法。因此,讓我們編寫server.Connect,在這裡我們將提供 LuckyTemplates 中的 AnalysisServices 正在偵聽的端口號。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

要找到該端口號,我們轉到外部工具,單擊DAX Studio,在底部,我們將找到本地主機。這是我們在 LuckyTemplates 中擁有的 SQL 服務器分析服務正在偵聽我們通過 LuckyTemplates 或任何其他外部工具發送的更改的代碼編號。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

服務器是一回事,但在 SSAS 的情況下,服務器也可以有多個模型。但是現在,在 LuckyTemplates 中,我們只有一個模型。所以,我們要聲明那個模型。我們在這裡寫Model is equal to (=) server.Databases,我們將訪問該服務器內的第一個數據庫,所以我們將寫.Model

現在讓我們測試一下這部分代碼是否有效。為此,我們將簡單地打印我們在該數據模型中擁有的所有表的列表。因此,我們將在此處為每個(Table t in model.Tables)輸入,打開括號,然後按 enter。

之後,我們輸入Console.WriteLine (t.Name)。為確保窗口在打印表格名稱後不會自動關閉,我們將編寫Console.ReadLine、左括號和右括號以及一個分號。現在,我們需要做的就是單擊“開始”選項並等待它執行。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

您可以看到我們能夠打印數據模型中的表的名稱。我們有日期、產品、客戶和商店。這證實了我們創建的設置正在運行。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

所以現在,我們實際上可以進入代碼的核心並開始創建代碼,幫助我們按整數對應項對該列進行排序。

讓我們擺脫我們從ForEach部分創建的所有內容。我們將保持服務器和模型不變。讓我們聲明一個變量,該變量將保存我們要迭代的表的名稱。我將其命名為DatesTable,表格的名稱基本上是Dates

接下來,我們將在 model.Tables 中使用foreach var t,然後我們將使用where子句,這樣我們就可以說 T 去哪裡t.Name應該等於DatesTable。如果我們當前正在迭代 DatesTable,我們將在該 DatesTable 的所有列上啟動另一個循環。因此,為此,我們可以在 t.Columns 中編寫 foreach var c

要測試我們是否僅在 DatesTable 上迭代並且我們可以訪問 DatesTable 的所有列,我們可以簡單地打印Console.WriteLine,我們將說c.Name

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

如果我按 F5,您可以看到我們可以訪問這些列。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

現在我們可以繼續進行並編寫更多代碼。

我們將創建一個包含三列以上的元組列表。其中一列將是目標列。第二列將是我們要對目標列進行排序的列,第三列將簡單地保持 true 或 false,無論我們是否要隱藏我們實際排序的列。

假設我們要按日曆年編號對日曆年列進行排序。第一列將包含日曆年,第二列將包含日曆年編號,第三列將決定我們是否要在完成排序後隱藏日曆年編號列。

為此,讓我們回到 Visual Studio,我們將在其中創建一個新變量。您可以隨意命名。在此示例中,我將其稱為colOperations。接下來,我們將編寫new,然後我們將創建一個列表,我們將編寫列的類型(字符串、字符串和布爾)。之後,我們創建元組。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

所以基本上,我們只是創建一個包含三列的列表,對於三列,我們提供了兩行。現在在我們的foreach循環中,我們將啟動一個 for 循環。所以基本上,我們所說的是在每次迭代中聲明一個以i開頭的變量。如果 i 小於 colOperations.Count 則簡單地增加它

接下來,我們將編寫一個IF語句。c.Name屬於我們當前所在列的名稱。然後,我們有colOperations i。i基本上允許我們訪問一個特定的行。當我們編寫.Item1時,我們能夠訪問第一列、第二列或第三列。

所以首先我們要使用Item1列。如果那是真的,我們只需寫c.SortByColumn應該等於t.Columns。請記住 t 是表對象。然後,我們正在訪問該特定表中的列。我們想要colOperations,我們當前在列操作上的行,而列基本上是Item2對象。

最後,為了隱藏我們應用排序的特定列,我們編寫了最後一行代碼。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

現在我們已經編寫了要針對錶格模型執行的主要代碼,我們可以簡單地從 var colOperations 複製代碼並將其帶到表格編輯器,然後我們將執行相同的代碼。

使用表格編輯器對 LuckyTemplates 和 SSAS 中的列進行排序

我們不打算使用服務器或模型對象,因為在後台表格編輯器會自動知道它必須連接到哪個 LuckyTemplates 模型或分析服務模型。因此,我們不需要使用這些變量,因為這已經是表格編輯器的工作,以確定它希望如何連接到這些模型。

回到 LuckyTemplates,我們將啟動表格編輯器 3 或表格編輯器 2。您可以使用任何一個。在這種情況下,讓我們使用表格編輯器 3。

我們轉到“文件”選項卡,單擊“新建 C# 代碼”,然後關閉“屬性”選項。然後,我們可以將代碼粘貼到這裡。我們唯一需要確定的是,不是使用模型變量而是使用模型對象。因此,讓我們使用大寫字母 M並執行該代碼。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

現在腳本已經成功執行並且它還顯示了三個模型更改,我們將把更改提交回數據模型。我們將保存應用於這些列的任何內容。

返回 LuckyTemplates,您可以看到月份編號已隱藏。如果我單擊 Month 列並轉到Column ToolsSort By Column,您可以看到該特定列已按 Month Number 排序。日曆年月數也是如此。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序

日曆年是自行排序的,因為我們在該 C# 代碼中沒有該列。因此,我們可以做的是重新啟動表格編輯器並創建另一個元組。然後,我們再次執行該腳本。

LuckyTemplates 和 SSAS——使用 TE3 和 C# 對列進行排序


表格編輯器 LuckyTemplates:第 3 版回顧和教程LuckyTemplates 表格編輯器 3:在表格編輯器 3 中
使用腳本自動化DAX 編碼

結論

和 SSAS中自動按一列對另一列進行排序的過程是多麼容易。這是一個非常基本的示例,說明如何在 Dates 表中執行該操作。但是您可以通過添加更多列來豐富此列表,然後檢查另一個表。

這樣,您就可以減少為要一次又一次創建的相同模型對這些列進行排序所花費的時間。

我希望你發現這很有幫助。如果您有任何疑問,請在評論部分告訴我。


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