簡體   English   中英

在PowerPivot / DAX中匯總相關表的值

[英]Summing up a related table's values in PowerPivot/DAX

說我有兩個桌子。 attrsTable:

file | attribute | value
------------------------
A    | xdim      | 5
A    | ydim      | 6
B    | xdim      | 7
B    | ydim      | 3
B    | zdim      | 2
C    | xdim      | 1
C    | ydim      | 7

sizeTable:

file | size
-----------
A    | 17
B    | 23
C    | 34

我有這些表通過“文件”字段相關。 我想要attrsTable中的PowerPivot度量,其計算使用大小。 例如,假設我要為A,B,C中的每一個設置xdim + ydim / size。計算公式為:

A: (5+6)/17
B: (7+3)/23
C: (1+7)/34

我希望該度量足夠通用,以便以后可以使用切片器按文件或屬性進行切片。 我該如何完成?

我試過了:

dimPerSize := CALCULATE([value]/SUM(sizeTable[size])) # Calculates 0
dimPerSize := CALCULATE([value]/SUM(RELATED(sizeTable[size]))) # Produces an error

知道我在做什么錯嗎? 我可能在這里缺少有關如何在關系中使用DAX的一些基本概念。

嗨Redstreet,

從您的解決方案和Jacob提出的解決方案退一步,我認為創建另一個表來匯總所有計算(可能特別是考慮到您可能有兩個以上具有文件特定屬性的表)可能是有用的。

因此,我又創建了一個表,該表包含(僅)唯一的文件名,因此可以通過以下方式可視化關系:

在此處輸入圖片說明

添加必要的度量要簡單得多(無需計算列)。 我實際上已經測試了2種情況:

1)為屬性值文件大小創建簡單的SUM度量。 然后將這兩個措施分開並完成工作 :-)。

2)使用SUMX函數具有更通用的解決方案。 然后, DimPerSize計算的最終公式如下所示:

=DIVIDE(
   SUMX(DISTINCT(fileTable[file]),[Sum of AttrValue]), 
   SUMX(DISTINCT(fileTable[file]),[Sum of FileSize]), 
   BLANK()
)

[AttrValue的總和]為:

=SUM(attrsTable[value])

並且FileSize的總和為:

=SUM(sizeTable[size])

即使SUMX在兩種情況下都遍歷給定文件名的所有實例,這也都可以正常工作。 因此,對於文件B,它也使用zdim進行計算(如果需要將其過濾掉,則使用簡單的計算/過濾器組合)。 就文件大小而言,我也使用SUMX,盡管實際上並不需要它,因為表中每個文件名僅包含1條記錄 如果將有2個實例,則根據所需結果使用SUMX或AVERAGEX。

這是指向我在Excel(2010)中的源文件的鏈接。

希望這可以幫助。

您似乎希望具有關系的概念,但是就結構或不能簡單地使用“裸”數字列這一事實而言,就CALCULATE()而言,您的走法並不正確。以某種方式打包。

您所希望的方法是正確的,因為一旦獲得運行的簡單版本,就可以在任何相關維度上對其進行切片和切塊。

最佳實踐可能是使用以下幾種方法來建立這一點:

[xdim] = CALCULATE(SUM('attrstable'[value]), 'attrstable'[attribute] = "xdim")
[ydim] = CALCULATE(SUM('attrstable'[value]), 'attrstable'[attribute] = "ydim")
[dimPerSize] = ([xdim] + [ydim]) / VALUES('sizeTable'[size])

但是,取決於准確地設置數據透視表的方式,這也可能會引發錯誤,因為它將嘗試使用總計中的整個“大小”列。 有兩種主要的處理策略:

  1. 使用“迭代”公式(例如SUX()或AVERAGEX())在“文件”字段中逐個進行迭代,然后對總計求和或求平均值,例如

    [ItdimPerSize] = AVERAGEX(VALUES('sizeTable'[file]),[dimPerSize])

    根據要使用的數學,您可能會發現產生的有用平均值,需要使用SUMX,但要根據案例數(即COUNTROWS('sizeTable'[file]))進行確定。

  2. 您可能會認為總數無關緊要,只需引入一個錯誤處理元素即可使它們為空白,例如

    [NtdimPerSize] = IF(HASONEVALUE('sizeTable'[file]),[dimPerSize],BLANK())

注意,所有這些都假定在創建數據透視表時,您是從“大小表”中“拖入”文件字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM