如何将Day of Month列转换为表中的行?

时间:2017-06-29 13:44:49

标签: transform powerbi transpose dax

我创建了一个看起来像这样的SQL表,其中有月份的列,多个帐户详细信息,以及每月的每一天的一列。我为每月的每一天创建一个单独的列而不是包含所有Day值的一个Day of the Month列的原因是我希望每个事务有一行。 (我有另一个版本的数据集,其中包含一个Day of the Month列,但我无法将其显示为Power BI表中的单独行而不重复事务。)

此外,Month和Day列不是DateTime数据类型,因此我无法使用Power BI的日历或时间函数。

现在我想在Power BI中转换整个SQL表,以便所有列成为Table Visual中的行。最终结果是总共应该有29行,每个月的每一天都有一行。我希望其他列成为这种视觉效果的过滤器。这意味着此表格中只有一列可视化,包含当天的总销售额,但会根据所选的切片器值进行过滤。此表视觉表示我的详细信息表。在我获得此详细信息表后,下一步是弄清楚如何从DOS_YrMonth级别向下钻取到此日级别,并过滤他们选择的切片器值。 (如果您对此有任何想法也会有所帮助)。

我尝试在查询编辑器中使用Power BI的Transpose Transform,但是等了30分钟没有结果,我放弃了这个努力。此SQL表中有超过300,000个事务,因此我不喜欢使用Power BI的Transform函数。每次我使用查询编辑器时,它似乎都非常慢。我最喜欢的解决方案是使用DAX根据我的表创建一个新表。一个很好的例子就是这个线程由Phil发布的解决方案: enter link description here

下面的示例表是简化版。此处未包含真实SQL表中的更多帐户详细信息(附加列)。

    create table #MonthDayExample
(
    DOS_YrMonth int
    ,account_detail1 varchar(5)
    ,account_detail2 varchar(5)
    ,[01] decimal(13,2)
    ,[02] decimal(13,2)
    ,[03] decimal(13,2)
    ,[04] decimal(13,2)
    ,[05] decimal(13,2)
    ,[06] decimal(13,2)
    ,[07] decimal(13,2)
    ,[08] decimal(13,2)
    ,[09] decimal(13,2)
    ,[10] decimal(13,2)
    ,[11] decimal(13,2)
    ,[12] decimal(13,2)
    ,[13] decimal(13,2)
    ,[14] decimal(13,2)
    ,[15] decimal(13,2)
    ,[16] decimal(13,2)
    ,[17] decimal(13,2)
    ,[18] decimal(13,2)
    ,[19] decimal(13,2)
    ,[20] decimal(13,2)
    ,[21] decimal(13,2)
    ,[22] decimal(13,2)
    ,[23] decimal(13,2)
    ,[24] decimal(13,2)
    ,[25] decimal(13,2)
    ,[26] decimal(13,2)
    ,[27] decimal(13,2)
    ,[28] decimal(13,2)
    ,[29] decimal(13,2)
)
insert #MonthDayExample values(201705,'A','B',100,0,0,300,500,0,0,0,0,0,0,20,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
insert #MonthDayExample values(201705,'A','C',0,0,0,280,500,0,0,0,0,0,0,75,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
insert #MonthDayExample values(201705,'A','D',70,0,0,66,65,0,0,0,0,0,0,20,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
insert #MonthDayExample values(201705,'F','G',90,0,0,25,500,0,0,0,0,0,0,20,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
insert #MonthDayExample values(201705,'F','H',13,0,0,25,500,0,0,0,0,0,0,20,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

select * from #MonthDayExample

0 个答案:

没有答案