主要是因為今天做表時,用treatas時,將前后參數(shù)的的位置寫反了,導(dǎo)致結(jié)果對不上;
后來用userelationship結(jié)果就對上了
| ITEM | CONTENT |
|---|---|
| 同 | 都可以構(gòu)建關(guān)系 |
| 異 |
treatas可以在沒有關(guān)系的情況下使用,更靈活,可以自己構(gòu)建; Userelationship僅在有未激活關(guān)系的情況下使用 |
--treatas更靈活,可以構(gòu)建不存在的列
MEASURE = CALCULATE([度量值], treatas({"Blue","Red"}, 'table[column]))
--定義任意關(guān)系的篩選器
--檢索在法國銷售的藍色產(chǎn)品和在愛爾蘭銷售的綠色產(chǎn)品的數(shù)量
EVALUATE
SUMMARIZECOLUMNS (
'Date'[Calendar Year],
"Quantity", CALCULATE (
SUM ( Sales[Quantity] ),
TREATAS (
{ ( "Blue", "France" ), ( "Green", "Ireland" ) },
'Product'[Color],
Customer[Country]
)
)
TREATAS
treatas前后字段很重要,
TREATAS(table_expression, <column>[, <column>[, <column>[,…]]]} )
| Term | Definition |
|---|---|
| table_expression | An expression that results in a table. |
| column | One or more existing columns. It cannot be an expression. |
該表達式返回一個表,然后在calculate中用返回的表進行篩選
使用時,可以理解為維度表在前,明細表在后
Userelationship

image.png
用在calculate中,臨時激活虛線的關(guān)系
常使用在有兩個字段需要與維度表關(guān)聯(lián)時, 比如截圖時下單日期和發(fā)貨日期需要與日期表相連。
使用時,列的順序無所謂;通常的做法是先使用關(guān)系的多面(Sales),然后使用單面(Date),不過不影響結(jié)果。
使用建議
性能上:建模視圖構(gòu)建關(guān)系>userelationship>treatas>intersect>filter
但是treatas可以做非侵入式設(shè)計,減少對模型主要關(guān)系的干擾。
所以,需要在設(shè)計與性能間平衡。
Detail please refer to
https://www.sqlbi.com/articles/propagate-filters-using-treatas-in-dax/