我使用以下语句来获取结果表:
EVALUATE
(
CALCULATETABLE
(
ADDCOLUMNS (
'Case',
"Casenumber", RELATED( 'CaseDetails'[nr]),
),
'Case'[Date] <= value(@dateto) )
)
但是,我想只获得一个记录pr casenumber。在SQL中我会用GROUP BY
语句解决这个问题,但是我应该如何在DAX中执行此操作? Case也有一个dimkey,所以几个具有相同caselogumber的case可以有不同的dimkey。
答案 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]))
)