如何用Azure DF/Synapse/SQL无分组将列数据转置为3列月份映射行格式
列式存储月份数据转置为行结构实现方案
需求核心:不做数据分组,将源CSV中重复排列的月份列转为行存储,固定维度字段保留,拆分后每行对应1个月份的全量度量值。
前置映射规则确认
源CSV中13个固定维度列(从Supercategory到Item Description)直接保留输出;后续连续排列的Jan 2022/Feb 2022列按从左到右顺序,依次对应输出的业务度量字段,COUNTRY/LOCAL_CURRENCY/EXCHANGE_RATE/YEAR/MONTH/MONTH_YEAR为衍生/固定赋值字段,不从源月份列提取。
方案1:Synapse SQL 实现(无聚合分组,性能最优)
先将源CSV导入Synapse临时表stg_sales_raw,导入时重名月份列会自动加数字后缀(如Jan 2022_1、Feb 2022_1,后缀序号和度量顺序一一对应),确认列和度量的映射关系后,执行以下查询即可:
SELECT -- 以下固定值可根据业务实际替换,也可关联维度表动态获取 'US' AS COUNTRY, 'USD' AS LOCAL_CURRENCY, m.YEAR, m.MONTH, m.MONTH_YEAR, -- 直接保留所有固定维度列 r.Supercategory, r.Segment, r.Subsegment, r.Class, r.[Total Property (Brand + License)], r.[Corporate Manufacturer], r.Manufacturer, r.Brand, r.License, r.Licensors, r.[Model Number], r.[Item Description], -- 拆分后的度量字段 m.UNITS, m.AMOUNT_LC, m.AMOUNT_USD, m.[% Distribution - Weighted], m.[% of Stores Selling - Unweighted], m.[$ Velocity - Weighted], m.[Unit Velocity - Weighted], -- 汇率可关联汇率表按月份动态获取 1 AS EXCHANGE_RATE FROM stg_sales_raw r -- 逐行拆分为对应月份的行,全程无GROUP BY聚合操作 CROSS APPLY ( VALUES -- 1月数据,按度量顺序取对应Jan列,有多少个度量就加多少个字段 (2022, 1, 'Jan 2022', r.[Jan 2022_1], r.[Jan 2022_2], r.[Jan 2022_3], r.[Jan 2022_4], r.[Jan 2022_5], r.[Jan 2022_6], r.[Jan 2022_7]), -- 2月数据,按度量顺序取对应Feb列 (2022, 2, 'Feb 2022', r.[Feb 2022_1], r.[Feb 2022_2], r.[Feb 2022_3], r.[Feb 2022_4], r.[Feb 2022_5], r.[Feb 2022_6], r.[Feb 2022_7]) ) m( YEAR, MONTH, MONTH_YEAR, UNITS, AMOUNT_LC, AMOUNT_USD, [% Distribution - Weighted], [% of Stores Selling - Unweighted], [$ Velocity - Weighted], [Unit Velocity - Weighted] )
方案2:Azure DF / Synapse Pipeline 低代码实现
全程不需要聚合分组操作,步骤如下:
- 配置CSV源数据集,开启「自动推断列名」,注意关闭「自动排序列」选项,保证源文件列顺序不被打乱,重名月份列会自动加数字后缀区分。
- 添加「派生列」转换,补全固定字段
COUNTRY、LOCAL_CURRENCY、EXCHANGE_RATE,直接赋值业务固定值即可。 - 复制两个数据流支流做独立字段映射:
- 支流1(1月数据):选取所有固定维度列、固定值列,选取所有后缀为
_1到_7的Jan 2022列,分别重命名为对应度量名,同时派生列YEAR=2022、MONTH=1、MONTH_YEAR='Jan 2022' - 支流2(2月数据):选取所有固定维度列、固定值列,选取所有后缀为
_1到_7的Feb 2022列,分别重命名为对应度量名,同时派生列YEAR=2022、MONTH=2、MONTH_YEAR='Feb 2022'
- 支流1(1月数据):选取所有固定维度列、固定值列,选取所有后缀为
- 添加「联合(Union)」转换,将两个支流按字段名对齐合并,即可得到最终的行结构输出。
- 配置输出数据集,映射字段到目标存储即可。
注意事项:源文件的重复月份列没有独立列名,完全靠顺序对应度量,导入环节必须确认列顺序未被修改,否则会出现度量值错位的问题。
源数据与输出样例对照如下:
内容的提问来源于stack exchange,提问作者Saranya Gogineni
相关产品推荐
相关产品推荐

