簡體   English   中英

DAX:不需要的笛卡爾乘積線?

[英]DAX: Unwanted cartesian product lines?

請幫助正確計算/理解以下簡化示例的lastDaterankDate度量( 下載):

在此處輸入圖像描述

期望的結果:

在此處輸入圖像描述

現實(不正確的子類型):

在此處輸入圖像描述

為什么關系破裂?

如何避免這條笛卡爾積線?

我的措施(我評論了解決方法,因為它是一種后置過濾器,而不是前置過濾器):

rnkDate = 
VAR t =
    CALCULATETABLE(
        VALUES(tstTable[Date]),
        REMOVEFILTERS(tstTable[Date])
    )
RETURN 
    //IF( MAX(tstTable[Amount])<>BLANK(), // WORKAROUND To hide unwantedd rows
        RANKX(
            t,
            LASTDATE(tstTable[Date])
        )
    //)

PS Mess 只有在我使用維度表dimType[Type]中的字段時才會發生(在一個表中一切正常):

在此處輸入圖像描述

問題在於 Power BI 生成的查詢執行笛卡爾積並通過檢查度量結果來歸檔結果。

在我們的例子中是類似於

SUMMARIZECOLUMNS(
  'dimType'[Type],
  'tstTable'[subType],
  'tstTable'[Date],
  "MinAmount", CALCULATE(MIN('tstTable'[Amount])),
  "lastDate", 'tstTable'[lastDate],
  "rnkDate", 'tstTable'[rnkDate]
)

SUMMARIZECOLUMNS 在不同表上迭代時不使用關系,它在評估度量時應用它們。 有一篇文章解釋了 SUMMARIZECOLUMNS 執行的等效 DAX 代碼是什么

介紹 SUMMARIZECOLUMNS

問題是 RANKX 在空表上的計算返回 1。這可以在dax.do上執行

EVALUATE
VAR t =
    FILTER ( ALL ( 'Date'[Date] ), FALSE )
RETURN
    { RANKX ( t, [Sales Amount] ), CALCULATE ( [Sales Amount], t ) }

所以解決方案是首先檢查表 t 是否為空,這是因為您實施的解決方法解決了這個問題

rnkDate = 
VAR t =
    CALCULATETABLE(
        VALUES(tstTable[Date]),
        REMOVEFILTERS(tstTable[Date])
    )
RETURN 
    IF( NOT ISEMPTY(t),
        RANKX(
            t,
            LASTDATE(tstTable[Date])
        )
    )

暫無
暫無

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

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