چگونه تأثیر پروموشنها را بر فروش با Power BI اندازهگیری کنیم
کمپینهای بازاریابی محرک اصلی فروش هستند، اما همهی فروشها را نمیتوان مستقیماً به یک کمپین مشخص نسبت داد. ممکن است یک مشتری یک پروموشن را ببیند و مدتی بعد، بدون استفاده از کد تخفیف یا لینک کمپین، محصول را خریداری کند. سؤال کلیدی اینجاست: چطور میتوان این تأثیر گستردهتر را اندازهگیری کرد؟
این مقاله رویکردی مبتنی بر مدلسازی داده و Measureهای DAX ارائه میدهد تا اثربخشی کمپینها را با تفکیک دو مفهوم اصلی تحلیل کند:
فروشهای منتسبشده (Attributed Sales): تراکنشهایی که میتوان بهصورت شفاف تشخیص داد دقیقاً توسط کدام کمپین ایجاد شدهاند.
فروشهای تحتتأثیر (Influenced Sales): تمام فروشهای مربوط به محصولاتی که در یک یا چند کمپین حضور داشتهاند، فارغ از اینکه فروش مستقیماً به یک کمپین خاص قابل انتساب باشد یا نه.
راهکار ارائهشده شامل چندین Measure است که بر پایهی رابطهی چندبهچند (Many-to-Many) بین محصولات و کمپینها و همچنین استفادهی پویا از تابع CROSSFILTER در DAX ساخته شدهاند. این ترکیب امکان ارائهی یک تصویر کامل و دقیق از تأثیر واقعی کمپینهای بازاریابی بر فروش را فراهم میکند.
کمپینهای بازاریابی با هدف افزایش فروش طراحی میشوند، اما اندازهگیری تأثیر واقعی آنها کار سادهای نیست. زمانی که مشتری از یک کد تخفیف استفاده میکند یا روی لینک تبلیغاتی کلیک میکند، فروش بهوضوح به کمپین مربوطه نسبت داده میشود. اما مشتریانی را در نظر بگیرید که یک تبلیغ را میبینند، یک هفته بعد از پایان کمپین به فروشگاه مراجعه میکنند و محصول را با قیمت کامل میخرند. در این حالت، کمپین بر تصمیم خرید اثر گذاشته است، اما هیچ ارتباط مستقیمی بین تراکنش و کمپین ثبت نشده است.
مدلهای سنتی Attribution فقط تبدیلهایی را محاسبه میکنند که بهطور مستقیم قابل ردیابی هستند و در نتیجه، ارزش واقعی کمپین را کمتر از حد واقعی نشان میدهند. برای درک تصویر کامل، باید به چند پرسش اساسی پاسخ دهیم:
چه مقدار از درآمد مستقیماً از تراکنشهای کمپین ایجاد شده است؟
محصولات حاضر در کمپینها، صرفنظر از Attribution، در مجموع چقدر فروش داشتهاند؟
آیا محصولاتی وجود دارند که از کمپینها سود میبرند اما در تحلیل فعلی ما لحاظ نشدهاند؟
عملکرد محصولاتی که هیچگاه در هیچ کمپینی حضور نداشتهاند چگونه است؟
برای پاسخ به این سؤالات، مجموعهای از Measureها را طراحی میکنیم تا بتوانیم موارد زیر را شناسایی کنیم:
فروشهای منتسبشده (Attributed Sales): تراکنشهایی که بهطور صریح به یک کمپین مشخص متصل هستند.
فروشهای تحتتأثیر (Influenced Sales): تمام فروشهای مربوط به محصولاتی که در کمپینها مشارکت داشتهاند.
فروشهای بدون انتساب (Unattributed Sales): فروش محصولات کمپینی که ارتباط مستقیم آنها با کمپین مشخص نیست.
فروش ارگانیک (Organic Sales): فروش محصولاتی که هرگز در هیچ کمپینی حضور نداشتهاند.
این Measureها دیدی جامع از اثربخشی کمپینها ارائه میدهند؛ دیدی فراتر از Attribution ساده و مستقیم.
مدل داده (Data Model)
این مدل بر اساس دیتاست استاندارد Contoso ساخته شده و در این سناریو تمرکز اصلی روی جداول Product و Sales است. علاوه بر این، دو جدول جدید به مدل اضافه شدهاند:
Campaigns
CampaignProducts
نمودار ارائهشده در ادامه، این بخش از Semantic Model را نمایش میدهد.
جدول Sales شامل ستونی به نام Campaign است که مشخص میکند هر تراکنش، در صورت وجود، مربوط به کدام کمپین بوده است. این ستون یک رابطهی مستقیم با جدول Campaigns دارد و Attribution کمپین را در سطح هر تراکنش بهصورت جداگانه تعریف میکند.
زمانی که یک فروش از طریق یک کمپین انجام میشود (برای مثال با استفاده از کد تخفیف یا لینک پروموشن)، شناسهی کمپین در ستون Sales[Campaign] ذخیره میشود. در مقابل، اگر فروشی هیچ ارتباطی با کمپین نداشته باشد، مقدار این ستون Blank خواهد بود.
جدول Campaign
جدول Campaign یک Dimension ساده است که فهرست کمپینهای موجود را نمایش میدهد. از آنجا که رابطهی بین Campaign و Sales یک رابطهی استاندارد یکبهچند (One-to-Many) است، تراکنشهایی که در جدول Sales مقدار Blank در ستون Sales[Campaign] دارند، باعث ایجاد یک ردیف Blank اضافی در جدول Campaign میشوند. این رفتار کاملاً آگاهانه و هدفمند است.
یک رویکرد جایگزین این بود که یک کمپین ساختگی با نامی مانند “Not Assigned” ایجاد کنیم تا از ایجاد ردیف Blank جلوگیری شود. اما این کار Measureها را پیچیدهتر میکرد، زیرا برای جداسازی فروشهای بدون Attribution، مجبور بودیم همیشه به آن مقدار خاص اشاره کنیم. استفاده از ردیف Blank این مزیت را دارد که میتوانیم از تابع استاندارد ISBLANK استفاده کنیم و در نتیجه، کدهای DAX سادهتر، خواناتر و قابل نگهداریتر خواهند بود.
جدول CampaignProducts و رابطه Many-to-Many
جدول CampaignProducts نقش یک Bridge Table را ایفا میکند و رابطهی چندبهچند (Many-to-Many) بین Product و Campaign را پیادهسازی میکند.
در این مدل:
یک محصول میتواند در چند کمپین مختلف شرکت کند.
یک کمپین میتواند شامل چندین محصول باشد.
جهت روابط بهگونهای تنظیم شده است که:
فیلتر از Product به CampaignProducts اعمال میشود
فیلتر از Campaign به CampaignProducts اعمال میشود
اما فیلتر بهصورت معکوس (از Bridge Table به Product یا Campaign) منتقل نمیشود
این طراحی به این معناست که فیلتر کردن یک کمپین، بهطور خودکار محصولات مرتبط را از طریق Bridge Table فیلتر نمیکند. Measureهایی که در ادامه ساخته میشوند، در مواقع لازم با استفاده از تابع CROSSFILTER، فیلتر دوطرفه (Bidirectional Filtering) را بهصورت پویا فعال میکنند. این کار به ما اجازه میدهد تمام محصولاتی را که در یک کمپین مشارکت داشتهاند، صرفنظر از Attribution تراکنشها در جدول Sales، در تحلیل لحاظ کنیم.
ساخت Measureها (Building the Measures)
در بخش مقدمه، چند سؤال کلیدی دربارهی اندازهگیری اثربخشی کمپینها مطرح کردیم. اکنون مجموعهای از Measureها را میسازیم تا به این سؤالات پاسخ دهیم. این کار را با یک Measure پایه و ساده شروع میکنیم و بهتدریج با افزودن منطق تحلیلی، دیدگاههای مختلفی از فروش را از هم تفکیک میکنیم.
Sales Amount
Sales Amount یک Measure استاندارد در مدل نمونهی Contoso است که بهعنوان Measure پایهی تحلیل استفاده میشود. این Measure، کل درآمد را با ضرب تعداد فروش در قیمت خالص هر تراکنش محاسبه میکند:
Sales Amount =
SUMX (
Sales,
Sales[Quantity] * Sales[Net Price]
)
هر Measure بعدی با تغییر Filter Context اطراف Measure پایهی Sales Amount ساخته میشود تا بتوان انواع مختلف فروش را از یکدیگر تفکیک و تحلیل کرد. این رویکرد به ما اجازه میدهد تأثیر کمپینها را از زوایای مختلف و با دقت بالا بررسی کنیم.
Attributed Sales (فروشهای منتسبشده)
Measure Attributed Sales تراکنشهایی را جدا میکند که بهصورت مستقیم به یک کمپین مشخص مرتبط هستند؛ یعنی فروشهایی که Attribution آنها در سطح تراکنش کاملاً قابل شناسایی است:
این Measure پایهی تحلیل اثربخشی مستقیم کمپینهاست و نقطهی شروعی برای مقایسهی فروشهای منتسبشده با فروشهای تحتتأثیر و غیرمنتسب در ادامهی مدل DAX محسوب میشود.
Attributed Sales =
CALCULATE (
[Sales Amount],
KEEPFILTERS ( NOT ISBLANK ( Campaign[Campaign] ) )
)
این Measure، مقدار Sales Amount را طوری فیلتر میکند که فقط تراکنشهایی را دربر بگیرد که ستون Campaigns[Campaign] آنها Blank نباشد؛ به این معنا که در فرآیند فروش، یک کمپین بهصورت صریح استفاده شده است.
نکتهی مهم اینجاست که بهجای بررسی Sales[Campaign]، از Campaigns[Campaign] استفاده میکنیم. این انتخاب تضمین میکند حتی تراکنشهایی که به کمپینهایی نسبت داده شدهاند که در حال حاضر در جدول Campaigns موجود نیستند نیز در محاسبه لحاظ شوند. اگر بهجای آن از Sales[Campaign] استفاده شود، مشکلات کیفیت داده (Data Quality Issues) باعث میشود اعداد بهدستآمده با جمع Measure مربوط به Unattributed Sales با Sales Amount همخوانی نداشته باشند.
نقش KEEPFILTERS در Attributed Sales
در این Measure از تابع KEEPFILTERS استفاده میکنیم تا هرگونه انتخاب کمپین در Report حفظ شود.
اگر KEEPFILTERS به کار نرود، فیلترNOT ISBLANK ( Campaigns[Campaign] )
فیلتر انتخابشدهی کمپین را نادیده میگیرد و در نتیجه، تمام فروشهای منتسبشده نمایش داده میشوند؛ بدون توجه به اینکه کدام کمپین در Report انتخاب شده است.
اما با استفاده از KEEPFILTERS، این دو فیلتر با یکدیگر اشتراک پیدا میکنند. نتیجه این است که فقط فروشهای منتسبشده به کمپین یا کمپینهای انتخابشده نمایش داده میشوند، که رفتاری دقیق و مورد انتظار در تحلیل اثربخشی کمپینهاست.
Unattributed Sales (فروشهای بدون انتساب)
Measure Unattributed Sales دقیقاً عکس حالت قبل را پوشش میدهد؛ یعنی تراکنشهایی را شامل میشود که هیچ Attribution مستقیمی به کمپین ندارند:
Unattributed Sales =
IF (
ISINSCOPE ( Campaign[Campaign] ),
CALCULATE (
[Sales Amount],
KEEPFILTERS ( ISBLANK ( Campaign[Campaign] ) )
),
CALCULATE (
[Sales Amount],
REMOVEFILTERS ( Campaign ),
ISBLANK ( Campaign[Campaign] )
)
)
این Measure با فیلتر کردن ردیف Blank در جدول Campaign، تراکنشهایی را جدا میکند که در آنها Sales[Campaign] یا مقدار خالی دارد، یا به کمپینی اشاره میکند که در جدول Campaign وجود ندارد. این فروشها بدون دخالت هیچ کمپین معتبر و قابل ردیابی انجام شدهاند.
نقش ISINSCOPE در Unattributed Sales
تابع ISINSCOPE بررسی میکند که آیا ستون Campaign[Campaign] بخشی از سطح گروهبندی (Grouping Hierarchy) گزارش هست یا نه.
زمانی که Campaign[Campaign] در Scope باشد
برای مثال، وقتی دادهها را در سطح کمپینهای تکی درون یک برند مشاهده میکنید (حتی اگر نمایش بر اساس Campaign[Campaign Name] باشد ولی مرتبسازی بر مبنای Campaign[Campaign] انجام شود)، Measure با استفاده از KEEPFILTERS فیلتر ردیف Blank کمپین را با انتخابهای موجود تلاقی میدهد. در این حالت، مقدار فقط روی همان ردیف Blank نمایش داده میشود.زمانی که Campaign[Campaign] در Scope نباشد
مثلاً وقتی گزارش را فقط در سطح Brand مشاهده میکنید، Measure از REMOVEFILTERS استفاده میکند تا هرگونه فیلتر انتخابشده روی کمپینها نادیده گرفته شود و سپس فقط ردیف Blank کمپین فیلتر شود. این کار تضمین میکند که مقدار Unattributed Sales در سطح برند نمایش داده شود، حتی اگر کاربر در Slicer یک یا چند کمپین خاص را انتخاب کرده باشد.
بدون این منطق، انتخاب کمپینها باعث میشد فروشهای بدون انتساب در سطوح تجمیعی (Aggregated Levels) پنهان شوند و درک تصویر کامل از عملکرد فروش بسیار دشوارتر شود.
رابطهی Attributed Sales و Unattributed Sales
Measureهای Attributed Sales و Unattributed Sales مکمل یکدیگر هستند. برای هر محصول مشخص، جمع این دو Measure دقیقاً برابر با Sales Amount کل خواهد بود؛ همانطور که در تصویر بعدی نشان داده شده است.
این ویژگی باعث میشود بتوان بهوضوح تشخیص داد چه بخشی از درآمد:
مستقیماً قابل انتساب به کمپینهاست
و چه بخشی بدون Attribution مستقیم و خارج از کمپینهای قابل ردیابی ایجاد شده است
جدول Campaign میتواند Measureهایی را که تا اینجا معرفی کردیم فیلتر کند. با این حال، زمانی که یک کمپین خاص را فیلتر میکنید، مقدار Unattributed Sales همیشه Blank خواهد بود؛ همانطور که در تصویر بعدی مشاهده میشود.
این رفتار قابل انتظار است، زیرا با اعمال فیلتر روی یک کمپین مشخص، فروشهایی که هیچ Attribution مستقیمی به کمپین ندارند از Filter Context خارج میشوند. در نتیجه، Measure مربوط به فروشهای بدون انتساب دیگر مقداری برای نمایش نخواهد داشت.
این محدودیت یکی از دلایلی است که ما را به سمت معرفی مفهوم Influenced Sales و استفادهی کنترلشده از CROSSFILTER در ادامهی مدل DAX هدایت میکند تا بتوان تأثیر واقعی کمپینها را فراتر از Attribution مستقیم تحلیل کرد.
Total Sales (کل فروش)
Measure Total Sales کل درآمد را نمایش میدهد و هرگونه فیلتر مربوط به کمپین که در Report اعمال شده باشد را نادیده میگیرد.
به بیان دیگر، این Measure یک نمای مرجع از فروش کل ارائه میدهد که مستقل از انتخاب کمپینهاست و بهعنوان مبنایی برای مقایسه با Attributed Sales، Unattributed Sales و در ادامه Influenced Sales استفاده میشود.
Total Sales =
CALCULATE (
[Sales Amount],
REMOVEFILTERS ( Campaign )
)
این Measure با استفاده از تابع REMOVEFILTERS، هرگونه انتخاب یا فیلتر اعمالشده روی جدول Campaign را حذف میکند. به این ترتیب، Total Sales همیشه کل مبلغ فروش را نمایش میدهد، بدون توجه به اینکه چه کمپینی در Report انتخاب شده باشد.
گزارش زیر تفاوت بین Total Sales و Sales Amount را بهخوبی نشان میدهد. در این گزارش، یک Matrix وجود دارد که در آن ستون Product[Brand] در سطرها قرار دارد و Campaign[Campaign Name] بهصورت یک Hierarchy تودرتو نمایش داده میشود.
با تمرکز روی برند Contoso:
در سطح برند، هر دو Measure یعنی Sales Amount و Total Sales مقدار 581,299.33 را نشان میدهند.
این عدد، مجموع کل فروش تمام محصولات برند Contoso است.
وقتی برند Contoso را باز میکنیم تا کمپینهای جداگانه را ببینیم، رفتار Measureها متفاوت میشود.
ردیف Blank (با حاشیهی سبز خطچین مشخص شده) نشاندهندهی فروشهای بدون انتساب (Unattributed Sales) است:
Sales Amount مقدار 206,609.47 را نمایش میدهد.
در مقابل، Total Sales همچنان 581,299.33 باقی میماند.
برای کمپینهای جداگانه (Promo A, Bundle B و Mailing C با حاشیهی قرمز پررنگ مشخص شده):
Sales Amount فقط تراکنشهایی را نشان میدهد که به هر کمپین اختصاص داده شدهاند.
Total Sales همچنان مجموع کل فروش برند (581,299.33) را نمایش میدهد.
گزارش همچنین نشان میدهد که:
Attributed Sales ارزش محصولات مرتبط با کمپینهای انتخابشده را نمایش میدهد. این Measure Additive است، زیرا هر محصول فقط میتواند به یک کمپین اختصاص داده شود.
Unattributed Sales مقدار مشاهدهشده در Sales Amount هنگام انتخاب ردیف Blank کمپین را نشان میدهد.
این الگو باعث میشود Total Sales بهعنوان یک نقطه مرجع (Reference Point) مفید باشد. هنگام تحلیل یک کمپین مشخص، میتوان Attributed Sales را با Total Sales مقایسه کرد تا بفهمیم چه سهمی از کل درآمد برند از طریق آن کمپین حاصل شده است. این Measure یک Context پایدار فراهم میکند، حتی زمانی که چند کمپین در گزارش فیلتر شده باشند.
Influenced Sales (فروشهای تحت تأثیر)
Measure Influenced Sales پیچیدهترین Measure است. این Measure شامل تمام فروشهای محصولاتی میشود که در کمپینهای انتخابشده شرکت کردهاند، بدون توجه به اینکه هر تراکنش بهطور مستقیم به یک کمپین نسبت داده شده باشد یا نه.
برای درک عملکرد این Measure، مشاهدهی گزارشی که Sales Amount و Influenced Sales را برای کمپینهای مختلف مقایسه میکند، بسیار مفید است.
با نگاه به برند Contoso در سطح برند، Measure Influenced Sales مقدار 483,345.11 را نشان میدهد که کمتر از Sales Amount (581,299.33) است. دلیل این اختلاف این است که Influenced Sales فقط شامل محصولاتی میشود که در حداقل یک کمپین شرکت کردهاند. محصولات Contoso که خارج از هر کمپین قرار دارند، در این Measure لحاظ نمیشوند.
وقتی برند Contoso را باز میکنیم تا کمپینهای جداگانه را ببینیم، تفاوت بین این دو Measure واضحتر میشود:
برای Promo A:
Sales Amount برابر با 127,176.13 است و فقط تراکنشهایی را نشان میدهد که مستقیماً به این کمپین نسبت داده شدهاند.
Influenced Sales برابر با 225,859.05 است، که شامل تمام فروش محصولات حاضر در Promo A میشود، بدون توجه به اینکه تراکنش به کمپین نسبت داده شده باشد یا نه.
فاصله بین این دو مقدار نشاندهندهی تأثیر بالقوه کمپین است که توسط Attribution مستقیم قابل ردیابی نیست.
توجه کنید که ردیف Blank هیچ مقداری برای Influenced Sales ندارد. این کاملاً درست است، زیرا هیچ کمپینی برای آن ردیف انتخاب نشده و بنابراین هیچ محصول کمپینی برای ارزیابی وجود ندارد.
Total Influenced Sales مقدار یکسانی را در تمام ردیفها درون یک برند نشان میدهد. این Measure فیلتر کمپین را نادیده میگیرد و جزئیات آن در بخشهای بعدی مقاله توضیح داده خواهد شد.
Measure Influenced Sales مقدار Sales Amount را با استفاده از Propagation فیلتر محاسبه میکند، همانطور که در نمودار زیر نشان داده شده است:
فیلترهای کمپین (Campaign) ابتدا محصولات مرتبط در جدول Product را فیلتر میکنند،
سپس فروشهای مرتبط با این محصولات از طریق جدول CampaignProducts محدود میشوند.
در این بخش، Measure Influenced Sales پیادهسازی میشود. این Measure تمام فروشهای محصولاتی را که در کمپینهای انتخابشده شرکت داشتهاند شامل میشود، بدون توجه به اینکه هر تراکنش مستقیماً به کمپین نسبت داده شده باشد یا خیر.
Influenced Sales =
VAR HasCampaigns = COUNTROWS ( CampaignProducts ) > 0
VAR Result =
CALCULATE (
DIVIDE ( [Sales Amount] + 0, HasCampaigns ),
VALUES ( Campaign[Campaign] ), -- Forces selected or all campaigns
CROSSFILTER ( CampaignProducts[ProductKey], 'Product'[ProductKey], BOTH ),
CROSSFILTER ( Sales[Campaign], Campaign[Campaign], NONE )
)
RETURN Result
Measure Influenced Sales نیاز به دو تغییر CROSSFILTER دارد تا نحوهی انتشار فیلترها در مدل داده اصلاح شود.
گام اول: فعال کردن فیلتر دوطرفه بین CampaignProducts و Product
CROSSFILTER ( CampaignProducts[ProductKey], Product[ProductKey], BOTH )
این دستور، فیلتر دوطرفه (Bidirectional Filtering) بین جدولهای CampaignProducts و Product را فعال میکند.
زمانی که یک کمپین انتخاب میشود، فیلتر مسیر زیر را دنبال میکند:
Campaigns → CampaignProducts → Product → Salesاین مسیر تضمین میکند که تمام تراکنشهای مربوط به محصولاتی که در کمپین حضور دارند شامل تحلیل شود.
گام دوم: غیرفعال کردن رابطه مستقیم Sales و Campaigns
CROSSFILTER ( Sales[Campaign], Campaign[Campaign], NONE )
این دستور رابطه مستقیم بین Sales و Campaigns را غیرفعال میکند.
بدون این کار، فیلتر کمپین بهطور مستقیم از ستون Campaign[Campaign] به Sales منتقل میشد و در نتیجه فقط تراکنشهای منتسبشده لحاظ میشدند.
با غیرفعال کردن این مسیر، فیلتر تنها از طریق رابطه با جدول Product به Sales منتقل میشود، که اساس Influenced Sales است.
اعمال فیلتر بر اساس کمپینهای انتخابشده
VALUES ( Campaign[Campaign] )
این دستور تضمین میکند که فیلتر بر اساس کمپینهای انتخابشده اعمال شود.
زمانی که هیچ کمپینی انتخاب نشده باشد، هیچ فیلتری از جدول Campaign منتشر نمیشود و بنابراین تمام محصولات قابل مشاهده خواهند بود.
در این شرایط، Measure فقط محصولاتی که حداقل در یک کمپین حضور دارند را فیلتر میکند.
مدیریت شرایط لبهای با DIVIDE
DIVIDE ( [Sales Amount] + 0, HasCampaigns )
این الگو برای شرایطی کاربرد دارد که محصولی در کمپین حضور دارد اما فروشی ندارد:
اگر Sales Amount خالی باشد اما محصول در کمپین حضور داشته باشد، مقدار 0 بازگردانده میشود.
اگر محصول در هیچ کمپین انتخابشدهای حضور نداشته باشد، نتیجه Blank خواهد بود (به دلیل تقسیم بر صفر).
این کار تضمین میکند که محصولات با فروش صفر در گزارشها باقی بمانند و تحلیل دسترسی کمپین (Campaign Reach) کامل باشد.
Total Influenced Sales (کل فروشهای تحت تأثیر)
Measure Total Influenced Sales نسخهی توسعهیافتهی Influenced Sales است و تمام فروشهای تحت تأثیر را در همه کمپینها نشان میدهد، بدون توجه به انتخاب کمپین فعلی.
این Measure یک مرجع پایدار ارائه میدهد و کمک میکند تا تأثیر کل کمپینها بر فروش محصول در برندها و محصولات مختلف تحلیل شود.
Total Influenced Sales =
CALCULATE (
[Influenced Sales],
REMOVEFILTERS ( Campaign ),
NOT ISBLANK ( Campaign[Campaign] )
)
فیلتر
NOT ISBLANK ( Campaigns[Campaign] )
تمام کمپینها را انتخاب میکند و هرگونه فیلتر خاص کمپین در گزارش را نادیده میگیرد. با این کار، Measure Influenced Sales برای انتخاب گستردهتر همه کمپینها محاسبه میشود.
این رویکرد برای مقایسه تحلیلی بسیار مفید است:
اگر مقدار Total Influenced Sales بهطور قابل توجهی بیشتر از Influenced Sales برای کمپین انتخابشده باشد، نشان میدهد که کمپینهای دیگر نیز باعث فروش محصولات مشترک شدهاند.
تحلیلگران میتوانند از این اطلاعات برای شناسایی اثر متقابل کمپینها (Cross-Campaign Effects) یا اطمینان از عدم از دست رفتن تعاملات مهم بین کمپینها استفاده کنند.
گزارش زیر برند Contoso را در سطح محصول نشان میدهد، با انتخاب کمپین Mailing C.
این نما کمک میکند تا Influenced Sales و Total Influenced Sales را بهدرستی تفسیر کنیم.
همچنین چند سناریوی جالب درباره تأثیر کمپینها و فروش محصولات مشترک را برجسته میکند.
تحلیل نقاط مختلف در گزارش کمپین Mailing C
Point 1 (حاشیه سیاه خطچین)
نشاندهنده محصولاتی است که نه فروش منتسبشده (Attributed Sales) دارند و نه فروش تحت تأثیر کمپین (Influenced Sales).
مثال: محصولات Cigarette Lighter Adapter در کمپین Mailing C شرکت ندارند، اما فروش آنها در Total Sales ظاهر میشود (79.97, 491.20, 381.45).
Sales Amount خالی است، زیرا هیچ تراکنشی به Mailing C نسبت داده نشده است.
Influenced Sales نیز خالی است، زیرا این محصولات جزو کمپین انتخابشده نیستند.
تفاوت در Total Influenced Sales مشاهده میشود:
نسخهی Black مقدار Blank دارد،
نسخههای Red و White مقدارشان با Total Sales برابر است.
دلیل این تفاوت این است که نسخههای Red و White حداقل در یک کمپین حضور دارند (هرچند نه Mailing C)، بنابراین Total Influenced Sales = Total Sales است.
برای هر محصول منفرد، اگر Total Influenced Sales مقداری داشته باشد، با Total Sales برابر خواهد بود.
نسخهی Black در هیچ کمپینی شرکت ندارد، به همین دلیل Total Sales مقدار دارد اما Total Influenced Sales خالی است.
Point 2 (حاشیه سبز پررنگ)
نشاندهنده محصولاتی است که تمام Measureها همراستا هستند.
مثال: Contoso 16GB Mp5 Player M1600 Blue و Green
Sales Amount، Influenced Sales و Total Influenced Sales همه مقدار یکسانی دارند.
این نشان میدهد که این محصولات منحصراً در کمپین Mailing C هستند، تمام فروشهایشان به کمپین نسبت داده شده و هیچ کمپین دیگری شامل آنها نیست.
Point 3 (حاشیه قرمز خطچین)
نشاندهنده محصولاتی است که در کمپین حضور دارند اما فروش صفر دارند.
این محصولات در حداقل یک کمپین دیگر غیر از Mailing C شرکت دارند اما هیچ تراکنشی در Sales ثبت نشده است.
Total Influenced Sales مقدار 0.00 نمایش میدهد تا این محصولات در گزارش دیده شوند، نه Blank.
اگر این محصولات در کمپین Mailing C هم حضور داشتند، Influenced Sales نیز مقدار 0.00 نمایش میداد.
این همان Edge Case است که توسط الگوی DIVIDE در Measure Influenced Sales مدیریت میشود: هدف تمایز بین “بدون فروش” (0.00) و “غیرعضو کمپین” (Blank) است.
Point 4 (حاشیه آبی خطچین)
نشاندهنده محصولاتی است که Influenced Sales بیشتر از Sales Amount است.
مثالها:
Contoso 16GB New Generation MP5 Player M1650 White: Influenced Sales = 1,765.43، اما Sales Amount = 1,004.47
Contoso 2G MP3 Player E200 Black: Sales Amount = 19.41، Influenced Sales = 180.33
این اختلافها تفاوت بین فروش منتسبشده و فروش غیرمنتسبشده برای محصولات کمپین انتخابشده را نشان میدهند.
وقتی محصولی عضو کمپین انتخابشده است (Mailing C در این مثال)، Total Sales، Influenced Sales و Total Influenced Sales همیشه در سطح محصول برابر هستند.
در سطح برند Contoso، مقادیر متفاوت خواهند بود، زیرا جمعبندی محصولات با شرایط مختلف انجام میشود، همانطور که در نقاط قبلی توضیح داده شد.
Organic Sales (فروشهای ارگانیک)
Measure Organic Sales درآمد حاصل از محصولاتی را جدا میکند که هرگز در هیچ کمپینی شرکت نکردهاند:
این Measure به تحلیلگران کمک میکند تا بخش درآمد برند که مستقل از کمپینهاست را شناسایی کنند و اثر واقعی کمپینها بر فروش کل را بهتر درک کنند.
Organic Sales =
IF (
NOT ISINSCOPE ( Campaign[Campaign] ),
VAR ProductsWithoutCampaigns =
CALCULATETABLE (
FILTER (
'Product',
ISEMPTY ( RELATEDTABLE ( CampaignProducts ) )
),
REMOVEFILTERS ( Campaign )
)
VAR Result =
CALCULATE (
[Sales Amount],
ProductsWithoutCampaigns,
REMOVEFILTERS ( Campaign )
)
RETURN Result
)
Measure Organic Sales ابتدا محصولاتی را شناسایی میکند که در هیچ کمپینی شرکت نکردهاند (ProductsWithoutCampaigns).
عبارت CALCULATETABLE روی جدول Product تکرار میشود و تنها محصولاتی را نگه میدارد که هیچ کمپینی برای آنها ثبت نشده است.
با استفاده از REMOVEFILTERS روی جدول Campaign، اطمینان حاصل میکنیم که این ارزیابی شامل تمام کمپینها میشود، نه فقط کمپینهای انتخابشده در گزارش.
فروش یک محصول تنها زمانی ارگانیک تلقی میشود که محصول هرگز در هیچ کمپینی ظاهر نشده باشد.
در مرحلهی بعد، دومین CALCULATE مقدار Sales Amount را فقط برای این محصولات محاسبه کرده و در Result ذخیره میکند.
در این حالت، REMOVEFILTERS روی Campaign تضمین میکند که هرگونه انتخاب کمپین نادیده گرفته شود و محاسبه دقیق محصولات ارگانیک انجام شود.
بررسی اولیه با ISINSCOPE تضمین میکند که Measure فقط زمانی مقدار بازگرداند که Campaign بخشی از سطح گروهبندی گزارش نباشد.
وقتی کاربران کمپینها را از طریق Slicer یا سایر فیلترهای خارجی انتخاب میکنند، Measure همچنان مقدار نمایش میدهد، زیرا انتخاب کمپین نادیده گرفته میشود.
اما وقتی Campaign بهعنوان ردیف یا ستون در Visual ظاهر شود، Measure مقدار Blank بازمیگرداند تا از ایجاد ابهام جلوگیری شود، زیرا محصولات ارگانیک بهطور ذاتی به هیچ کمپینی تعلق ندارند.
منطق مفهومی
بهصورت مفهومی، Organic Sales برابر است با:
Total Sales − Total Influenced Sales
هنگامی که از Measures جمعشونده مانند Sales Amount استفاده میکنیم.
این موضوع در گزارش زیر نشان داده شده است، جایی که Check Organic با استفاده از محاسبهی Visual به دست آمده است.
این Measure به تحلیلگران کمک میکند تا بخشی از درآمد برند که کاملاً مستقل از کمپینهاست را شناسایی کنند و بتوانند سهم فروش ارگانیک را از کل درآمد بهروشنی ارزیابی کنند.
Check Organic = [Total Sales] - [Total Influenced Sales]
با این حال، خوب است بدانیم چگونه میتوان Organic Sales را بهطور صحیح برای هر Measure، حتی Measureهای غیرجمعشونده (non-additive) محاسبه کرد، با استفاده از کدی که در Measure Organic Sales ارائه شده است.
Measure Organic Sales بهعنوان یک خط پایه (baseline) عمل میکند.
این محصولات هیچ تماسی با کمپینها نداشتهاند، بنابراین عملکرد آنها نشاندهندهی تقاضای ارگانیک خالص است.
مقایسه روند Organic Sales با Influenced Sales برای یک گروه از محصولات میتواند به تحلیلگران کمک کند تا افزایش کلی فروش ناشی از فعالیت کمپینها (campaign lift) را کمیسازی کنند.
برای مثال، گزارش زیر این مقایسه و تحلیل تأثیر کمپینها را بهوضوح نشان میدهد.
این رویکرد امکان میدهد اثر واقعی کمپینها بر فروش محصولات و سهم درآمد ارگانیک را در Power BI دقیقاً ارزیابی کنیم.
گزارش نشان میدهد که تمام Measureها برای دو کمپین Bundle B و Mailing C با هم نمایش داده شدهاند.
در سطح برند (مانند Contoso)، هر Measure یک دیدگاه متفاوت ارائه میدهد:
Total Sales: کل درآمد را نشان میدهد و فیلترهای کمپین را نادیده میگیرد.
Organic Sales: محصولاتی که در هیچ کمپینی شرکت نکردهاند را جدا میکند و بهعنوان خط پایه (baseline) برای عملکرد غیرپروموشنی استفاده میشود.
Unattributed Sales: تراکنشهایی بدون لینک به کمپین را ثبت میکند، حتی اگر کمپین خاصی در Slicer انتخاب شده باشد.
Attributed Sales: درآمد مستقیماً منتسب به کمپینهای انتخابشده را نشان میدهد.
Influenced Sales: شامل تمام فروش محصولات شرکتکننده در کمپینهای انتخابشده میشود، بدون توجه به Attribution.
Total Influenced Sales: مرجعی برای تمام کمپینها فراهم میکند و کمک میکند تا مشخص شود آیا محصولات کمپینهای انتخابشده در سایر کمپینها نیز حضور دارند یا خیر.
وقتی برند Contoso باز میشود، جزئیات سطح کمپین مشاهده میشود:
Organic Sales و Unattributed Sales در این سطح Blank هستند، زیرا در محدوده کمپین خاص، معنا ندارند.
Total Sales همان مقدار کل برند را نمایش میدهد، زیرا فیلتر کمپین را نادیده میگیرد.
Attributed Sales و Influenced Sales مقادیر مرتبط با کمپین را نشان میدهند.
Total Influenced Sales ثابت باقی میماند و نشاندهندهی مقدار تحت تأثیر تمام کمپینهای موجود است.
با مرور ستونها، تحلیلگران میتوانند به سرعت عملکرد کمپینها را ارزیابی کنند:
فاصله بین Attributed Sales و Influenced Sales نشاندهندهی اثر بالقوه غیرمنتسب است.
Organic Sales بهعنوان گروه کنترل برای مقایسه عمل میکند.
Total Influenced Sales میزان همپوشانی بین کمپینها را نشان میدهد.
تفسیر نتایج
Measureهایی که ایجاد کردهایم دیدگاههای مختلفی از اثرگذاری کمپینها ارائه میدهند.
خواندن آنها با هم، بینشهایی را فراهم میکند که هیچ Measure منفردی به تنهایی نمیتواند ارائه دهد.
نحوه خواندن Measureها با هم
Sales Amount را بهعنوان خط پایه در نظر بگیرید:
این مقدار کل درآمد تحت Filter Context فعلی، شامل انتخاب کمپینها را نشان میدهد.
وقتی یک کمپین انتخاب میشود، Sales Amount فقط تراکنشهای منتسبشده به آن کمپین را نمایش میدهد.
برای سادهتر کردن مقایسه با سایر Measureها، معمولاً بهتر است Attributed Sales را جایگزین Sales Amount کنید.
Attributed Sales vs Influenced Sales:
این مقایسه کمک میکند تا دامنه اثر کمپینها مشخص شود.
Influenced Sales شامل تمام درآمد محصولات شرکتکننده در کمپین انتخابشده است، بدون توجه به Attribution.
اگر Influenced Sales بسیار بیشتر از Attributed Sales باشد، نشان میدهد که محصولات کمپین فروش خوبی دارند، اما بسیاری از تراکنشها به کمپین نسبت داده نشدهاند.
این میتواند نشان دهد که مشتریان با کمپین درگیر شدهاند اما خرید را از طریق کانالهای دیگر انجام دادهاند.
Total Sales بهعنوان نقطه مرجع:
این Measure فیلتر کمپین را کاملاً نادیده میگیرد و تصویر کامل درآمد را نمایش میدهد.
مقایسه Attributed Sales با Total Sales سهم درآمد کل قابل انتساب به کمپینها را نشان میدهد.
Total Influenced Sales:
کمک میکند تا اثر متقابل بین کمپینها مشخص شود.
اگر Total Influenced Sales بیشتر از Influenced Sales کمپین انتخابشده باشد، محصولات آن کمپین در سایر کمپینها نیز حضور دارند.
این همپوشانی میتواند نشاندهنده هدفگیری تکراری کمپینها یا استراتژیهای Cross-Promotion باشد.
Organic Sales:
محصولات خارج از هر کمپین را جدا میکند و گروه کنترل را برای بررسی اینکه آیا کمپینها واقعاً فروش را افزایش دادهاند یا صرفاً تقاضایی که به هر حال رخ میداد را جذب کردهاند، فراهم میکند.
مثال تحلیل: مقایسه Attributed vs Influenced
در یک سناریو، برند مقادیر زیر را برای یک کمپین انتخابشده نشان میدهد.
تحلیل Attributed Sales و Influenced Sales
Attributed Sales تنها 23٪ از کل درآمد برند (Total Sales) و 59٪ از Influenced Sales را نشان میدهد.
این یعنی 41٪ از فروش محصولات کمپین بدون انتساب مستقیم رخ داده است.
تفسیرهای مختلفی برای این اختلاف وجود دارد:
مشتریان ممکن است کمپین را دیده و بعداً بدون استفاده از کد تخفیف خرید کرده باشند،
یا کمپین موجب آگاهیسازی شده و خریدها در کانالهای دیگر رخ دادهاند.
فاصله بین Attributed Sales و Influenced Sales نشاندهندهی اثر بالقوه غیرمنتسب کمپین است.
اگر هدف کسبوکار حداکثر کردن تراکنشهای قابل انتساب باشد، این فاصله نشاندهنده فرصت برای بهبود مکانیزمهای Attribution است.
اگر هدف آگاهی برند (Brand Awareness) باشد، رقم بالاتر Influenced Sales ممکن است معیار موفقیت مناسبتری باشد.
استفاده از Organic Sales بهعنوان خط پایه
Organic Sales درآمد محصولات خارج از هر کمپین را اندازهگیری میکند و نقش دوگانه دارد:
مقایسه عملکرد محصولات کمپین با محصولات ارگانیک:
اگر Influenced Sales محصولات کمپین سریعتر از Organic Sales رشد کند، کمپینها افزایش فروش اضافی (incremental lift) ایجاد کردهاند.
اگر هر دو با سرعت مشابه رشد کنند، کمپینها صرفاً تقاضای موجود را جذب کردهاند، نه ایجاد فروش جدید.
تنظیم انتظارات و ارزیابی هدفمندی کمپینها:
محصولات خارج از کمپین نمایانگر عملکرد غیرحمایتی هستند.
مقایسه میانگین فروش محصولی بین محصولات کمپین و غیرکمپین میتواند اثربخشی معیارهای انتخاب محصول را نشان دهد.
اگر محصولات خارج از کمپین عملکرد بهتری دارند، استراتژی هدفگیری نیاز به بازنگری دارد.
سناریوهای دیگر
الگوی ارائهشده در این مقاله برای هر موقعیتی که نیاز به سنجش هم Attribution مستقیم و هم Influence گسترده باشد قابل استفاده است.
شرط اصلی: داشتن رابطه چندبهچند (many-to-many) بین محصولات (یا موجودیتهای دیگر) و گروهبندیهایی که ممکن است بدون پیگیری صریح باعث فروش شوند.
مثالها:
رویدادها یا نمایشگاههای فروشگاهی:
محصولات در ویترین یا نمایشگاههای خاص قرار میگیرند.
مشتری ممکن است محصول را ببیند و بعداً بدون ثبت تراکنش مرتبط با رویداد خرید کند.
مقایسه Attributed Sales و Influenced Sales نشاندهنده اثر گسترده این نمایشگاهها است.
ایمیل مارکتینگ:
محصولات در خبرنامهها معرفی میشوند و ممکن است خرید فوری ایجاد کنند.
همچنین، آگاهیسازی منجر به خریدهای چند روز یا هفته بعد از طریق کانالهای دیگر میشود.
Influenced Sales این اثر تاخیری را که Attribution کلیکها نمیتواند نشان دهد، پوشش میدهد.
همکاری با اینفلوئنسرها:
دنبالکنندگان اغلب از طریق کانالهای عمومی خرید میکنند، نه لینکهای اختصاصی.
مقایسه فروش کل محصولات با تراکنشهای منتسب به لینکها، دامنه واقعی اثرگذاری اینفلوئنسر را نشان میدهد.
کلکسیونهای فصلی یا تماتیک:
محصولات در مجموعههایی مثل “Summer Essentials” یا “Back to School” گروهبندی میشوند.
مشتریان ممکن است بدون ثبت خرید مجموعهای، محصولات منفرد را خریداری کنند.
Influenced Sales میزان مشارکت کل مجموعه در درآمد را نشان میدهد.
B2B Account-Based Marketing:
کمپینهای بازاریابی روی حسابهای خاص هدفگیری میشوند.
قراردادهای بستهشده توسط تیم فروش ممکن است Attribution کمپین نداشته باشند، حتی اگر فعالیت بازاریابی اثرگذار بوده باشد.
مقایسه ارزش معاملات منتسب با کل درآمد حسابهای هدف، سهم اثرگذاری بازاریابی را نشان میدهد.
تحلیل برنامههای وفاداری:
محصولات ویژه در برنامههای وفاداری ممکن است توسط اعضایی خریداری شوند که هرگز امتیاز یا جایزهای برای آنها استفاده نکردهاند.
Influenced Sales کل خرید اعضا از محصولات ویژه را نمایش میدهد، بدون توجه به استفاده از جوایز.
نتیجهگیری
این مقاله الگوی اندازهگیری اثر کمپین فراتر از Attribution مستقیم را معرفی کرد.
راهکار مبتنی بر رابطه چندبهچند بین محصولات و کمپینها است، پیادهسازی شده از طریق جدول پل (Bridge Table) و استفاده انتخابی از CROSSFILTER برای کنترل انتشار فیلترها در مدل.
Measureهای کلیدی
Attributed Sales: پاسخ به سوال “کمپین مستقیماً چه میزان فروش ایجاد کرده است؟”
Influenced Sales: پاسخ به سوال “محصولات کمپین چه عملکرد کلی داشتهاند؟”
Organic Sales: خط پایه برای محصولات خارج از کمپین.
لازم نیست همه Measureها را استفاده کنید؛ فقط آنهایی را انتخاب کنید که با نیازهای شما مطابقت دارند.
دیدگاهتان را بنویسید