***S 2012 Report Items -- 矩阵

本文介绍如何使用矩阵设计报表,通过动态展示数据行与数据列,实现数据的汇总和分组。文章详细解释了如何设置数据源、数据集,并通过实例演示了如何利用矩阵功能创建分层报表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

***S 2012 Report Items -- 矩阵

 

矩阵数据区域与我们所熟悉的数据透视表(Pivot Table)和交叉报表(Cross-Tab Report)的功能类似,相较于数据表是一维的数据,只能指定固定的数据列,来自动态的明细数据行,利用矩阵可以动态显示数据行与数据列,并且其内容可以随着数据内选项而动态增加。所以,它可说是二维的数据展现形式,让我们能够很容易地从数据行与数据集的交集中查看对应的汇总信息。

 

目前Reporting Services对于矩阵提供的设置属性与数据表相同。

 

建议矩阵


矩阵所要达到的效果,说穿了等于是在Tablix中的动态数据行组所得到的结果应用在横轴与纵轴。只不过从数据表开始还有一段漫长的加入组,以及删除明细数据列的过程。使用矩阵就显得简单多了。在此先示范利用与之前相同的数据源来设计矩阵报表。

 

首先,请先设置报表层级的数据源与数据集,再从工具箱中拖拉“矩阵(Matrix)”至报表主体,接下来,请将[PRODUCTCATEGORY_NAME]拖拉至数据行处,将[TRX_YEAR]拖拽至数据列处,至于销售金额以及销售数量则是拖放至“数据(Data)”区域。

 

clip_image002[4]

 

拖放完成后,请将[PRODUCTCATEGORY_NAME]列表头改为中文。不过,可发现销售金额以及销售数量并没有对应的说明表头,因此需要手动加入。请同时点选销售金额及销售数量单元格后右击,选择“Insert Row”、“OutSide Group - Above”。

 

clip_image004[4]

 

请在新增的数据列加入表头说明。

 

clip_image006[4]

 

切换至预览标签页。可另外使用格式化属性以调整矩阵的外观。

 

clip_image008[4]

 

矩阵组


事实上,将数据集的列拖拽到“数据行”或“数据列”中,就等同于依照所拖放的列在矩阵中建立数据组,矩阵中包含了“数据行组”以及“数据列组”。设计者可以在下方的数据列组以及数据行组面板进行组属性的设置,或是新增删除组结构。

 

原来报表中只有“产品大类”的数据列组,如果希望再加入一层“产品中类”的组时有两种方式,一种是右击原有的“产品大类”的数据列组,选择“Add Group”、“Child Group”。另一种则是从下方数据列群组面板右击“ProductCategoryName”组,选择“Add Group”、“Child Group”,两种方式都设置后都是将子组依据设为[ProductSubcategoryName],如此,即可新增产品种类的子组。

 

clip_image010[4]

 

clip_image012[4]

 

预览后结果如下:

 

clip_image014[4]

 

数据列是以两层的结构来显示产品大类与产品中类间的层次关系。不过,这种显示模式当层次数过多时可能会造成画面膨胀,进而让使用者不易阅读的缺点。在此介绍利用Tablix才能实作出的缩排式组报表(在报表生成器中称之为阶梯式层次),就能利用最经济的空间来显示层次关系。

 

首先,在下方数据行组面板中右击“产品中类”子组(PRODUCTSUBCATEGORY_NAME),选择“Add Total”、“Before”,此时,会在数据行上方加入总计行。

 

clip_image016[4]

 

接下来,将默认的“Total”替换为[ProductCategoryName](利用单元格右上方的列表切换)。接下来,请将第一列删除,同时将[ProductSubCategoryName]的“Padding”、“Left”属性修改为“12pt”,即可完成缩排效果。

 

clip_image018[4]

 

clip_image020[4]

 

预览以上设置的报表。

 

clip_image022[4]



# -*- coding: utf-8 -*- import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report, confusion_matrix from sklearn.svm import SVC from sklearn.tree import DecisionTreeClassifier from sklearn.neighbors import KNeighborsClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.linear_model import LogisticRegression # 设置中文字体 plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams["axes.unicode_minus"] = False # 数据加载与预处理 data = load_iris() X = pd.DataFrame(data.data, columns=["萼片长度", "萼片宽度", "花瓣长度", "花瓣宽度"]) y = data.target target_names_cn = ["山鸢尾", "变色鸢尾", "维吉尼亚鸢尾"] # 划分数据集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y ) # 模型定义 models = { "支持向量机": SVC(), "决策树": DecisionTreeClassifier(max_depth=3), "K近邻": KNeighborsClassifier(n_neighbors=3), "随机森林": RandomForestClassifier(n_estimators=100), "逻辑回归": LogisticRegression(max_iter=200) } # 训练评估与可视化 for name, model in models.items(): model.fit(X_train, y_train) y_pred = model.predict(X_test) # 输出评估结果 print(f"\n{name}评估结果".center(50, "=")) print(f"准确率:{accuracy_score(y_test, y_pred):.4f}") print("分类报告:\n", classification_report(y_test, y_pred, target_names=target_names_cn)) # 绘制混淆矩阵 cm = confusion_matrix(y_test, y_pred) plt.figure(figsize=(6, 4)) sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=target_names_cn, yticklabels=target_names_cn) plt.title(f"{name}混淆矩阵") plt.xlabel("预测标签") plt.ylabel("真实标签") plt.tight_layout() plt.show() 以上代码的可视化结果
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值