Power Pivot 中的數據分析表達式 (DAX)

      網友投稿 654 2025-04-01

      Power Pivot 中的數據分析表達式 (DAX)

      Data Analysis Expressions (DAX) 乍聽起來有點唬人,但可別讓這名字把您給騙了。 DAX 基礎知識其實很容易理解。 首先說最重要的一點 — DAX 不是編程語言。 DAX 是一種公式語言。 可使用 DAX 來定義計算列和度量(也稱為計算字段)的自定義計算。 DAX 包含一些在 Excel 公式中使用的函數,此外還包含其他用于處理關系數據和執行動態聚合的函數。

      了解 DAX 公式

      DAX 公式與 Excel 公式非常相似。 要創建一個 DAX 公式,只需鍵入一個等號,后跟函數名或表達式以及所需的任何值或參數即可。 與 Excel 類似,DAX 提供多種函數,可用于處理字符串、使用日期和時間執行計算或者創建條件值。

      Power Pivot 中的數據分析表達式 (DAX)

      但 DAX 公式在以下幾個重要方面卻有所不同:

      如果您希望逐行自定義計算,DAX 提供了允許您使用當前行值或相關值執行計算(因上下文而異)的函數。 DAX 包含一類函數,此類函數返回表作為其結果,而不是返回單個值。 這些函數可用于提供其他函數的輸入。 時間智能函數,可按照日期范圍進行計算,也可比較并行時間段內的結果。

      使用 DAX 公式的位置

      在Power Pivot中的計算列或計算字段中可以創建公式。

      計算列

      計算列是添加到現有 Power Pivot 表中的列。 無需粘貼或導入值,您可以在計算列中創建用于定義列值的 DAX 公式。 如果某個數據透視表(或數據透視圖)中包括 Power Pivot 表,則可以像使用任何其他數據列一樣使用計算列。

      計算列中的公式非常類似于在 Excel 中創建的公式。 但與在 Excel 中不同,您不能為表中的不同行創建不同公式 — DAX 公式會自動應用到整個列。

      當某列中包含公式時,將為每一行都計算值。 一旦創建公式就將立即為列計算結果。 只有在刷新基礎數據或者手動重新計算時,才重新計算列值。

      可創建基于計算度量和其他計算列的計算列。 但請勿將同一名稱既用于計算列又用于度量,因為這可能導致結果混亂。 引用列時,最好使用完全限定的列引用,以避免無意中調用度量。

      有關更多詳細信息,請參閱 Power Pivot 中的計算列。

      度量

      度量是一種公式,專門創建用于使用 Power Pivot 數據的數據透視表(或數據透視圖)。 度量可基于標準聚合函數,如 COUNT 或 SUM;你也可使用 DAX 自行定義公式。 度量在數據透視表的“值”區域中使用。 如果希望將計算得出的結果放置在數據透視表的其他區域,則應改用計算列。

      為某個顯式度量定義公式時,在將該度量添加到數據透視表中之前,不會發生任何操作。 在添加度量時,對數據透視表的“值”區域中的每個單元計算該公式。 由于會為每個行和列標題組合都創建一個結果,因此度量的結果在每個單元格中可能有所不同。

      所創建的度量的定義隨附其源數據表一并保存。 它出現在數據透視表字段列表中,可供工作簿的所有用戶使用。

      有關更多詳細信息,請參閱 Power Pivot 中的度量。

      使用編輯欄創建公式

      與 Excel?相似,Power Pivot?提供的編輯欄讓創建和編輯公式更方便,以及記憶式鍵入功能,盡量減少鍵入和語法錯誤。

      輸入表格名稱???開始鍵入表格的名稱。 公式自動完成功能提供了一個下拉列表,其中包含以這些字母開頭的有效名稱。

      輸入列的名稱???鍵入方括號,然后從當前表格的列列表中選擇列。 對于來自其他表格的列,請先鍵入表格名稱的前幾個字母,然后從“自動完成”下拉列表中選擇列。

      有關如何構建公式的詳細信息和演練,請參閱在 Power Pivot 中創建計算公式。

      使用記憶式鍵入的提示

      可以在具有嵌套函數的現有公式中使用公式記憶式鍵入功能。 與插入點緊鄰的前一個文本用于顯示下拉列表中的值,插入點之后的所有文本都保持不變。

      “自動完成”下拉列表中不顯示為常量創建且已定義的名稱,但你仍可鍵入它們。

      Power Pivot 不會添加函數的右括號或自動匹配括號。 您應確保每個函數在語法上都是正確的,否則就不能保存或使用公式。

      在公式中使用多個函數

      可以嵌套函數,這意味著您可以使用一個函數的結果作為另一個函數的參數。 在計算列中,最多可以嵌套 64 層函數。 但是,嵌套可能會導致很難創建公式或者排除公式問題。

      許多 DAX 函數設計為僅用作嵌套函數。 這些函數返回一個表,該表不能直接保存為結果,?而應作為表函數的輸入提供。 例如,函數 SUMX、AVERAGEX 和 MINX?全都要求將表作為第一個參數。

      注意:?在度量內嵌套函數時存在一些限制,目的是確保列之間的依賴關系所要求的大量計算不會影響性能。

      比較 DAX 函數和 Excel 函數

      DAX 函數庫基于 Excel 函數庫,但這兩種庫有許多差異。 本節總結了 Excel 函數與 DAX 函數之間的差異和相似性。

      許多 DAX 函數名稱和常規行為都與 Excel 函數相同,但這些函數已修改為采用不同類型的輸入,因此在有些情況下可能會返回不同的數據類型。 通常,如果不進行某些修改,無法在 Excel 公式中使用 DAX 函數或在 Power Pivot 中使用 Excel 公式。 DAX 函數不會將單元引用或范圍作為引用,而是將列或表作為引用。 DAX 日期和時間函數返回 datetime 數據類型。 與之相比,Excel 日期和時間函數返回將日期表示為序列數的整數。 許多新的 DAX 函數返回值表,或基于值表作為輸入進行計算。 與之相比,Excel 沒有返回表的函數,但某些函數可以使用數組。 能夠輕松地引用完整的表和列是 Power Pivot 中的新功能。 DAX 提供了新的查找函數,這些函數類似于 Excel 中的數組和矢量查找函數。 但這些 DAX 函數需要在表之間建立關系。 列中的數據應該始終具有相同的數據類型。 如果數據類型不同,DAX 會更改整個列,以使其具有最適合所有值的數據類型。

      DAX 數據類型

      您可以將數據從可能支持不同數據類型的多種數據源導入 Power Pivot 數據模型中。 在導入或加載數據,然后在計算或數據透視表中使用這些數據時,數據會轉換為?Power Pivot 數據類型之一。 有關數據類型的列表,請參閱數據模型中的數據類型。

      表數據類型是 DAX 中的一種新數據類型,用作許多新函數的輸入或輸出。 例如,FILTER 函數采用表作為輸入,并輸出僅包含滿足篩選條件的行的另一個表。 通過組合表函數與聚合函數,可以對動態定義的數據集執行復雜計算。 有關詳細信息,請參閱 Power Pivot 中的聚合。

      公式和關系模型

      Power Pivot?窗口是一個區域,您可以在其中使用多個數據表,并通過“關系模型”將這些表連接起來。 在此數據模型中,表通過關系相互連接,這樣,您就可以創建與其他表中的列的關聯,并創建更有用的計算。 例如,可以創建對相關表的值進行求和的公式,然后將該值保存在一個單元格中。 或者,您可以對表和列應用篩選器,以便控制相關表中的行。 有關詳細信息,請參閱數據模型中表之間的關系。

      由于可以使用關系來鏈接表,因此數據透視表還可以包含來自不同表中多個列的數據。

      但是,由于公式可以處理整個表和列,因此您需要設計與在 Excel 中不同的計算。

      通常,列中的 DAX 公式始終應用于列中的整個值集(而不是僅應用于幾個行或單元格)。 Power Pivot?中表的每一行必須始終具有相同的列數,并且一列中的所有行必須包含相同的數據類型。 在通過關系連接多個表時,您應該確保用作鍵的兩列對于大多數部分具有匹配的值。 因為 Power Pivot 不強制引用完整性,所以,當鍵列中具有不匹配的值時,仍有可能創建關系。 但是,空值或不匹配的值可能影響公式的結果和數據透視表的外觀。 有關詳細信息,請參閱 Power Pivot 公式中的查找。 使用關系鏈接表時,可以擴大計算公式的范圍(或“上下文”)。 例如,數據透視表中的公式可能受該數據透視表中任何篩選器或者列和行標題的影響。 您可以編寫處理上下文的公式,但上下文還可能以各種意外方式導致結果發生變化。 有關詳細信息,請參閱 DAX 公式中的上下文。

      更新公式的結果

      “數據刷新”和“重新計算”是兩個各自獨立而又有相關性的操作,在設計包含復雜公式、大量數據或從外部數據源獲取的數據的數據模型時,應了解這兩項操作。

      “刷新數據”是用外部數據源的新數據更新工作簿中數據的過程。 您可以按指定的時間間隔手動刷新數據。 或者,如果您已將工作簿發布到 SharePoint 網站,則可以從外部源安排自動刷新。

      重新計算是對公式結果進行更新的過程,用于反映對公式本身的任何更改以及基礎數據中的那些更改。 重新計算會以下列方式影響性能:

      對于計算列,每次更改公式時,應始終針對整個列重新計算公式的結果。 對于度量,在將度量放到數據透視表或數據透視圖的上下文中之前,不對公式的結果進行計算。 在更改可影響數據篩選器的任何行或列標題時,或在手動刷新數據透視表時,也會重新計算公式。

      公式疑難解答

      編寫公式時出錯

      如果定義公式時遇到錯誤,公式中可能包含語法錯誤、語義錯誤或計算錯誤。

      語法錯誤是最容易解決的。 此類錯誤通常涉及缺少括號或逗號。 有關各個函數的語法的幫助,請參閱“DAX 函數參考”。

      當語法正確而值或列引用對公式上下文無意義時,就會發生其他類型的錯誤。 以下任何問題都可能導致此類語義和計算錯誤:

      公式引用了非現有的列、表或函數。 公式看起來是正確的,但當數據引擎提取數據時找到的類型卻不匹配,從而引發錯誤。 公式為函數傳遞的數字或參數類型不正確。 公式引用了另一個出錯的列,因此它的值無效。 公式引用了尚未處理的列,這意味著雖然它具有元數據,但沒有用于計算的實際數據。

      在前四種情況下,DAX 會標記包含無效公式的整個列。 在最后一種情況下,DAX 灰顯該列來指示該列處于未處理狀態。

      對列值進行排名或排序時,結果不正確或異常

      對包含值 NaN (非數字)的列進行排名或排序時,可能會獲得不正確或意外的結果。 例如,當計算 0 除以 0 時,返回結果 NaN。

      這是因為公式引擎通過比較數值來執行排序或排名;但是 NaN 卻無法與該列中的其他數字進行比較。

      為了確保結果正確,您可以利用使用 IF 函數的條件語句來測試 NaN 值并返回數字 0 值。

      與 Analysis Services 表格模型和 DirectQuery 模式的兼容性

      通常,在 Power Pivot 中構建的 DAX 公式與 Analysis Services 表模型完全兼容。 但是,如果將 Power Pivot 模型遷移到某個 Analysis Services 實例,然后在 DirectQuery 模式下部署該模型,則存在一些限制。

      如果在 DirectQuery 模式下部署該模型,則某些 DAX 公式可能會返回不同的結果。 在將模型部署到 DirectQuery 模式時,某些公式可能會導致驗證錯誤,因為該公式包含關系數據源不支持的 DAX 函數。

      有關詳細信息,請參閱 SQL Server 2012 聯機叢書中的 Analysis Services 表格模型文檔。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:華為云首推 PostgreSQL 增強版,助力金融業用好數據庫
      下一篇:快速刪除WPS表格中空白行的方法步驟圖(wps表格如何刪除空白行)
      相關文章
      香蕉大伊亚洲人在线观看| 国产成人高清亚洲| 亚洲一区二区三区偷拍女厕| 成a人片亚洲日本久久| 亚洲精华国产精华精华液网站| 亚洲免费福利视频| 亚洲特级aaaaaa毛片| 亚洲天天做日日做天天看| 亚洲精品午夜无码电影网| 亚洲精品乱码久久久久久| 久久影院亚洲一区| 中文字幕精品无码亚洲字| 亚洲中文字幕在线观看| 亚洲色欲久久久综合网东京热| 国产日产亚洲系列最新| 在线观看国产区亚洲一区成人| 日韩色视频一区二区三区亚洲 | 亚洲另类自拍丝袜第五页| 亚洲中文字幕久久久一区| 欧洲 亚洲 国产图片综合| 国产午夜亚洲精品国产| 亚洲乱亚洲乱妇无码| 午夜亚洲WWW湿好爽| 国产亚洲Av综合人人澡精品| 亚洲?V乱码久久精品蜜桃| 亚洲熟女乱综合一区二区| 亚洲无人区午夜福利码高清完整版| 成人午夜亚洲精品无码网站| 亚洲精品网站在线观看不卡无广告| 亚洲A∨精品一区二区三区下载| 亚洲精品宾馆在线精品酒店| 亚洲国产精品无码中文lv| 久久无码av亚洲精品色午夜| 婷婷国产偷v国产偷v亚洲| 亚洲精品国产综合久久一线| 自拍偷自拍亚洲精品第1页 | 亚洲色大成网站www永久男同 | 亚洲av无码日韩av无码网站冲| 亚洲A∨精品一区二区三区| 国产亚洲精品不卡在线| 亚洲精品美女久久久久99|