SSRS CountDistinct 函数是一个聚合函数,用于计算给定字段中不同或唯一的项目(记录)的数量并返回该数字。本文将通过一个示例,解释如何使用 CountDistinct 函数查找特定组或完整表中的唯一不同项目。
SSRS CountDistinct 函数在默认范围内查找不同项目数量的语法如下所示。
CountDistinct(Fields!SalesAmount.Value)
CountDistinct(Fields!EmployeeName.Value)
要为每个组、表或数据集查找不同计数的值,请将名称替换为组、Tablix 或数据集名称。
CountDistinct(Fields!EmployeeName.Value, "Name")
CountDistinct(Fields!EmployeeName.Value, "Name", Recursive)
为了演示 SSRS CountDistinct 函数,我们使用下面的员工表,该表有 15 条按职业分组的记录。图像显示了表格报告中的记录。

SSRS CountDistinct 函数示例
右键单击详细信息行中的任意字段,选择插入行,然后选择“组外 - 下方”选项以添加新行。接下来,合并前两列并将“组内不同计数”作为文本。为了理解报告,我建议您参考 SSRS 中的图表、表格、分组和格式表格文章。
有多种方法可以编写 SSRS CountDistinct 函数。第一种方法是单击单元格并选择 YearlyIncome 字段。由于它是默认的聚合函数,它将 Sum 函数分配给它。因此,选择文本(Sum(YearlyIncome)),选择“按摘要”,然后单击 CountDistinct 函数。它在内部编写了以下表达式
=CountDistinct(Fields!YearlyIncome.Value)

第二种方法是右键单击文本框并选择“表达式”选项。它会打开以下表达式窗口,用于编写更复杂的 SSRS CountDistinct 函数以及范围。下面的代码返回总销售项目(行)的不同计数。
=CountDistinct(Fields!Sales.Value)

类似地,让我添加下面的表达式来唯一地计算字符串列。
=CountDistinct(Fields!Education.Value)
请单击预览选项卡以获取员工教育、年收入和销售的不同计数。如果您观察报告,默认情况下,它会在每个职业组中显示唯一值的计数,因为这是默认范围。

SSRS CountDistinct 函数范围示例
为此,我将在销售的右侧添加一个新列,并将标题命名为 DCNT Sale。接下来,右键单击文本框并选择“表达式”。有关更多函数 >> 单击此处!
下面的 CountDistinct 函数表达式返回的结果与“组内不同计数”行显示的结果相同。但是,您拥有更多的控制权,因为我们手动更改了 CountDistinct 函数的范围。
=CountDistinct(Fields!Education.Value, "Occupation")
下面的表达式将每个员工的销售额乘以每个职业组中唯一(不同)教育记录的数量。请记住,“职业”是组名。
=CountDistinct(Fields!Education.Value, "Occupation") * Fields!Sales.Value

从报告预览中,Christy Mehta 的 DCNT Sale:2(文书职业不同教育计数)* 24.99(销售额)= 49.98。
如前所述,您必须将组(“职业”)替换为表名才能找到表或所有员工的不同计数。让我添加一个组外的新行,并将其命名为“表内不同计数”。接下来,为名字、姓氏、教育、年收入和销售额添加以下五个 SSRS CountDistinct 函数表达式。
=CountDistinct(Fields!FirstName.Value, "Tablix1")
=CountDistinct(Fields!LastName.Value, "Tablix1")
=CountDistinct(Fields!Education.Value, "Tablix1")
=CountDistinct(Fields!YearlyIncome.Value, "Tablix1")
=CountDistinct(Fields!Sales.Value, "Tablix1")
下面的报告显示了每个组和整个表中项目或记录的总不同计数。请将 Tablix1 替换为数据集名称,以获取不考虑报表筛选器的不同销售计数。
