我正在制作一份个人工作表,总结我在山寨币领域的冒险经历。我想记录以下内容:
- 我在每个交易所存入了多少真钱
- 我钱包里的当前山寨币数量
- 我当前持有的山寨币的平均价格
- 每笔交易的当前余额(即实际余额)
我会做这样的事(在此处操作 SQL):
- 每个操作只有一行,标识其 ID 号以及发生的时间;
- [借方]/[贷方]栏表示钱从哪里来/到哪里去;
- [数量] 列将保存 [信用] 货币的数量
- [价值] 栏始终为金钱
- [描述] 列仅用于说明
在哪里:
- [蓝色] 来自数据透视表的列
- [橙色] 列需要手动输入,或者使用 VLOOKUP 查找其他地方
- [绿色] 列是标题公式
我很难想出一个解决方案,因为我不知道什么可以等同于联盟在 Excel 中,因为我需要以不同的方式计算那些贷方/借方列。
你们能给我指明正确的方向吗?
答案1
我将您的数据复制到名为data
:
- 使用“数据”>“获取和转换数据”>“从表/范围”创建名为“数据”的查询
- 复制在步骤 1 中创建的查询(右键单击,复制)以创建名为“debit”的查询
- 将借记查询中的 DEBIT 列重命名为 Account
- 从借记查询中删除了 CREDIT 列
- 借记查询中数量和价值的符号反转
- 在借记查询中添加了一个名为 Type 的列,其值为 DEBIT
- 将数据查询复制为名为“credit”的查询
- 从信用查询中删除了借方列
- 将信用查询中的 CREDIT 列重命名为 Account
- 在信用查询中添加了一个名为 Type 的列,其值为 CREDIT
- 使用主页>合并>附加查询>将查询附加为新查询将借记和贷记查询附加在一起(这实现了您的
UNION
) - 将新的附加查询重命名为 DebitCredit
- 在 DebitCredit 查询中添加了一个名为 Rate 的自定义列,并使用以下公式:
if [Type] = "CREDIT" then [Value]/[Qty] else null
生成的查询(左侧列出了各个查询):
使用“主页”>“关闭并加载”将查询以正确的格式放回数据透视表中,以便跨帐户进行数据透视和轻松聚合。
如果使用 Ctrl+T 将数据区域转换为表格并使用“表设计”选项卡对其进行命名data
,则可以在 Power Query 编辑器中的高级编辑器中使用它来创建查询data
:
let
Source = Excel.CurrentWorkbook(){[Name="data"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Order #", Int64.Type}, {"Date", type datetime}, {"Exchange", type text}, {"DEBIT", type text}, {"CREDIT", type text}, {"Qty", type number}, {"Value", Int64.Type}})
in
#"Changed Type"
这是为了创建debit
(不可否认可能更干净一些):
let
Source = Excel.CurrentWorkbook(){[Name="data"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Order #", Int64.Type}, {"Date", type datetime}, {"Exchange", type text}, {"DEBIT", type text}, {"CREDIT", type text}, {"Qty", type number}, {"Value", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "type", each "DEBIT"),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"CREDIT"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"DEBIT", "ACCOUNT"}, {"Qty", "QTY_ORIG"}, {"Value", "VALUE_ORIG"}}),
#"Added Custom1" = Table.AddColumn(#"Renamed Columns", "qty", each [QTY_ORIG]*-1),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Value", each [VALUE_ORIG]*-1),
#"Removed Columns1" = Table.RemoveColumns(#"Added Custom2",{"QTY_ORIG", "VALUE_ORIG"}),
#"Reordered Columns" = Table.ReorderColumns(#"Removed Columns1",{"Order #", "Date", "Exchange", "ACCOUNT", "qty", "Value", "type"}),
#"Renamed Columns1" = Table.RenameColumns(#"Reordered Columns",{{"qty", "Qty"}, {"type", "Type"}, {"ACCOUNT", "Account"}})
in
#"Renamed Columns1"
这将创建credit
:
let
Source = Excel.CurrentWorkbook(){[Name="data"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Order #", Int64.Type}, {"Date", type datetime}, {"Exchange", type text}, {"DEBIT", type text}, {"CREDIT", type text}, {"Qty", type number}, {"Value", Int64.Type}}),
#"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"DEBIT"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"CREDIT", "ACCOUNT"}}),
#"Added Custom" = Table.AddColumn(#"Renamed Columns", "Type", each "CREDIT"),
#"Renamed Columns1" = Table.RenameColumns(#"Added Custom",{{"ACCOUNT", "Account"}})
in
#"Renamed Columns1"
这是为了创建DebitCredit
:
let
Source = Table.Combine({credit, debit}),
#"Added Custom" = Table.AddColumn(Source, "Rate", each if [Type] = "CREDIT" then [Value]/[Qty] else null)
in
#"Added Custom"
你可以阅读这里了解如何使用高级编辑器(您可以将上面的查询粘贴到其中)从头开始创建查询。
如您所见,数据透视表计算正确,没有太多麻烦:
至少我认为是这样的!不过和你的桌子不匹配 :)
您可以考虑仅将 CREDIT/DEBIT 作为每行的属性来组织源数据,并避免一些麻烦。