Mysql

查詢每月創建為一張表的表(電話 PBX)

  • October 19, 2021

我試過在特定的 Power BI 論壇上問這個問題,但沒有用:

查詢每月創建為一個表的表(電話 PBX)

所以我想知道這是否可以通過我擁有 1 個 SQL 伺服器來實現,該伺服器合併來自云 MySQL 伺服器中表的所有數據。因此 Power BI 只查詢 1 x 表?

情況

  • 我在電話系統上有 Power BI 報告。
  • 數據是我的 Power BI 連接到的 MySQL 數據庫。
  • PBX平台來自一家名為“yeastar”的公司

問題

但是,問題是這個電話系統每個月都會創建一個新表。我無法控製或改變這一點。

我的 Power BI 連接到 1 個月的表並且一切正常,但是我不能再檢索另一個月的數據,因為它在另一個表中。每個月都會創建一個新表,我必須創建一個新的 Power BI 項目並連接到該新表。

我的問題

  • 我可以將表名作為欄位後跟萬用字元嗎?
  • 我是否需要另一個 SQL 伺服器用作“轉換”,以便查詢所有這些表,然後向 Power BI 提供 1 個大表?

範例表/查詢

螢幕截圖顯示了我正在查詢的數據庫。

表格截圖

將數據拆分為多個表通常是“錯誤的”。

一個“單個”表可以PARTITIONed分成多個子表。如果設置正確,您可以使用“可傳輸表”將新的“月份”添加到分區表中。

BI 是做什麼的?它是否執行越來越長的數據摘要?那麼,這一切都是落後的。相反,總結每個月的數據,因為它進來了;這些數據將進入一個表。這個匯總表的閱讀速度會快得多。

您可能需要考慮為您的 PowerBI 查詢創建一個視圖。

該視圖將被定義為:

CREATE VIEW `cdr.cdr_summaryview` 
(
   id, 
   datetime, 
   clid, 
   src.dst, 
   dcontext, 
   srctrunk, 
   dstrunk, 
   lastapp
) 
AS SELECT 
   id, 
   datetime, 
   clid, 
   src.dst, 
   dcontext, 
   srctrunk, 
   dstrunk, 
   lastapp
FROM `cdr.cdr_202002` 
UNION 
SELECT 
   id, 
   datetime, 
   clid, 
   src.dst, 
   dcontext, 
   srctrunk, 
   dstrunk, 
   lastapp
FROM `cdr.cdr_202003` 
-- /*=============================
--   repeat UNION for all tables 
--   =============================*/
UNION SELECT 
   id, 
   datetime, 
   clid, 
   src.dst, 
   dcontext, 
   srctrunk, 
   dstrunk, 
   lastapp
FROM `cdr.cdr_202109` 

cdr.cdr_summaryview使用這種方法,您只需修改現有視圖定義並通過新UNION子句添加新表即可將新的月度表添加到視圖中。

您的 PowerBI 查詢僅將cdr.cdr.summaryview用作數據源,而不是單獨的每月匯總表。

參考:

也就是說,將每月數據放在單獨的表中並不是最好的主意。像 Rick James 指出的那樣對數據進行分區是一個更好的解決方案。

回答您的問題

我可以將表名作為萬用字元後跟欄位嗎?

不,您不能為表名定義萬用字元。

我是否需要另一個 SQL 伺服器用作“轉換”,以便查詢所有這些表,然後向 Power BI 提供 1 個大表?

您可以根據我的建議解決您的問題。

引用自:https://dba.stackexchange.com/questions/300873