আপনি কি ডেটা অ্যানালাইসিসে আগ্রহী? DAX (Data Analysis Expressions) নিয়ে কাজ করতে গিয়ে "Filter Context" আর "Row Context" এই দুটো টার্ম শুনেছেন নিশ্চয়ই? প্রথম দিকে এই দুটো বিষয় একটু জটিল মনে হতে পারে, কিন্তু একবার যদি এদের পার্থক্যটা বুঝতে পারেন, তাহলে DAX-এ আপনার দক্ষতা অনেক বেড়ে যাবে। চলুন, আজ আমরা এই দুটো গুরুত্বপূর্ণ ধারণাকে সহজ করে জানার চেষ্টা করি, যেন মনে হয় যেন আপনি আপনার পুরনো বন্ধুর সাথে আড্ডা দিচ্ছেন!
DAX Filter Context vs Row Context: পার্থক্যটা কোথায়?
ভাবুন তো, আপনি ঢাকার নিউমার্কেটে গিয়েছেন শপিং করতে। দোকানে ঢুকে আপনি প্রথমে শাড়ির সেকশনে গেলেন (Filter Context)। সেখানে গিয়ে দেখলেন, শুধু লাল রঙের শাড়িগুলোতেই ৫০% ছাড় চলছে। এখন আপনি প্রতিটি লাল শাড়ি ধরে ধরে দেখছেন, কোনটা আপনার পছন্দ হয় (Row Context)। ঠিক একই রকমভাবে DAX-এ এই দুটো বিষয় কাজ করে।
Filter Context: আপনার ডেটার জন্য একটি ছাঁকনি
Filter Context মানে হলো আপনার ডেটার উপর আরোপিত শর্ত বা ফিল্টার। যখন আপনি Power BI বা Excel-এ কোনো ভিজ্যুয়াল তৈরি করেন, তখন সেই ভিজ্যুয়ালের মধ্যে থাকা ফিল্টারগুলো (স্লাইসার, কলামের ফিল্টার, রো-এর ফিল্টার) আপনার ডেটার উপর একটি নির্দিষ্ট প্রেক্ষাপট তৈরি করে। এই প্রেক্ষাপটটাই হলো Filter Context।
উদাহরণ:
ধরুন, আপনার একটি সেলস ডেটাবেস আছে। আপনি একটি রিপোর্টে শুধু "জানুয়ারি" মাসের "ঢাকায়" হওয়া সেলস দেখতে চান। এখানে "মাস = জানুয়ারি" এবং "শহর = ঢাকা" এই দুটোই আপনার Filter Context তৈরি করছে। DAX ফাংশনগুলো এই ফিল্টার Context-এর মধ্যে থেকেই ক্যালকুলেশন করে।
কিছু মজার বিষয়:
- Filter Context স্বয়ংক্রিয়ভাবে কাজ করে, যখন আপনি কোনো ভিজ্যুয়াল বা স্লাইসার ব্যবহার করেন।
CALCULATE
ফাংশন Filter Context পরিবর্তন বা যোগ করতে পারে, যা DAX-এর অন্যতম শক্তিশালী দিক।
Row Context: প্রতিটা সারির জন্য আলাদা হিসাব
Row Context মানে হলো, DAX যখন আপনার ডেটা টেবিলের প্রতিটা সারির উপর আলাদাভাবে কোনো ক্যালকুলেশন করে, তখন সেই সারির নিজস্ব মানগুলোই তার প্রেক্ষাপট হিসেবে বিবেচিত হয়। এটা অনেকটা আপনি যখন একটি Excel শিটে প্রতিটা সারির জন্য আলাদাভাবে কোনো ফর্মুলা টানেন, সেটার মতো।
উদাহরণ:
আপনার সেলস ডেটাবেসে "পরিমাণ" (Quantity) এবং "একক মূল্য" (Unit Price) কলাম আছে। আপনি যদি "মোট মূল্য" (Total Price) নামে একটি নতুন কলাম তৈরি করতে চান যেখানে প্রতিটা সারির জন্য পরিমাণ * একক মূল্য
গুণ করা হবে, তখন DAX প্রতিটা সারির জন্য আলাদাভাবে এই গুণফল বের করবে। এখানে প্রতিটা সারি তার নিজের পরিমাণ
এবং একক মূল্য
নিয়ে কাজ করছে – এটাই Row Context।
কিছু মজার বিষয়:
- Row Context সাধারণত ইটারেটর ফাংশন (যেমন
SUMX
,AVERAGEX
,MAXX
,MINX
,COUNTX
) এবং ক্যালকুলেটেড কলামে (Calculated Columns) কাজ করে। - Row Context-এর মধ্যে Filter Context প্রবেশ করতে পারে না, যদি না আপনি
CALCULATE
ফাংশন ব্যবহার করেন।
পার্থক্য এক নজরে:
বৈশিষ্ট্য | Filter Context | Row Context |
---|---|---|
কাজ করার ক্ষেত্র | পুরো ডেটাসেট বা ভিজ্যুয়ালের উপর | ডেটা টেবিলের প্রতিটা সারির উপর |
সৃষ্টি হয় যেভাবে | ফিল্টার, স্লাইসার, রিপোর্ট লে-আউট দ্বারা | ইটারেটর ফাংশন বা ক্যালকুলেটেড কলাম দ্বারা |
প্রভাবিত করে | অ্যাগ্রিগেশন (SUM, AVERAGE) এবং অন্যান্য মেজার | কলামের প্রতিটা সারির ব্যক্তিগত মান |
উদাহরণ | CALCULATE(SUM(Sales[Amount]), Sales[Region] = "Dhaka") |
Sales[Quantity] * Sales[UnitPrice] (ক্যালকুলেটেড কলামে) |
কখন কোনটা ব্যবহার করবেন?
এটা নির্ভর করে আপনি কী অর্জন করতে চান তার উপর।
- যদি আপনি নির্দিষ্ট কিছু শর্তের উপর ভিত্তি করে ডেটার সমষ্টিগত বিশ্লেষণ করতে চান (যেমন, "শুধুমাত্র এই বছরের ঢাকার সেলস"), তাহলে Filter Context আপনার বন্ধু।
- যদি আপনি ডেটা টেবিলের প্রতিটা সারির উপর ব্যক্তিগতভাবে কোনো হিসাব করতে চান (যেমন, "প্রতিটা পণ্যের জন্য মোট লাভ"), তাহলে Row Context ব্যবহার করবেন।
অনেক সময় এই দুটো Context একসাথে কাজ করে। CALCULATE
ফাংশন ব্যবহার করে আপনি Row Context-এর মধ্যে Filter Context তৈরি করতে পারেন, যা DAX-কে আরও শক্তিশালী করে তোলে।
FAQ (সাধারণ প্রশ্নাবলী)
Q1: CALCULATE
ফাংশন কীভাবে Filter Context এবং Row Context-কে প্রভাবিত করে?
A1: CALCULATE
ফাংশন DAX-এর সবচেয়ে শক্তিশালী ফাংশন। এটি বিদ্যমান Filter Context পরিবর্তন বা নতুন Filter Context যোগ করতে পারে। যখন CALCULATE
একটি Row Context-এর মধ্যে ব্যবহার করা হয়, তখন এটি Row Context-কে Filter Context-এ পরিবর্তন করে দেয়, যা "Context Transition" নামে পরিচিত। এর ফলে আপনি প্রতিটি সারির জন্য একটি নতুন ফিল্টার প্রেক্ষাপট তৈরি করতে পারেন, যা খুবই কার্যকরী।
Q2: Row Context কি কখনো Filter Context-এ পরিণত হতে পারে?
A2: হ্যাঁ, পারে! যখন আপনি একটি ইটারেটর ফাংশনের (যেমন SUMX
) ভিতরে CALCULATE
ফাংশন ব্যবহার করেন, তখন CALCULATE
ফাংশন Row Context-কে Filter Context-এ রূপান্তরিত করে। একে "Context Transition" বলা হয়। এটা DAX-এ জটিল কিন্তু খুবই শক্তিশালী ক্যালকুলেশন করার জন্য অপরিহার্য।
Q3: DAX-এ Filter Context এবং Row Context বোঝা কেন এত গুরুত্বপূর্ণ?
A3: এই দুটো বিষয় বোঝা DAX-এ আপনার দক্ষতা বাড়াতে অপরিহার্য। কারণ, DAX ক্যালকুলেশনগুলো এই Context-এর উপর ভিত্তি করেই কাজ করে। যদি আপনি Context না বোঝেন, তাহলে আপনার মেজারগুলো ভুল ফলাফল দিতে পারে বা আপনার প্রত্যাশা অনুযায়ী কাজ নাও করতে পারে। সঠিক Context বোঝা আপনাকে নির্ভুল এবং কার্যকরী DAX কোড লিখতে সাহায্য করবে।
Q4: Calculated Column এবং Measure-এর মধ্যে Context-এর পার্থক্য কী?
A4: Calculated Column তৈরি করার সময় ডিফল্টভাবে একটি Row Context থাকে। অর্থাৎ, এটি টেবিলের প্রতিটি সারির জন্য আলাদাভাবে হিসাব করে। অন্যদিকে, Measure তৈরি করার সময় ডিফল্টভাবে কোনো Row Context থাকে না, এটি Filter Context-এর উপর ভিত্তি করে কাজ করে। Measure সাধারণত ভিজ্যুয়ালের ফিল্টার অনুযায়ী ডেটা অ্যাগ্রিগেট করে।
Q5: DAX-এ Context Transition এর একটি বাস্তব উদাহরণ দিন।
A5: ধরুন, আপনার একটি Sales টেবিল আছে যেখানে প্রতিটি Transaction-এর জন্য SalesAmount
এবং Profit
আছে। আপনি একটি Measure তৈরি করতে চান যা প্রতিটি Product-এর জন্য মোট Profit বের করবে, কিন্তু শুধু সেই Transaction-গুলোর জন্য যেখানে SalesAmount
1000 টাকার বেশি।
যদি আপনি SUMX(Sales, Sales[Profit])
ব্যবহার করেন, এটি প্রতিটি সারির Profit
যোগ করবে। কিন্তু যদি আপনি CALCULATE(SUM(Sales[Profit]), FILTER(Sales, Sales[SalesAmount] > 1000))
ব্যবহার করেন, তাহলে CALCULATE
এবং FILTER
ফাংশনগুলো একটি নতুন Filter Context তৈরি করবে যা শুধুমাত্র 1000 টাকার বেশি বিক্রয় হওয়া লেনদেনগুলোর জন্য মুনাফা যোগ করবে। এটি Context Transition-এর একটি ভালো উদাহরণ।
Key Takeaways (মূল কথা)
- Filter Context: ডেটার উপর আরোপিত ছাঁকনি বা শর্ত, যা পুরো ডেটাসেট বা ভিজ্যুয়ালের উপর কাজ করে।
CALCULATE
ফাংশন এর মূল চালিকাশক্তি। - Row Context: ডেটা টেবিলের প্রতিটা সারির উপর ব্যক্তিগতভাবে কাজ করার প্রেক্ষাপট, যা ইটারেটর ফাংশন বা ক্যালকুলেটেড কলাম দ্বারা তৈরি হয়।
- এই দুটো Context বোঝা DAX-এ নির্ভুল এবং শক্তিশালী ক্যালকুলেশন করার জন্য অত্যন্ত জরুরি।
CALCULATE
ফাংশন Filter Context পরিবর্তন করতে পারে এবং Row Context-কে Filter Context-এ রূপান্তরিত করতে পারে (Context Transition)।
আশা করি, এই আলোচনা আপনার DAX শেখার পথকে আরও সহজ করে তুলবে। এখন আপনি নিজেই ডেটার সাথে আরও ভালোভাবে খেলতে পারবেন! যদি আপনার আরও কোনো প্রশ্ন থাকে, তাহলে নিচে কমেন্ট করে জানাতে ভুলবেন না।