Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建列以基于实时表DAX PowerBI对行进行分类_Powerbi_Dax - Fatal编程技术网

创建列以基于实时表DAX PowerBI对行进行分类

创建列以基于实时表DAX PowerBI对行进行分类,powerbi,dax,Powerbi,Dax,我简化了我要解决的问题。假设我有三张桌子。一个包含数据和识别对象的特定代码,比如苹果 +-------------+------------+-----------+ | Data picked | Color code | Size code | +-------------+------------+-----------+ | 1-8-2018 | 1 | 1 | | 1-8-2018 | 1 | 3 | |

我简化了我要解决的问题。假设我有三张桌子。一个包含数据和识别对象的特定代码,比如苹果

+-------------+------------+-----------+
| Data picked | Color code | Size code |
+-------------+------------+-----------+
| 1-8-2018    |          1 |         1 |
| 1-8-2018    |          1 |         3 |
| 1-8-2018    |          2 |         2 |
| 1-8-2018    |          2 |         3 |
| 1-8-2018    |          2 |         2 |
| 1-8-2018    |          3 |         3 |
| 1-8-2018    |          4 |         1 |
| 1-8-2018    |          4 |         1 |
| 1-8-2018    |          5 |         3 |
| 1-8-2018    |          6 |         1 |
| 1-8-2018    |          6 |         2 |
| 1-8-2018    |          6 |         2 |
+-------------+------------+-----------+
我有两个相关的帮助表来帮助理解代码(它们的关系在模型中是不活动的,因为在实际情况中与其他表不明确)

假设我想在原始表中创建一个额外的列来确定哪些苹果是A类和B类,因为中绿色的苹果是A类,而大红色的苹果是B类,另一个保持空白,如下例所示

+-------------+------------+-----------+-------+
| Data picked | Color code | Size code | Class |
+-------------+------------+-----------+-------+
| 1-8-2018    |          1 |         1 |       |
| 1-8-2018    |          1 |         3 |       |
| 1-8-2018    |          2 |         2 | A     |
| 1-8-2018    |          2 |         3 |       |
| 1-8-2018    |          2 |         2 | A     |
| 1-8-2018    |          3 |         3 |       |
| 1-8-2018    |          4 |         1 |       |
| 1-8-2018    |          4 |         1 |       |
| 1-8-2018    |          5 |         3 | B     |
| 1-8-2018    |          6 |         1 |       |
| 1-8-2018    |          6 |         2 |       |
| 1-8-2018    |          6 |         2 |       |
+-------------+------------+-----------+-------+
如果关系最初处于非活动状态,那么应该使用什么DAX。最好是可解的,无需在任何表中创建任何其他列。我已经尝试过这样的代码:

CALCULATE ( 
    "A" ; 
    FILTER ( 'Size Table' ; 'Size Table'[Size] = "Medium");
    FILTER ( 'Color Table' ; 'Color Table'[Color] = "Green")
)

同一原理的许多变体

鉴于这些关系是非活动的,我建议使用
LOOKUPVALUE
匹配其他表上的ID值。您应该能够创建计算列,如下所示:

Class = 
    VAR Size = LOOKUPVALUE('Size Table'[Size],
                   'Size Table'[Size code], 'Data Table'[Size code])
    VAR Color = LOOKUPVALUE('Color Table'[Color],
                   'Color Table'[Color code], 'Data Table'[Color code])
    RETURN SWITCH(TRUE(),
               (Size = "Medium") && (Color = "Green"), "A",
               (Size = "Large") && (Color = "Red"), "B", BLANK())

如果您的关系处于活动状态,则不需要查找:

Class = SWITCH(TRUE(),
            (RELATED('Size Table'[Size]) = "Medium") &&
            (RELATED('Color Table'[Color]) = "Green"),
            "A",
            (RELATED('Size Table'[Size]) = "Large") &&
            (RELATED('Color Table'[Color]) = "Red"),
            "B", 
            BLANK())
或者写得更优雅一点(特别是对于更多的类):


男人。。。你怎么知道这么多DAX!?英雄联盟尊敬亚历克西斯;)
Class = 
    VAR Size = LOOKUPVALUE('Size Table'[Size],
                   'Size Table'[Size code], 'Data Table'[Size code])
    VAR Color = LOOKUPVALUE('Color Table'[Color],
                   'Color Table'[Color code], 'Data Table'[Color code])
    RETURN SWITCH(TRUE(),
               (Size = "Medium") && (Color = "Green"), "A",
               (Size = "Large") && (Color = "Red"), "B", BLANK())
Class = SWITCH(TRUE(),
            (RELATED('Size Table'[Size]) = "Medium") &&
            (RELATED('Color Table'[Color]) = "Green"),
            "A",
            (RELATED('Size Table'[Size]) = "Large") &&
            (RELATED('Color Table'[Color]) = "Red"),
            "B", 
            BLANK())
Class = 
    VAR SizeColor = RELATED('Size Table'[Size]) & " " & RELATED('Color Table'[Color])
    RETURN SWITCH(TRUE(),
               SizeColor = "Medium Green", "A",
               SizeColor = "Large Red", "B",
               BLANK())