避免DAX查询中某些列的重复值

时间:2015-10-05 10:58:38

标签: dax

我使用以下语句来获取结果表:

EVALUATE
(
    CALCULATETABLE
    (
       ADDCOLUMNS (
     'Case',
    "Casenumber", RELATED( 'CaseDetails'[nr]),
       ),
'Case'[Date] <= value(@dateto)     )
)

但是,我想只获得一个记录pr casenumber。在SQL中我会用GROUP BY语句解决这个问题,但是我应该如何在DAX中执行此操作? Case也有一个dimkey,所以几个具有相同caselogumber的case可以有不同的dimkey。

1 个答案:

答案 0 :(得分:1)

试试这个:

EVALUATE
CALCULATETABLE(
    SUMMARIZE(
        Case
        ,<comma-separated list of fields from Case you want>
        ,"CaseNumber"
        ,RELATED(CaseDetails[nr])
    )
    ,Case[Date] <= VALUE(@dateto)
)

SUMMARIZE()接受一个表作为它的第一个参数,然后是一个以逗号分隔的表中的字段列表,以及它与多个表所在的表相关的所有表(因此在星型模式中,SUMMARIZE()事实表将允许您直接引用任何维度表字段),后跟逗号分隔的列表,其中是一个带引号的字段名称,是一个标量值,在表的行上下文中计算第一个论点。

如果您不需要重命名CaseDetails [nr],那么查询将如下所示(仅用于说明性示例):

EVALUATE
CALCULATETABLE(
    SUMMARIZE(
        Case
        ,<comma-separated list of fields from Case you want>
        ,CaseDetails[nr]
    )
    ,Case[Date] <= VALUE(@dateto)
)

在这样的查询中,所有字段都将以“table”[field]格式显示列标题,因此如果在多个相关表中具有相同的字段名称,则不会产生歧义。

编辑以解决原始信息:

SUMMARIZE(),就像SQL的GROUP BY子句一样,不会从结果集中消除不同的值。如果某个字段的基数高于您要分组的字段,则始终会看到重复字段。

结果集中是否需要[DimKey]?如果是,则无法将结果集的大小减小到小于[DimKey]的不同值的数量。

如果不需要[DimKey],只需在SUMMARIZE()的字段列表中省略它。

如果您只想要特定的[DimKey],例如最新的(假设它是一个IDENTITY字段,最大值是最新的),那么你可以带着另一个ADDCOLUMNS()包裹你当前的SUMMARIZE():

EVALUATE
ADDCOLUMNS(
    SUMMARIZE(
        Case
        ,<comma-separated list of fields from Case except for [DimKey]>
        ,"CaseNumber"
        ,RELATED(CaseDetails[nr])
    )
    ,"MaxDimKey"
    ,CALCULATE(MAX(Case[DimKey]))
)